<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zbriois</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zbriois"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Zbriois"/>
		<updated>2026-05-14T02:51:40Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57532</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57532"/>
				<updated>2018-05-15T23:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Documents Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 51&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
[[Media:Rapport_final_P44_bis.pdf]] &amp;lt;br&amp;gt;&lt;br /&gt;
https://archives.plil.fr/zbriois/PROJET_4A.git&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57531</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57531"/>
				<updated>2018-05-15T23:19:06Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Documents Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 51&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
[[Media:Rapport_final_P44_bis.pdf]]&lt;br /&gt;
https://archives.plil.fr/zbriois/PROJET_4A.git&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57513</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57513"/>
				<updated>2018-05-15T22:54:53Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Documents Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 51&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
[[Media:Rapport_final_P44_bis.pdf]]&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_final_P44_bis.pdf&amp;diff=57512</id>
		<title>Fichier:Rapport final P44 bis.pdf</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_final_P44_bis.pdf&amp;diff=57512"/>
				<updated>2018-05-15T22:54:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : avec les images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avec les images&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57462</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57462"/>
				<updated>2018-05-15T22:13:47Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Avril */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 51&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57461</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57461"/>
				<updated>2018-05-15T22:13:34Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Avril */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57459</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=57459"/>
				<updated>2018-05-15T22:12:11Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Avril : Séance 3 - 18/04/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Open German !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur l'ordinateur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3,5&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5,5&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| 4&lt;br /&gt;
| 50&lt;br /&gt;
| 68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX ne sont pas supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
:Un script de lancement pour entrainer l'algorithme de reconnaissance d'image&lt;br /&gt;
:Un script qui prend en entrée le nom d'une image et retourne le nom de l'objet pris sur la photo avec le pourcentage de certitude&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
: Vidéo prise pour chaque MPS, puis découpage en images pour avoir plus de 600 images par MPS&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: préparation de l'inventaire&lt;br /&gt;
: arbitrage&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
; Optimisation de l'algorithme de reconnaissance d'image&lt;br /&gt;
: Création de plusieurs algorithmes de reconnaissance d'image (changement de paramètre pour déterminer le meilleur)&lt;br /&gt;
: Test de reconnaissance d'image de chaque MPS avec algorithmes&lt;br /&gt;
: Analyse des résultats et optimisation du script de reconnaissance&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=55261</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=55261"/>
				<updated>2018-05-01T17:58:48Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX non supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS (sur le deuxième PC)&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image:nd&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
; Avancement sur les scripts d’exécution de Tensorflow:&lt;br /&gt;
&lt;br /&gt;
==Avril : Semaine de l'Open German ==&lt;br /&gt;
; Installation de Tensorflow (sur le deuxième PC):&lt;br /&gt;
: Problème de lancement de Tensorflow via ROS, ROS ne cherchait pas Tensorflow au bon endroit (certainement à cause du multi-versions Python)&lt;br /&gt;
&lt;br /&gt;
; Décision de filtre final:&lt;br /&gt;
: Tentative de filtre passthrought et voxel grid: échec. Malgré un appel et des paramétrages correspondants aux tutoriels ROS et une compilation sans erreur le filtre ne s'effectue pas.&lt;br /&gt;
: Filtre &amp;quot;à la main&amp;quot;: tout les pointsclouds récupérés de la caméra dont la distance sur l'axe z est supérieure à la portée infrarouge de la caméra sont transformés en pixels noirs.&lt;br /&gt;
&lt;br /&gt;
; Prise de différents sets d'images des MPS:&lt;br /&gt;
: Avec caméra correctement placée sur le robot: sans filtre, 2 filtres cannys différents, sobel x, sobel y, laplacien,&lt;br /&gt;
: Même chose mais avec caméra à une hauteur aléatoire,&lt;br /&gt;
: Caméra sur le robot, proche de la MPS et filtre &amp;quot;à la main&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Ne concernant pas directement le projet:&lt;br /&gt;
: arbitrage,&lt;br /&gt;
: montage des robots&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=55260</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=55260"/>
				<updated>2018-05-01T17:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Avril : Séance 2 - 11/04/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
** avec le realsense-viewer on arrive bien a récupérer les informations de la caméra: [[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
** cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue: [[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Avril==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| &lt;br /&gt;
| 0,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1. Reconnaissance d'image sur la carte&lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Placement finale de la caméra&lt;br /&gt;
| 3,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupération des pointCloude2&lt;br /&gt;
| 3,5&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 9,5&lt;br /&gt;
| 4,5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
;Placement de la caméra&lt;br /&gt;
:choix de la position&lt;br /&gt;
:étude du champs de vision réel de la caméra&lt;br /&gt;
&lt;br /&gt;
;Installation de TensorFlow sur la carte&lt;br /&gt;
:On a eu un problème car les instructions AVX non supportées par la carte&lt;br /&gt;
La compétition arrive bientot donc on va se concentrer sur la partie ROS. On fera fonctionner notre programme sur un ordinateur dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 2 - 11/04/18==&lt;br /&gt;
&lt;br /&gt;
Installation de ROS&lt;br /&gt;
&lt;br /&gt;
Détermination de la position exacte de la caméra sur la plateforme du Robotino.&lt;br /&gt;
&lt;br /&gt;
Début du script pour la reconnaissance d'image:&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 3 - 18/04/18==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54959</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54959"/>
				<updated>2018-04-18T13:44:28Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Peu de matière, pas de justification des choix, aucune réalisation concréte présentée. Sauf effort très important de dernière minute, un projet qui n'aboutira pas.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Inutile en l'état actuel du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki trop peu alimenté pour cette phase du projet, aucune illustration, impossible de se faire une idée de l'avancée du projet avec le Wiki. Coquilles non prises en compte.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration avec le dispositif décrit en fin de Wiki peut être envisagée.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un Wiki illustré mais avec du copier/coller des manuels de référence sans grand intérêt. Toujours pas de circuit testé en fin de projet. Un très important effort final est toujours possible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;A priori inutile sauf si une version fonctionnelle de la carte était obtenue.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki correct mais sans plus, des problèmes de format, des illustrations mal incluses, des vidéos youtube. Cela dit le Wiki peut devenir tout à fait correct avec un peu de temps et de soin.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de doute sur le travail effectué, une vidéo de démonstration est possible et requise.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Prenez un peu de temps pour corriger les coquilles assez fréquentes. Wiki légérement décalé par rapport au travail effectué.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Aucun doute sur le travail effectué mais il n'est pas sur que le sujet se prête à une vidéo. A discuter avec les encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail progresse mais le Wiki est décalé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une démonstration est requise, faites en sorte que les prototypes soient au rendez-vous.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki correct permettant de suivre l'avancé du projet. Le rapport devra être plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Aucun doute sur la qualité du travail, le sujet ne se prête pas à une démonstration sauf si des processus visuels peuvent être chargés sur RIOT pour CC430.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Merci de corriger les coquilles trop nombreuses en fin de Wiki. Les derniers travaux sont décrits trop succinctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Un grand effort va devoir être fourni pour obtenir un prototype fonctionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Travail correctement décrit mais une tendance à s'arrêter à chaque obstacle, qu'en est-il de l'utilisation de &amp;lt;code&amp;gt;v4l2loopback&amp;lt;/code&amp;gt; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Faites en sorte d'obtenir un prototype fonctionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune mise à jour du Wiki depuis la dernière remarque ci-dessus. L'avancée du travail ne peut pas être évaluée.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Un prototype sera-t-il disponible ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rien à dire sur la forme, le Wiki est toujours bien tenu et permet de se faire une bonne idée de l'avancée du projet. Par contre le travail effectué sur les dernières semaine est très léger.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros doute sur la possibilité d'avoir un dispositif convaincant à montrer en fin de projet. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki non mis à jour. Le code (IDE Arduino) est inclus in extenso dans le Wiki. Toujours pas d'intégration des composants.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros doute sur la possibilité d'avoir un dispositif convaincant à montrer en fin de projet. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Beaucoup d'aide pour améliorer le Wiki mais pas d'effort pour le maintenir par la suite : pas de description du mandala décoré. Rien non plus sur la programmation des animations.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise, il faut finaliser le projet, concernant le matériel c'est correctement engagé mais il faut un gros effort sur la programmation.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;La discussion sur la conception du circuit est difficile à comprendre, d'où sortent les intensités de 0,6A et de 1,2A ? Mettre une photo d'écran pour le PCB est une hérésie sachant qu'il est possible d'exporter une image directement de Fritzing. Sans un très important travail final, il sera impossible de mener le projet à bien.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Une démonstration est requise, il faut finaliser le projet un très gros effort est nécessaire malgré l'aide déjà apporté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le Wiki a été utilisé mais montre un manque de travail flagrant. Un élève ne participe pas au projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Sauf miracle aucune démonstration ne sera possible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Il est clair que le Wiki est alimenté mais un manque de rigueur dans la syntaxe mediawiki et de trop nombreuses coquilles ne permettent pas une lecture facile. Avec un peu de soin vous pourriez avoir un excellent Wiki. Le travail décrit est foisonnant, essayez de synthétiser, en particulier il serait intéressant de savoir dans quel état sont les différents travaux entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une démonstration est requise.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki non mis à jour. Toujours entrain de travailler sur la clef XBee.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Une démonstration est requise. Un très grand effort semble nécessaire pour avoir quelque chose à présenter sur la table.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;De quelle résistance devant le récepteur IR parlez-vous ? Il n'y en a pas sur le PCB. Votre Wiki se concentre ces dernières semaines sur la modélisation du chassis alors que le travail sur la programmation de l'ATMega328p n'y figure pas. C'est dommage sachant qu'il s'agit du travail le plus valorisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstation est requise. Arriverez-vous à souder et programmer une carte à temps ? Votre chassis complexe sera-t-il aussi fonctionnel qu'un chassis très simple à base de 2 plaques et d'entretoises ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki non à jour. Ce qui est disponible donne l'impression d'un papillonnage de tutorial en tutorial. Vous abandonnez la banana PI D1 en début de projet pour vous concentrer sur de la reconnaissance d'image que vous ne semblez pas avoir conduit à bien puisque vous parlez de l'abandonner. Vous passez de C++ à python sans raison convaincante. Vous développez un serveur Web sous &amp;lt;code&amp;gt;flask&amp;lt;/code&amp;gt; que vous cachez derrière un proxy inverse &amp;lt;code&amp;gt;ngnix&amp;lt;/code&amp;gt;. Vous parlez de stratégie en semaine 9 ce qui bien tardif. Votre projet semble embourbé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Malheureusement il ne semble pas qu'il y aura quoi que ce soit à montrer. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki toujours excellent. Votre exploration du monde de l'électronique analogique est passionnant à lire du moins pour un profane en la matière. Juste des notes pour les deux dernières semaines mais c'est mieux que rien et vous avez raison de vous concentrer sur la réalisation.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. En espérant que la sculpture soit totalement opérationnelle.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki très correct sur la forme. Pas tout à fait à jour.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Démonstration requise. Du travail nécessaire pour avoir un prototype pour la démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Corrigez vos erreurs de grammaire et d'orthographe ! Utilisez correctement la syntaxe mediawiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Même un résultat négatif, du style la plante est muette, est intéressant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki. Des améliorations possibles comme la correction des coquilles et compléter la partie état de l'art.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Aucun doute sur la qualité et la quantité de travail comme le montre l'&amp;quot;état de l'art&amp;quot; du Wiki. Ce sujet se prête peu à une vidéo. Il est cependant possible d'envisager une courte vidéo avec la confrontation de deux navigations Web, une classique, l'autre en passant par Tor. Le coté délicat est de trouver des démonstrations visuelles de la confidentialité apportée par Tor.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Respectez la syntaxe mediawiki. Voir les corrections. Ajoutez une photo de l'imprimante dans l'état actuel. Très bon Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Aucun doute sur le fait que le dispositif fonctionnera parfaitement de bout en bout.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Depuis février le projet piétine. Votre feuille d'heure de février en témoigne : les banques d'images des MPS n'ont pas pu être constituées (pas de raison donnée pour cet échec), de plus 13h pour acquérir des images d'une caméra même stéréoscopique est exagéré. Il vous a fallu tout le mois de mars pour résoudre ces problèmes et encore votre discussion sur la reconnaissance des MPS est peu pertinente comme expliqué en séance. Toujours rien sur l'implantation du dispositif de reconnaissance sur le système embarqué.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Il semble peu probable qu'une démonstration puisse avoir lieu. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki court. Le seul travail décrit est l'écriture d'un script shell. Une seule ligne sur la création d'un conteneur.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune démonstration envisageable.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Du travail réalisé avec un certain succès durant le mois de mars. A nouveau abandon du projet en avril.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Il ne semble pas raisonnable d'espérer une démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki très peu alimenté. Présentation du contrôle avec simulink.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration requise. Pour l'instant seul le contrôle par simulink est disponible. Ce n'est pas suffisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki insuffisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet terminé, pas de vidéo.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune avancée, il est désormais impossible d'avoir un prototype en fin de projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Rédaction rapide sur les dernières semaine. Une expérimentation est nécessaire à ce stage du projet. Elle est attendue avec impatience.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Débrouillez-vous pour avoir quelque chose de percutant à montrer !&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Il faudra encore relire le Wiki pour corriger les coquilles des nouveaux paragraphes. Les images et les vidéos sont aussi à ajouter. Il n'en reste pas moins que le Wiki et impressionnant et sera exceptionnel une fois totalement rédigé et corrigé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration absolument requise. Il y aura forcément quelque chose à montrer !&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours rien sur l'avancé du projet. Projet en échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo non adaptée au sujet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| A voir avec l'encadrant direct.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A voir avec l'encadrant direct.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|Fab/A313&lt;br /&gt;
|C205  Départ 17h (entretien stage)&lt;br /&gt;
|C205&lt;br /&gt;
|C205&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|C201&lt;br /&gt;
|E304&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E303&lt;br /&gt;
|C201&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| Antoine Gossehdelatte&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| E305 - C202&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absente entretien stage&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E302&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E302&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E303 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Gao Fan absent &amp;lt;/font&amp;gt;&lt;br /&gt;
|E304&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C205&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201-E302&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusqu'à 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 / Fab&lt;br /&gt;
| E306 / Fab&lt;br /&gt;
| E306 / C202&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
| C205/C201&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Entretien/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205 + Damien -&amp;gt; entretien stage&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| INRIA&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
| Quelque part&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E306&lt;br /&gt;
| Fabricarium (au fond)&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| E304/Fab&lt;br /&gt;
| E306/Fab&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54719</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54719"/>
				<updated>2018-04-11T12:52:38Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Peu de matière, pas de justification des choix, aucune réalisation concréte présentée. Sauf effort très important de dernière minute, un projet qui n'aboutira pas.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Inutile en l'état actuel du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki trop peu alimenté pour cette phase du projet, aucune illustration, impossible de se faire une idée de l'avancée du projet avec le Wiki. Coquilles non prises en compte.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration avec le dispositif décrit en fin de Wiki peut être envisagée.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Un Wiki illustré mais avec du copier/coller des manuels de référence sans grand intérêt. Toujours pas de circuit testé en fin de projet. Un très important effort final est toujours possible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;A priori inutile sauf si une version fonctionnelle de la carte était obtenue.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki correct mais sans plus, des problèmes de format, des illustrations mal incluses, des vidéos youtube. Cela dit le Wiki peut devenir tout à fait correct avec un peu de temps et de soin.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de doute sur le travail effectué, une vidéo de démonstration est possible et requise.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Prenez un peu de temps pour corriger les coquilles assez fréquentes. Wiki légérement décalé par rapport au travail effectué.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Aucun doute sur le travail effectué mais il n'est pas sur que le sujet se prête à une vidéo. A discuter avec les encadrants.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail progresse mais le Wiki est décalé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une démonstration est requise, faites en sorte que les prototypes soient au rendez-vous.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Un Wiki correct permettant de suivre l'avancé du projet. Le rapport devra être plus précis.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Aucun doute sur la qualité du travail, le sujet ne se prête pas à une démonstration sauf si des processus visuels peuvent être chargés sur RIOT pour CC430.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Merci de corriger les coquilles trop nombreuses en fin de Wiki. Les derniers travaux sont décrits trop succinctement.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Un grand effort va devoir être fourni pour obtenir un prototype fonctionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Travail correctement décrit mais une tendance à s'arrêter à chaque obstacle, qu'en est-il de l'utilisation de &amp;lt;code&amp;gt;v4l2loopback&amp;lt;/code&amp;gt; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Faites en sorte d'obtenir un prototype fonctionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune mise à jour du Wiki depuis la dernière remarque ci-dessus. L'avancée du travail ne peut pas être évaluée.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise. Un prototype sera-t-il disponible ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Rien à dire sur la forme, le Wiki est toujours bien tenu et permet de se faire une bonne idée de l'avancée du projet. Par contre le travail effectué sur les dernières semaine est très léger.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros doute sur la possibilité d'avoir un dispositif convaincant à montrer en fin de projet. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki non mis à jour. Le code (IDE Arduino) est inclus in extenso dans le Wiki. Toujours pas d'intégration des composants.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;De gros doute sur la possibilité d'avoir un dispositif convaincant à montrer en fin de projet. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Beaucoup d'aide pour améliorer le Wiki mais pas d'effort pour le maintenir par la suite : pas de description du mandala décoré. Rien non plus sur la programmation des animations.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration est requise, il faut finaliser le projet, concernant le matériel c'est correctement engagé mais il faut un gros effort sur la programmation.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;La discussion sur la conception du circuit est difficile à comprendre, d'où sortent les intensités de 0,6A et de 1,2A ? Mettre une photo d'écran pour le PCB est une hérésie sachant qu'il est possible d'exporter une image directement de Fritzing. Sans un très important travail final, il sera impossible de mener le projet à bien.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Une démonstration est requise, il faut finaliser le projet un très gros effort est nécessaire malgré l'aide déjà apporté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le Wiki a été utilisé mais montre un manque de travail flagrant. Un élève ne participe pas au projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Sauf miracle aucune démonstration ne sera possible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Il est clair que le Wiki est alimenté mais un manque de rigueur dans la syntaxe mediawiki et de trop nombreuses coquilles ne permettent pas une lecture facile. Avec un peu de soin vous pourriez avoir un excellent Wiki. Le travail décrit est foisonnant, essayez de synthétiser, en particulier il serait intéressant de savoir dans quel état sont les différents travaux entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une démonstration est requise.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki non mis à jour. Toujours entrain de travailler sur la clef XBee.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Une démonstration est requise. Un très grand effort semble nécessaire pour avoir quelque chose à présenter sur la table.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;De quelle résistance devant le récepteur IR parlez-vous ? Il n'y en a pas sur le PCB. Votre Wiki se concentre ces dernières semaines sur la modélisation du chassis alors que le travail sur la programmation de l'ATMega328p n'y figure pas. C'est dommage sachant qu'il s'agit du travail le plus valorisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une démonstation est requise. Arriverez-vous à souder et programmer une carte à temps ? Votre chassis complexe sera-t-il aussi fonctionnel qu'un chassis très simple à base de 2 plaques et d'entretoises ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki non à jour. Ce qui est disponible donne l'impression d'un papillonnage de tutorial en tutorial. Vous abandonnez la banana PI D1 en début de projet pour vous concentrer sur de la reconnaissance d'image que vous ne semblez pas avoir conduit à bien puisque vous parlez de l'abandonner. Vous passez de C++ à python sans raison convaincante. Vous développez un serveur Web sous &amp;lt;code&amp;gt;flask&amp;lt;/code&amp;gt; que vous cachez derrière un proxy inverse &amp;lt;code&amp;gt;ngnix&amp;lt;/code&amp;gt;. Vous parlez de stratégie en semaine 9 ce qui bien tardif. Votre projet semble embourbé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Malheureusement il ne semble pas qu'il y aura quoi que ce soit à montrer. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Wiki toujours excellent. Votre exploration du monde de l'électronique analogique est passionnant à lire du moins pour un profane en la matière. Juste des notes pour les deux dernières semaines mais c'est mieux que rien et vous avez raison de vous concentrer sur la réalisation.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. En espérant que la sculpture soit totalement opérationnelle.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki très correct sur la forme. Pas tout à fait à jour.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Démonstration requise. Du travail nécessaire pour avoir un prototype pour la démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Corrigez vos erreurs de grammaire et d'orthographe ! Utilisez correctement la syntaxe mediawiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Même un résultat négatif, du style la plante est muette, est intéressant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bon Wiki. Des améliorations possibles comme la correction des coquilles et compléter la partie état de l'art.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Aucun doute sur la qualité et la quantité de travail comme le montre l'&amp;quot;état de l'art&amp;quot; du Wiki. Ce sujet se prête peu à une vidéo. Il est cependant possible d'envisager une courte vidéo avec la confrontation de deux navigations Web, une classique, l'autre en passant par Tor. Le coté délicat est de trouver des démonstrations visuelles de la confidentialité apportée par Tor.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Respectez la syntaxe mediawiki. Voir les corrections. Ajoutez une photo de l'imprimante dans l'état actuel. Très bon Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Aucun doute sur le fait que le dispositif fonctionnera parfaitement de bout en bout.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Depuis février le projet piétine. Votre feuille d'heure de février en témoigne : les banques d'images des MPS n'ont pas pu être constituées (pas de raison donnée pour cet échec), de plus 13h pour acquérir des images d'une caméra même stéréoscopique est exagéré. Il vous a fallu tout le mois de mars pour résoudre ces problèmes et encore votre discussion sur la reconnaissance des MPS est peu pertinente comme expliqué en séance. Toujours rien sur l'implantation du dispositif de reconnaissance sur le système embarqué.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Il semble peu probable qu'une démonstration puisse avoir lieu. Je ne demande qu'à être démenti.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki court. Le seul travail décrit est l'écriture d'un script shell. Une seule ligne sur la création d'un conteneur.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune démonstration envisageable.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Du travail réalisé avec un certain succès durant le mois de mars. A nouveau abandon du projet en avril.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Il ne semble pas raisonnable d'espérer une démonstration.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Wiki très peu alimenté. Présentation du contrôle avec simulink.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une démonstration requise. Pour l'instant seul le contrôle par simulink est disponible. Ce n'est pas suffisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Wiki insuffisant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet terminé, pas de vidéo.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune avancée, il est désormais impossible d'avoir un prototype en fin de projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Rédaction rapide sur les dernières semaine. Une expérimentation est nécessaire à ce stage du projet. Elle est attendue avec impatience.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration requise. Débrouillez-vous pour avoir quelque chose de percutant à montrer !&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Il faudra encore relire le Wiki pour corriger les coquilles des nouveaux paragraphes. Les images et les vidéos sont aussi à ajouter. Il n'en reste pas moins que le Wiki et impressionnant et sera exceptionnel une fois totalement rédigé et corrigé.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Démonstration absolument requise. Il y aura forcément quelque chose à montrer !&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours rien sur l'avancé du projet. Projet en échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Vidéo non adaptée au sujet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
| A voir avec l'encadrant direct.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A voir avec l'encadrant direct.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|Fab/A313&lt;br /&gt;
|C205  Départ 17h (entretien stage)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|C201&lt;br /&gt;
|E304&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E303&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| Antoine Gossehdelatte&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absente entretien stage&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E303 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Gao Fan absent &amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201-E302&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusqu'à 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 / Fab&lt;br /&gt;
| E306 / Fab&lt;br /&gt;
| E306 / C204&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
| C205/C201&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205 + Damien -&amp;gt; entretien stage&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| INRIA&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
| Quelque part&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E306&lt;br /&gt;
| Fabricarium (au fond)&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| E304/Fab&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| &lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54399</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54399"/>
				<updated>2018-04-04T13:54:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54397</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54397"/>
				<updated>2018-04-04T13:54:06Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Mars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,5&lt;br /&gt;
| 11,5&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54395</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54395"/>
				<updated>2018-04-04T13:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Mars==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Mars !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 8&lt;br /&gt;
| 2&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Prise en main de ROS associé a la caméra&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 19&lt;br /&gt;
| 9,25&lt;br /&gt;
| 11,25&lt;br /&gt;
| 12,5&lt;br /&gt;
| 23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54389</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54389"/>
				<updated>2018-04-04T13:47:37Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Réalisation du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Reconnaissance (Tenserflow)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54386</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54386"/>
				<updated>2018-04-04T13:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1. Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2. Traitement a faire sur l'image (opencv, filtres ...)&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 3. Récupérer les images depuis la caméra&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 4. Comparaison avec la banque d'image&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5. Positionnement de la camera&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 24&lt;br /&gt;
| 10,25&lt;br /&gt;
| 9,25&lt;br /&gt;
| 9,5&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54371</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54371"/>
				<updated>2018-04-04T13:10:47Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54370</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54370"/>
				<updated>2018-04-04T13:09:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Avril : Séance 1 - 04/04/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;création de package&lt;br /&gt;
:Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54369</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54369"/>
				<updated>2018-04-04T13:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Réalisation du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avril : Séance 1 - 04/04/18==&lt;br /&gt;
;Problème de la semaine dernière résolu après recopie a la main du fichier my_package_launch_file.launch, il devait s'agir de la présence d'un caractère non imprimable.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54362</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54362"/>
				<updated>2018-04-04T12:54:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|Fab/A313&lt;br /&gt;
|C205  Départ 17h (entretien stage)&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E303&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 / Fab&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
| C205/C201&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205 + Damien -&amp;gt; entretien stage&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| INRIA&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
| Quelque part&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E306&lt;br /&gt;
| Fabricarium (au fond)&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54105</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54105"/>
				<updated>2018-03-28T16:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 4 - 28/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:Capturepackage.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capturepackage.jpg&amp;diff=54104</id>
		<title>Fichier:Capturepackage.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capturepackage.jpg&amp;diff=54104"/>
				<updated>2018-03-28T16:33:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : erreur lors de la creation de package&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;erreur lors de la creation de package&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54103</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54103"/>
				<updated>2018-03-28T16:33:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 4 - 28/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:capture.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54102</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54102"/>
				<updated>2018-03-28T16:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 4 - 28/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
;Bases d'utilisation de ROS:&lt;br /&gt;
:Pour exécuter un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour lancer un launch file : ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même. ROS utilise des packages pour organiser ses programmes. Un package contient:&lt;br /&gt;
::- dossier launch qui contient les launch files&lt;br /&gt;
::- dossier src qui contient les fichiers sources (c++, python ...)&lt;br /&gt;
::- fichier CMakeLists.txt qui contient la liste des règles cmake pour la compilation&lt;br /&gt;
::- fichier package.xml qui contient les informations/dépendances du package&amp;lt;br&amp;gt;&lt;br /&gt;
:Pour aller dans un package: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
:Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
::- pkg=“package_name”, nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
::- type=“python_file_name.py”, nom du programme qu'on veut exécuter&amp;gt;&lt;br /&gt;
::- name=“node_name”, nom du node qui va launch le fichier Python&lt;br /&gt;
::- output=“type_of_output” ,c'est dans cette chaîne qu'on va imprimer la sortie du fichier Python.&lt;br /&gt;
:Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
::- les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS,&lt;br /&gt;
::- ''roscd'' permet d'accéder au répertoire catkin_ws/devel,&lt;br /&gt;
::- nos packages seront a placer dans catkin_ws/src,&lt;br /&gt;
::- ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;'' permet de créer un nouveau package,&lt;br /&gt;
::- ''rospack list | grep my_package'' permet de vérifier que le package a bien été crée.&lt;br /&gt;
&lt;br /&gt;
;Tentative de création de package &amp;lt;br&amp;gt;&lt;br /&gt;
:Nous avons d'abord tenté de créer un package d'après les explications juste au dessus, mais nous obtenions une erreur ''Invalid roslaunch XML syntax: not well-formed''&amp;lt;br&amp;gt;&lt;br /&gt;
:Supposant qu'il s'agissait d'un problème de mauvaise syntaxe au niveau des paramètres du fichier ''projet_launch_file.launch'', nous avons suivi le tutoriel http://www.theconstructsim.com/ros-for-beginners/ afin de vérifier simplement que nous pouvions créer un package sans erreur avec un fichier python des plus basique. Cependant nous avons toujours le même problème d'erreur de syntaxe XML:&lt;br /&gt;
[[Fichier:capture.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54067</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54067"/>
				<updated>2018-03-28T13:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|Fab&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205 + Damien -&amp;gt; entretien stage&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| INRIA&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54066</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54066"/>
				<updated>2018-03-28T13:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|Fab&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205 | Damien -&amp;gt; entretien stage&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| INRIA&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54042</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54042"/>
				<updated>2018-03-28T13:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 4 - 28/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
* Résumé sur l'utilisation de ROS:&amp;lt;br&amp;gt;&lt;br /&gt;
Pour executer un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour cela on utilise la commande ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même.&amp;lt;br&amp;gt; &lt;br /&gt;
ROS utilise des packages pour organiser ses programmes. On a les launch files dans le dossier launch, les fichiers sources (c++, python ...) dans le dossier src, la liste des règles cmake pour la compilation dans le CMakeLists.txt et les informations/dépendance du package dans le fichier package.xml.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour aller dans un package il faut faire: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
:1. pkg=“package_name” # nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
:2. type=“python_file_name.py” # nom du programme qu'on veut executer&lt;br /&gt;
:3. name=“node_name” # Nom du node qui va launch le fichier Python&lt;br /&gt;
:4. output=“type_of_output” # C'est dans cette chaîne qu'on va imprimer la sortie du fichier Python&lt;br /&gt;
Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
Les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS. Quand on fait roscd on arrive dans le répertoire catkin_ws/devel. Les packages que nous on va créer on les placera dans catkin_ws/src. Pour créer un nouveau package: ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier qu'il a bien été crée on peut faire ''rospack list | grep my_package''&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54041</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=54041"/>
				<updated>2018-03-28T13:14:02Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Réalisation du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 4 - 28/03/18==&lt;br /&gt;
* Résumé sur l'utilisation de ROS:&amp;lt;br&amp;gt;&lt;br /&gt;
Pour executer un programme ROS il faut utiliser des fichiers spéciaux: les launch files. Pour cela on utilise la commande ''roslaunch &amp;lt;package_name&amp;gt; &amp;lt;launch_file&amp;gt;'' qui prend en paramètre le nom du package qui contient le launch file et le launch file lui même.&amp;lt;br&amp;gt; &lt;br /&gt;
ROS utilise des packages pour organiser ses programmes. On a les launch files dans le dossier launch, les fichiers sources (c++, python ...) dans le dossier src, la liste des règles cmake pour la compilation dans le CMakeLists.txt et les informations/dépendance du package dans le fichier package.xml.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour aller dans un package il faut faire: ''roscd &amp;lt;package_name&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
Tout les fichiers launch contient un &amp;lt;launch&amp;gt; tag, dans ce tag on trouve un &amp;lt;node&amp;gt; tag, dans lequel on spécifie: &lt;br /&gt;
:1. pkg=“package_name” # nom du package qui contient le code pour le programme ROS a exécuter&lt;br /&gt;
:2. type=“python_file_name.py” # nom du programme qu'on veut executer&lt;br /&gt;
:3. name=“node_name” # Nom du node qui va launch le fichier Python&lt;br /&gt;
:4. output=“type_of_output” # C'est dans cette chaîne qu'on va imprimer la sortie du fichier Python&lt;br /&gt;
Comment créer un package ?&amp;lt;br&amp;gt;&lt;br /&gt;
Les packages que nous allons créer seront dans le dossier catkin_ws pour qu'ils puissent être exécutés par ROS. Quand on fait roscd on arrive dans le répertoire catkin_ws/devel. Les packages que nous on va créer on les placera dans catkin_ws/src. Pour créer un nouveau package: ''catkin_create_pkg &amp;lt;package_name&amp;gt; &amp;lt;package_dependecies&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier qu'il a bien été créer on peut faire ''rospack list | grep my_package''&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54034</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54034"/>
				<updated>2018-03-28T13:06:06Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| E30X&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absentes &amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54032</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=54032"/>
				<updated>2018-03-28T13:05:21Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|E304/Fab&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|C201 et E304&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E304/C200&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|E304&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E304/E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absentes &amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| Fabricarium/E304&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53990</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53990"/>
				<updated>2018-03-25T21:57:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 3 - 21/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiquée par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53989</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53989"/>
				<updated>2018-03-25T21:56:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Février : Séance 1 - 07/02/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), ou un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là il y aura des risques liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiqué par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53988</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53988"/>
				<updated>2018-03-25T21:34:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 3 - 21/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
* On arrive maintenant à obtenir une connexion valide avec la caméra depuis ROS grâce à la commande &amp;quot;roslaunch realsense_camera sr300_nodelet_rgbd.launch&amp;quot; communiqué par nos tuteurs et non &amp;quot;roslaunch realsense_ros_camera rs_camera.launch&amp;quot; que nous avions trouvée sur les tutoriels ROS.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53987</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53987"/>
				<updated>2018-03-25T21:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 2 - 14/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| 7&lt;br /&gt;
| 11&lt;br /&gt;
| 12&lt;br /&gt;
|&lt;br /&gt;
| 40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît, on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch) alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 3 - 21/03/18==&lt;br /&gt;
&lt;br /&gt;
Avec la librairie TensorFlow, nous avons un algorithme qui catégorise l'image envoyée en entrée avec une certaine fiabilité.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut lui donner une banque d'images pour pouvoir reconnaitre nos MPS. &lt;br /&gt;
&lt;br /&gt;
Pour le moment nous n'avons que 4 MPS modélisées en 3D. Grace à un logiciel, nous avons pris 20 captures d'écran pour chaque MPS. Ce n'est pas beaucoup mais nous avons déjà de bons résultats. Cela est du au programme qui prend des images aléatoires que nous lui avons donné et qui les modifie lors de son entrainement(luminosité, recadrage, rotation de l'image ...).&lt;br /&gt;
&lt;br /&gt;
*Voici quelques tests effectués :&lt;br /&gt;
**ligne du haut : Image envoyée à l'algorithme &lt;br /&gt;
**ligne du bas : |Résultat après l'exécution (plus la valeur est proche de 1, plus la réponse est fiable)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image quelconque du modèle 3D MPS base&lt;br /&gt;
|&lt;br /&gt;
[[File:Base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Partie quelconque du modèle 3D de la MPS base&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Base reel3.jpg|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition&lt;br /&gt;
|&lt;br /&gt;
[[File:base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Image réel d'une MPS base, prise d'une caméra, lors d'une ancienne compétition, recadrée&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_newCapture_qqonq.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) a bien été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_morceau.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS n'a pas été reconnu.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel1.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Le type de la MPS (base) n'a pas été reconnu et s'est même trompé de machine alors que la fiabilité est à 1.&lt;br /&gt;
|&lt;br /&gt;
[[File:Result_base_reel_crop.png|400 px]] &lt;br /&gt;
&lt;br /&gt;
Recadré, le type de la MPS (base) a bien été reconnu, avec une fiabilité élevée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
De ces tests, nous pouvons voir la nécéssité de recadrer l'image. C'est pour cela que nous utilisons ls capteur de distance de la caméra.&lt;br /&gt;
&lt;br /&gt;
Pour encore améliorer les résultats, nous prendrons des photos des MPS sur place car les modèles 3D non aucun cablage et les photos seront prises directement avec la caméra.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=53730</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=53730"/>
				<updated>2018-03-21T13:55:14Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201/E304&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201 puis E304&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| C201/E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
| C205&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306/C202&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302/E304&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absentes &amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C008(Claire : jusque 16h, RDV médical)&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| E302/Fabricarium&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53435</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53435"/>
				<updated>2018-03-14T23:53:14Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 2 - 14/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
:- avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
:- cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît&lt;br /&gt;
:- on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch)&lt;br /&gt;
:- alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53434</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53434"/>
				<updated>2018-03-14T23:22:46Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 2 - 14/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
**avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|600px|center]]&lt;br /&gt;
*cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît&lt;br /&gt;
*on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch)&lt;br /&gt;
*alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53433</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53433"/>
				<updated>2018-03-14T23:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Réalisation du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 2 - 14/03/18==&lt;br /&gt;
&lt;br /&gt;
*Installation de tout les paquets nécessaires (grâce au tutoriel https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)&lt;br /&gt;
*Connexion avec la caméra établie&lt;br /&gt;
**avec le realsense-viewer on arrive bien a récupérer les informations de la caméra:&lt;br /&gt;
[[Fichier:capture1.jpeg|300px|center]]&lt;br /&gt;
*cependant sur le terminal l'erreur &amp;quot;Failed to read busnum/devnum.&amp;quot; apparaît&lt;br /&gt;
*on obtient la même erreur lorsque l'on essaye de lancer le noeud ROS directement en ligne de commande (roslaunch realsense_ros_camera rs_camera.launch)&lt;br /&gt;
*alors que pourtant la caméra est bien reconnue:&lt;br /&gt;
[[Fichier:capture2.jpeg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capture2.jpeg&amp;diff=53432</id>
		<title>Fichier:Capture2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capture2.jpeg&amp;diff=53432"/>
				<updated>2018-03-14T23:19:09Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capture1.jpeg&amp;diff=53431</id>
		<title>Fichier:Capture1.jpeg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Capture1.jpeg&amp;diff=53431"/>
				<updated>2018-03-14T23:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53290</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53290"/>
				<updated>2018-03-14T14:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Février : Séance 3 - 21/02/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS:&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (donc inclinaison) (limité à 1m10)&lt;br /&gt;
::::test concluant avec la caméra placée 30cm au dessus du plateau du Robotino, vers l'arrière) et distance Robotino-MPS=40cm mais d'autres placements sont possibles, en jouant sur l'inclinaison notamment. &lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53277</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=53277"/>
				<updated>2018-03-14T14:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Mars : Séance 1 - 07/03/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Canny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Compte Rendu de la réunion avec les tuteurs&lt;br /&gt;
::-Positionnement de la caméra à définir&lt;br /&gt;
::::prise de mesures pour la placer, et voir toute la face de la MPS&lt;br /&gt;
::::redressement de l'image à réaliser si on place la caméra trop en hauteur (limité à 1m10)&lt;br /&gt;
::-Récupération de la carte&lt;br /&gt;
::::USB déjà configuré dans le BIOS&lt;br /&gt;
::::RAM de 4Go avec plusieurs coeurs --&amp;gt; penser aux threads&lt;br /&gt;
::-Récupération d'image possible grâce à des vidéos sur youtube (https://www.youtube.com/channel/UCB5ieBWgXVeg2ih_JMHiDrg)&lt;br /&gt;
::-Définir ce qui est clairement identifiable, qu’est ce qui est identique sur toutes les machines (peut être ensuite utilisé pour redresser l'image)&lt;br /&gt;
::-On va utiliser ROS pour :&lt;br /&gt;
::::-faciliter la communication entre le robotino et la carte&lt;br /&gt;
::::-récupérer les informations de la caméra (IF et image couleur) dans un même fichier&lt;br /&gt;
&lt;br /&gt;
==Mars : Séance 1 - 07/03/18==&lt;br /&gt;
&lt;br /&gt;
*Utilisation de blender pour visualiser les fichiers wrl et trouver des similitudes entre les MPS&lt;br /&gt;
*Début code pour classifier les images en utilisant TensorFlow&lt;br /&gt;
*Installation de ROS&lt;br /&gt;
*Découverte des tutoriels d'utilisation de ROS&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=53268</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=53268"/>
				<updated>2018-03-14T14:03:44Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
| E304&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| Forum Euratech jusque 17h &amp;lt;br/&amp;gt; E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 puis C201&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302/E304&lt;br /&gt;
|E302&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absentes &amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
| Carval C20X - Preud'homme Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
| Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=52843</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2017/2018&amp;diff=52843"/>
				<updated>2018-03-07T13:58:44Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Fiche de présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Notes sur les projets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse du projet || Retour sur l'analyse || Matériel || Mi-parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation sans supports, bonne analyse de la concurrence. Par contre le scénario d'usage est à revoir en précisant l'usage pour le particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le scénario est précisé mais aucune réponse aux questions difficiles &amp;quot;gestion des températures et procédure d'entretien&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Si le contenu du Wiki reflète la quantité de travail fourni, c'est inquiétant.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation focalisée sur les réseaux de neurones. Exercice mal compris (pas d'introduction du contexte, pas de scénario d'usage).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Toujours pas d'analyse de la concurrence, ni de scénario d'usage. Pas de réponse aux questions difficiles &amp;quot;quel est le matériel ? quel est le protocole ? quelles sont les entrées du réseau de neurones ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste mais il manque des références vers les fournisseurs agréés (voir page de l'an dernier).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Illustrez votre Wiki avec des schémas ou des photos de votre montage. Décrivez mieux votre plateforme de test et les résultats obtenus. Essayez de corriger les problèmes de français.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Architecture de la source d'énergie (nombre de chemins d'énergie ?)&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Vous devriez avoir quelques éléments sur la réalisation. Complétez votre Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Présentation focalisée sur la création du site Web. Effort fait pour rédiger un scénario d'usage.&amp;lt;/font&amp;gt; &lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Réponses aux questions mais l'analyse de la consommation est imprécise. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé dans la page Wiki mais à reporter en bas de la page des projets de cette année avec des références valides.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un effort de documentation mais illustrez par des schémas, des pages de l'application et des tests.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice correctement réalisé. Scénario d'usage à préciser sur la partie réseau de capteurs.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Scénario d'usage non précisé. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence, êtes-vous sur que le matériel n'a pas besoin d'être acheté ?&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. N'hésitez pas à solliciter votre encadrant direct en cas de blocage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Pas de support. Exercice très bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de réponse aux questions difficiles &amp;quot;quelle alimentation ? comment faire pour différencier les briques ? comment les briques vont-elles communiquer ? quelle sécurité vis-à-vis des enfants ?&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Faites un effort de formatage du texte (par exemple en utilisant des sous-titres plutôt que de souligner des lignes).&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Rien à signaler (juste une confusion entre le MSP430 et le CC430).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt; Questions difficiles évacuées. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais sans référence.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un peu rapide, exercice réalisé. &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas d'analyse de la concurrence. Peu d'effort de rédaction. Des coquilles. Une réponse rapide à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt; Du matériel listé mais pas forcément exhaustif et sans référence valide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description de l'avancé du projet. Wiki agréable à lire.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Page Wiki vide, pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Essayez de mieux formater votre texte pour une meilleure facilité de lecture.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Pas d'analyse de la concurrence, pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;L'analyse de la concurrence et le scénario d'usage ont été ajoutés. Par contre pas de réponse aux questions difficiles &amp;quot;quelle sera l'autonomie de la balle et quel sera le système de rechargement ?&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet au 18/02/2018&amp;lt;/font&amp;gt;. &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Wiki mis à jour en catastrophe le 19/02/2018. Peu d'informations, seul le routage d'une carte semble avoir été entrepris.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Présentation acceptable mais avec des supports non soignés. Trouver des concurrents indirects. Une histoire mais pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page Wiki modifiée après la présentation. Une réponse incomplète à la question difficile. Trop de coquilles pour ce niveau d'études.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Cinq séances pour faire chauffer une résistance, n'est-ce pas trop ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune modification de la page Wiki depuis début octobre.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Une bonne description de l'avancé du projet. Projet encore dans la phase de prototypage. Comment vous comptez recevoir une carte SIM ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Supports très textuels, pas de scénario d'usage mais une rédaction sur l'intérêt psychologique, pas vraiment de partie &amp;quot;concurrents&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un effort pour trouver des &amp;quot;concurrents&amp;quot;, pas de réponses aux questions difficiles &amp;quot;combien de LEDs ? quelle alimentation pour quelle autonomie&amp;quot;.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Pas de liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail est a peu près décrit mais la page Wiki ressemble a un brouillon.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Bonne présentation orale. Utilisation du bluetooth peu convainquant. Pas de scénario d'usage. Un &amp;quot;concurrent&amp;quot; trouvé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Concept de scénario d'usage non compris. Une réponse à la question difficile très rapide et non convaincante.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste de matériel dans la page Wiki mais à insérer dans le tableau en bas de la page principale. Pas de référence (voir sur la page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail avec le prototype pilote de LEDs est très bien décrit et de façon agréable à lire. Par contre le schéma du futur circuit est très mal engagé. Il faut commencer par faire un schéma plus précis du collier.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Support assez corrects, sujet non entièrement compris, scénario d'usage minimal.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Un problème dans le scénario d'usage : les conteneurs doivent être lancés sur un serveur. Une réponse acceptable à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel particulier.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Aucun travail ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu du travail très lapidaire et parfois illisible à cause des coquilles. Le Wiki ne donne pas l'impression que le projet avance.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation trop impécise, pas vraiment de scénario d'usage. Par contre des concurrents ont été présentés.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un scénario d'usage éloigné de la future utilisation. Trop de coquilles dans ce scénario. Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Une liste du matériel mais pas dans la page principale. Pas de référence (voir page de l'an passé).&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Compte-rendu non à jour au 18/02/2018 alors que la feuille d'heures est à jour. Le Wiki manque d'illustration, par exemple donnez le schéma du circuit.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Des informations sur la carte en gestation&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte. Un concurrent assez peu en rapport avec les essaims de robots mais dans la ligne des dispositifs de déminage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Liste du matériel. Préciser pour le chassis.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Impossible de connaître l'avancé du projet à la lecture du Wiki. N'êtes-vous pas entrain de vous perdre dans vos problèmes avec FreeRTOS ?&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Objectif mal expliqué. Exercice réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Mieux définir l'objectif suite à la visite en entreprise. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Bonne description du travail. Votre Wiki manque d'illustrations sur un sujet qui le permet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Excellente présentation et excellent travail préparatoire, Scénario d'usage à préciser, trouver des concurrents.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Attention quand vous dites qu'un ATMega328p n'a pas assez de sorties pour commander 8 oscillateurs, il dispose tout de même de plus de 20 E/S.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice réussi. Cependant précisez les acteurs dans le scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de modification du scénario. Pas de réponse à la question difficile.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Rien à redire sur la liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Description du travail correct, des illustrations. Essayez de formater avec la syntaxe Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Réponses aux questions difficiles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Le travail effectué est décrit. Un nombre de coquilles non acceptable, la lecture en devient difficile. Utilisez la syntaxe de formatage du Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Sujet se prêtant peu à l'exercice mais très bonne présentation. Sujet travaillé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas vraiment de question, la suggestion est noté dans la page Wiki.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Description du travail un peu rapide (DNS leak quesako ?). Rédaction en cours au moment de la lecture du Wiki.&amp;lt;/font&amp;gt;&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Effort de rédaction entre le 18/02/2018 et le 19/02/2018. Il manque des sections mais le travail effectué devient lisible.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse aux questions difficiles &amp;quot;Comment démarrer l'imprimante à distance ? Comment sera calibrée la plaque d’impression ?&lt;br /&gt;
Comment la plaque va se fixer sur le sol ? &amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Il est possible de mettre une copie d'écran de l'application de plus. Pas la peine de vous tirer dans les pattes.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Le projet ne semble pas encore avoir été sérieusement étudié.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Net effort de documentation de la page Wiki. Pas de réponse directe à la question difficile sur la Kinect mais une discussion sur le problème posé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Très bonne description du travail. Des illustrations mais il pourrait y avoir des photos du système robotino / kinect.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Contexte mal présenté, sujet flou. Scénario d'usage à préciser. Pas de contact avec les encadrants avant la présentation.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page de Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Compte-rendu rapide du travail. Ce compte-rendu est inquiétant. Il ne semble y avoir aucun résultat depuis le début du projet. Un module a été abandonné sans que le module en question n'ait été décrit ou que la raison de l'abandon ait été précisé. Attention votre projet est en voie d'échec.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Page de Wiki assez vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Le robot centaure est en plus mauvais état maintenant qu'au début du projet. Vous semblez avoir une nouvelle fois abandonné votre projet.&amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Des ajouts mineurs au Wiki le 19/02/2018.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Présentation très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Pas de réponse à la question difficile. Page Wiki un peu vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Un Wiki incomplet alors que la feuille d'heures est actualisée. Vous semblez toujours bloqués sur les problèmes d'étalonnage !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Wiki avec quelques informations sur le travail accompli depuis fin novembre : étude sur modbus et labview. Quelques coquilles.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Très peu d'illustrations. Texte mal formaté et avec des coquilles intolérable à ce niveau d'étude. Le compte-rendu donne l'impression d'une méthode de travail très brouillonne.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Présentation sans support. Trouver des concurrents indirects. Pas de scénario d'usage.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Aucune liste de matériel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Analyse très correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki bien tenue. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: yellow; background-color: grey;&amp;quot;&amp;gt;Quelques éléments sur le matériel dans la page Wiki mais aucune liste avec références.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Tout simplement parfait !&amp;lt;/b&amp;gt; Bien illustré, bien rédigé, le travail est très bien décrit. Presque à jour. Vous n'aviez pas des cartes à faire fabriquer à l'extérieur ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Exercice bien réalisé.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Page Wiki très complète. Ajoutez des illustrations.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: lightgreen; background-color: grey;&amp;quot;&amp;gt;Une liste probablement pas exhaustive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Exceptionnel !&amp;lt;/b&amp;gt; Très illustré, bien rédigé, le travail de recherche est très bien décrit. Je ne suis pas un fan de la mise en gras d'un quart du texte et la syntaxe Wiki n'est pas vraiment utilisée mais c'est du détail?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
| Doublant&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Page Wiki vide.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Pas de matériel à commander.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Rien sur l'avancé du projet. Projet en échec ?&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 Pré-projet 1|Robot hexapode pour escalier]]&lt;br /&gt;
| Erasmus &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt;Projet en échec constaté.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiche de présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Séance 1 (17/01) !! Séance 2 (24/01) !! Séance 3 (31/01) !! Séance 4 (7/02) !! Séance 5 (14/02) !! Séance 6 (21/02) !! Séance 7 (7/03) !! Séance 8 (14/03) !! Séance 9 (21/03) !! Séance 10 (28/03) !! Séance 11 (4/04) !! Séance 12 (11/04) !! Séance 13 (18/04)&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA4 2017/2018 P1|Automatisation de la production de bière]]&lt;br /&gt;
|Quentin Boëns / Henri Carlier&lt;br /&gt;
|E304 &lt;br /&gt;
|E304/305&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA4 2017/2018 P3|Sécurisation de l'Internet des Objets par surveillance globale]]&lt;br /&gt;
|Ji Yang&lt;br /&gt;
|E306&lt;br /&gt;
|E303&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA4 2017/2018 P4|Développement d'un module d'énergie pour Internet des Objets]]&lt;br /&gt;
| Alexis Viscogliosi / Abass Ayoub &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|E304 &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Alexis Viscogliosi Absent excusé pour entretien stage&amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA4 2017/2018 P5|Réseau de capteurs de pollution]]&lt;br /&gt;
| Paul Ribeiro / Mehanna Naïf&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E301&lt;br /&gt;
|E301 puis B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA4 2017/2018 P6|Réseau LoRaWAN]]&lt;br /&gt;
|  Antoine Gosse&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA4 2017/2018 P7|Brique pour apprentissage informatique]]&lt;br /&gt;
| Maëva Delaporte / Simon Blas&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E304 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
| E301 &amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2017/2018 P10|Portage de RIOT-OS sur MSP430 pour IOT]]&lt;br /&gt;
| Baptiste Cartier&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2017/2018 P12|Système d'ostéophonie pour magicien]]&lt;br /&gt;
| Amine El Messaoudi / Simon Feutrier&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| B207&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2017/2018 P14|Ecran géant modulaire]]&lt;br /&gt;
| Jade Dupont&lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|E304 &lt;br /&gt;
|Absence Maladie&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA4 2017/2018 P15|Balle vibrante connectée pour enfants sourd]]&lt;br /&gt;
| Thomas Cunin / Thibault Cattelain&lt;br /&gt;
| E304&lt;br /&gt;
| B306/E304&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E304 - A305)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P16 [[IMA4 2017/2018 P16|Sous-chaussure chauffante pour docker]]&lt;br /&gt;
| Rémi Mairesse / Gustave Roux&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304 / C201&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA4 2017/2018 P17|Safe Watch]]&lt;br /&gt;
| Oumaima Naanaa&lt;br /&gt;
|E302&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|-&lt;br /&gt;
| P18 [[IMA4 2017/2018 P18|Mandala électronique]]&lt;br /&gt;
| Lirui Zhang / Lihe Zhang&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P19 [[IMA4 2017/2018 P19|Bijou électronique]]&lt;br /&gt;
| Lijie Yao / Keren Qiang&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA4 2017/2018 P20|Solution de messagerie à base de conteneurs]]&lt;br /&gt;
| Maxime Creteur / Gao Fan&lt;br /&gt;
|E303&lt;br /&gt;
|E301&lt;br /&gt;
|A204 &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absents &amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|B309 puis B207&lt;br /&gt;
|E301&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2017/2018 P22|Horloge numérique DCF77, serveur de temps et ludique]]&lt;br /&gt;
| Amaury Knockaert / Fabrice Taingland&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304/E302&lt;br /&gt;
| C203/E306&lt;br /&gt;
| E306/E304&lt;br /&gt;
| Forum stages euratech/E304&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| P23 [[IMA4 2017/2018 P23|Table de bar connectée]]&lt;br /&gt;
| Matthieu Delobelle&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E303 - C201&lt;br /&gt;
| E306 - C201&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P25 [[IMA4 2017/2018 P25|Essaim de robots]]&lt;br /&gt;
| Benjamin Canu / Ganix Etcheguibel&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 &amp;lt;br/&amp;gt; Forum Euratech jusque 17h&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2017/2018 P30|Contrôle d'une caméra WiFi.]]&lt;br /&gt;
| Taky Djeraba / Thomas Hubert&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2017/2018 P32|Tribute to Peter Vogel]]&lt;br /&gt;
| Jean-Baptiste Watine / Antoine Untereiner&lt;br /&gt;
| E306/C201&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (C201) &amp;lt;/font&amp;gt;&lt;br /&gt;
| C205&lt;br /&gt;
| C205/E301&lt;br /&gt;
| C205/E301&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2017/2018 P35|Manette de jeu vidéo pour personne en situation de handicap]]&lt;br /&gt;
| Transley Gracias / Camille Saad&lt;br /&gt;
| E306 &lt;br /&gt;
| E306 &lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P39 [[IMA4 2017/2018 P39|Musique des plantes]]&lt;br /&gt;
| Xavier Chenot / Rodolphe Toin&lt;br /&gt;
| E306 &lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2017/2018 P40|Exploration du réseau d'anonymisation Tor]]&lt;br /&gt;
| Antoine Duquenoy / Anthony Durot&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2017/2018 P42|Automatisation de l'assemblage de LEGO]]&lt;br /&gt;
| Eloi Zalczer / Justine Senellart&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E302/E306&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E304/E302&lt;br /&gt;
|E306/E302&lt;br /&gt;
|Hors Polytech/E302&lt;br /&gt;
|E302&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2017/2018 P44|Reconnaissance d’objets via Traitement d’image]]&lt;br /&gt;
| Damien Narbais / Zoé Briois&lt;br /&gt;
| E306&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle (E301)&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| C205&lt;br /&gt;
| E304 + 17h réunion C00X&lt;br /&gt;
| A317&lt;br /&gt;
|-&lt;br /&gt;
| P49 [[IMA4 2017/2018 P49|Suivi de la qualité de l’air]]&lt;br /&gt;
| Hugo Delbroucq / Nicolas Havard &lt;br /&gt;
| E301&lt;br /&gt;
| INRIA&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; (INRIA)&lt;br /&gt;
| E301&lt;br /&gt;
| E301 puis E304&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P50 [[IMA4 2017/2018 P50|Etage commande de Centaure]]&lt;br /&gt;
|-&lt;br /&gt;
| P60 [[IMA4 2017/2018 P60|Commande de niveaux d’eau]]&lt;br /&gt;
| Claire Vandamme / Alexandra Villa &lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Hors Polytech/B106&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; Pas de salle &amp;lt;/font&amp;gt; &amp;lt;font style=&amp;quot;color: red;&amp;quot;&amp;gt; Absentes &amp;lt;/font&amp;gt;&lt;br /&gt;
|C008&lt;br /&gt;
|C008&lt;br /&gt;
|Bureau de Mr Pekpe/E306&lt;br /&gt;
|C008&lt;br /&gt;
|- &lt;br /&gt;
| P64 [[IMA4 2017/2018 P64|Simulation Labview et mise en réseau Modbus d’un ascenseur]]&lt;br /&gt;
|-&lt;br /&gt;
| P65 [[IMA4 2017/2018 P65|Exosquelette pour apprentissage]]&lt;br /&gt;
| Florian Le Foll&lt;br /&gt;
| E301&lt;br /&gt;
| E301&lt;br /&gt;
|&amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt; (Pas de salle) &amp;lt;/font&amp;gt;E303&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
|-&lt;br /&gt;
| P66 [[IMA4 2017/2018 P66|Coupe de France de robotique]]&lt;br /&gt;
| Carval Amaury/ Prud'Homme Geoffrey&lt;br /&gt;
| fabricarium &lt;br /&gt;
| fabricarium puis Hors Polytech&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| Carval E306 - Preud'homme E301&lt;br /&gt;
| E301&lt;br /&gt;
|-&lt;br /&gt;
| P67 [[IMA4 2017/2018 P67|Scanner 3D DIY]]&lt;br /&gt;
| Erwan Dufresne&lt;br /&gt;
| E302/E306&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E301&lt;br /&gt;
| E302&lt;br /&gt;
| E306&lt;br /&gt;
| E302&lt;br /&gt;
|-&lt;br /&gt;
| PP1 [[IMA4 2017/2018 PP1|Robot hexapode pour escalier]]&lt;br /&gt;
| Eduardo Gomez &lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| C201&lt;br /&gt;
| C201/Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P68 [[IMA4 2017/2018 P68|Générateur de chronogrammes d'ordonnancement]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52208</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52208"/>
				<updated>2018-02-21T17:06:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Février : Séance 2 - 14/02/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Cznny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52160</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52160"/>
				<updated>2018-02-21T16:45:33Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Cznny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
::à la reconnaissance de la caméra par un OS linux.&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52159</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52159"/>
				<updated>2018-02-21T16:45:13Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Cznny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
::à la reconnaissance de la caméra par un OS linux.&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52157</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52157"/>
				<updated>2018-02-21T16:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Feuille d'heures Février */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| 3 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Cznny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
::à la reconnaissance de la caméra par un OS linux.&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52153</id>
		<title>IMA4 2017/2018 P44</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2017/2018_P44&amp;diff=52153"/>
				<updated>2018-02-21T16:38:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : /* Février : Séance 3 - 21/02/18 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
L’Association de Robotique de Polytech Lille a pour but principal de participer à la RoboCup, compétition internationale de robotique, dans la Logistic League. Pour l'instant une '''machine de production''' (MPS) est identifiée par un AR Tag (QR Code). Le but de ce projet est de réussir à identifier une machine par une autre façon, sans utiliser les tags, mais en identifiant les structures de production qui sont positionnées sur chaque MPS. Il y en a 5 types:&lt;br /&gt;
* une Base Station à 3 tours de stockage pour chaque couleur de base ;&lt;br /&gt;
* une Cap Station à un rail de dépôt pour l’ajout de bases ;&lt;br /&gt;
* une Delivery Station à 3 voies de stockages pour les produits finis ;&lt;br /&gt;
* une Ring Station à 2 structures pneumatiques de dépose de cap ;&lt;br /&gt;
* une Storage Station à 1 structure en étagère assez haute. &lt;br /&gt;
[[Fichier:Base_station.jpg]][[Fichier:Cap_station.jpg]][[Fichier:Delivery_station.jpg]][[Fichier:Ring_station.jpg]][[Fichier:Storage_station.jpg]]&lt;br /&gt;
&lt;br /&gt;
Chaque machine à 2 types de côté: actif, large où le robot interagit ou ignorés, étroit où il n'y aura pas d’interaction.&lt;br /&gt;
&lt;br /&gt;
On a la liberté du '''choix du moyen de vision''': une ou deux caméras (stéréo vision), une Kinect, un scanner laser, une Intel SR300 ... mais il faudra veiller à choisir un système efficace et robuste.&lt;br /&gt;
&lt;br /&gt;
Ce sujet permettra d'aborder les notions de développement logiciel en C et Python, du framework robotique ROS, mais également le travail en équipe et pourquoi pas la participation à une compétition internationale de robotique en avril (Open German à Magdebourg, Allemagne).&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
L'objectif principal de notre projet est donc d'analyser '''le plus rapidement possible''' et avec une '''fiabilité maximale''' face à quelle machine de production le robot se situe. Il faudra donc trouver une caractéristique unique pour chaque machine de production afin de les différencier le plus rapidement possible. Et si ce n'est pas possible (si 2 machines sont trop semblables) pouvoir comparer l'image vue par le robot avec les caractéristiques visuelles générales de chaque MPS.&lt;br /&gt;
Ainsi la storage station est facilement identifiable par sa taille mais les autres MPS semblent relativement semblables aux premiers abords. Une analyse en détail de leurs dimensions va nous permettre d'évaluer s'il serait possible de les différencier facilement. Par exemple la cap station pourrait être identifiée par son rail. On pourrait également s'appuyer sur les différences de profondeur de certaines zones des MPS pour les différencier, grâce au capteur infra rouge notamment .&lt;br /&gt;
&lt;br /&gt;
Lors de la compétition 3 minutes maximum sont allouées à la phase d'exploration.&lt;br /&gt;
&lt;br /&gt;
Il s'agira de reconnaissance spécifique: identifier une MPS en particulier sur une image.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Il y a de nombreux projets et de plus en plus de projets sur la reconnaissance d’objets par traitement d’image, notamment dans la recherche. Ces projets sont le plus souvent axés sur un axe industriel , comme pour ce projet. Ou sur une utilisation dans la vie quotidienne: robot humanoïdes, reconnaissances d’objets de formes basiques (cubes …) comme dans certaines compétitions de robotique.&lt;br /&gt;
Comme ce sera le cas pour nous, grand nombre de ces projets ne fonctionnent que dans des conditions particulières: un nombre d’objets limité et un environnement connu. En effet il est très difficile de programmer un robot pour qu’il puisse reconnaître tous les objets existants.&lt;br /&gt;
Une difficulté importante pour la reconnaissance d’objets sont les variations: de luminosité, de taille de l’objet, de son orientation …&lt;br /&gt;
De nombreuses applications de détection d’objets sont développées sur l'OS ROS.&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
L’API CLOUD VISION de Google permet de comprendre le contenu d'une image en intégrant de puissants modèles de machine learning dans une API facile à utiliser. Cloud Vision classe les images rapidement dans des milliers de catégories (par exemple, &amp;quot;bateau&amp;quot;, &amp;quot;lion&amp;quot;, &amp;quot;tour Eiffel&amp;quot;).&lt;br /&gt;
L’avantage de la solution présentée par notre projet et de pouvoir reconnaître les objets plus précisément, en effet il ne s’agit pas de savoir que c’est juste une MPS comme pourrait le faire cette API mais de préciser de quelle MPS il s’agit.&lt;br /&gt;
L’avantage de CLOUD VISION est qu’il peut concerner un domaine plus large et est plus applicable à différentes compétitions. En effet l'API Vision s'appuie sur la puissance de la fonctionnalité de recherche de Google Images pour trouver des entités thématiques, elle permet donc par exemple de reconnaître des logos.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029636/&lt;br /&gt;
Ce projet s’appuie sur une '''Kinect''' comme nous pouvons envisager de le faire. La Kinect est ici utilisée pour reconnaître les contours de l’objet.&lt;br /&gt;
Le projet réalisé par Carlos Astua, Ramon Barber, Jonathan Crespo, et Alberto Jardon décrit dans cet article met en avant la '''difficulté à reconnaître un objet en fonction de la position''' du robot.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
Après des semaines d'intense préparation le Robotino de l'association de robotique de Polytech Lille est prêt à entrer en piste pour l'épreuve de Logistique de la Robocup 2018. Il s'agit d'une compétition en 1 contre 1 où l'objectif est de marquer le plus de points en un temps imparti.&lt;br /&gt;
Sa première mission et celle qui fait référence à notre projet est la phase d'exploration: il va devoir analyser les 14 machines de production présentes sur la piste (emplacement et orientation aléatoire) pour définir leur type. Chaque équipe est associée à 7 MPS.&lt;br /&gt;
Le robotino va donc se déplacer face à chaque MPS et l'analyser par le traitement d'image pour repérer de quelle type de machine il s'agit. Pour repérer ces machines et leur position il a un temps imparti de 3 minutes.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment communiquer avec la Caméra?'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Il nous faut un moyen de communication qui nous permette d'une part de récupérer ce que voie la caméra, de pouvoir le traiter et de pouvoir comparer ces informations avec ce que nous savons sur les MPS.&lt;br /&gt;
Le plus difficile est de trouver comment traiter les informations récupérée via la caméra. Cela sera rendu possible par l'utilisation d'une RaspberryPi alimentée par le robotino.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
L'objectif est de permettre au Robotino de différencier 5 machines de production connues d'avance dans le cadre d'un challenge de robotique. Les caractéristiques principales de l'environnement sont également connues d'avance.&lt;br /&gt;
Pour cela nous possédons les modélisations en 3D des MPS au format WRL (juste ici https://github.com/robocup-logistics/full-size-models/tree/master/mps). L'objectif est donc de pouvoir sur place la MPS située face au robot avec les informations que nous connaissons sur les 5 types de MPS, au moyen d'une kinect vraisemblablement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'objectif final est que notre projet fonctionne de la manière suivante :&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupérer l'image vue par la caméra(profondeur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Comparer avec les contours connus des MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si il y a correspondance à plus de 70%, envoyer l'id de la machine au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sinon se placer sur un autre côté de la machine puis retour étape 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Créer plusieurs vues des différentes MPS à partir des modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraire les contours de ces images(formes, nombre de formes, placement)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Si après avoir analysé les 4 faces de la MPS il n'y a aucune correspondance à plus de 70%, faire la moyenne des correspondances pour les 4 faces pour chaque MPS et choisir celle qui a le taux de correspondance le plus élevé (*)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarques:&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si une machine a déjà été reconnue autant de fois qu'elle se trouve sur le terrain (information connue préalablement) on effectuera pas de comparaison avec les images de celle-ci puisque c'est inutile (optimisation du temps)&amp;lt;br/&amp;gt;&lt;br /&gt;
- Si a un moment donné, il y a le même taux de correspondance pour 2 MPS après l'analyse des 4 phases, envoi des 2 ID au Robotino. A la fin de l'analyse on pourra déduire le vrai ID puisqu'on connaît le nombre de MPS de chaque type présentes sur le terrain.&amp;lt;br/&amp;gt;&lt;br /&gt;
-  (*) Sauf si le taux de correspondance est inférieur à 40% on envoie &amp;quot;on ne sait pas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
Pour le choix du moyen de prise d'image:&lt;br /&gt;
&amp;lt;ol type=i&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;la stéréo vision (utilisation de 2 caméras) nécessite l'acquisition d'au moins 2 images de l'objet à mesurer de 2 points de vues différents. Après la prise de vue de la MPS les coordonnées d'image (couple stéréoscopique) des points à mesurer sont déterminées sur chaque des images puis mises en concordance. Pour déterminer les dimensions de l'objet il est nécessaire détalonner le système de mesure.&lt;br /&gt;
Problématique: étant donné la taille du robot par rapport à celle des MPS, sera-t-il possible de prendre les 2 images de l'objet en laissant le robot immobile face à la MPS (en plaçant les 2 caméras à des endroits différents du robot) ? Si ce n'est pas possible il faudra donc que le robot se déplace par rapport à la MPS, ce qui rendrait le processus de reconnaissance plus long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la kinect possède une caméra RGB ainsi qu'une caméra infrarouge, cette caméra infrarouge permet de mesurer les différences de profondeur.&lt;br /&gt;
Avantage: Avoir une image infrarouge avec les différences de profondeur des objet présents dans le visuel du robot pourrait nous être très utile pour différencier les différents MPS.&lt;br /&gt;
Problématique: la caméra RGB et la caméra infrarouge ne sont pas situées au même endroit sur la kinect, nous auront donc 2 prises de vues non superposables. Serait-il possible d'utiliser uniquement la caméra infrarouge ? Ou de synchroniser les 2 images ?&lt;br /&gt;
&lt;br /&gt;
Kinect V1 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 57 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 43 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Marge de déplacement du capteur : ± 27 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 1,2 m – 3,5 m &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kinect V2 - Champ de vision :&lt;br /&gt;
Champ de vision horizontal : 70 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Champ de vision vertical : 60 degrés &amp;lt;br /&amp;gt;&lt;br /&gt;
Portée du capteur : 0,5 m – 4,5 m &amp;lt; br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;la caméra Intel® RealSense™, notamment la SR300, possède tout comme la Kinect une caméra couleur, une caméra infrarouge et un émetteur infrarouge. &lt;br /&gt;
Portée en profondeur: 0.2m à 1.5m&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malheureusement ces caméras nécessitent une connexion en USB 3.0, ce qui n'est pas possible avec la RaspberryPi. C'est pour cela que nous souhaitons nous tourner vers le kit de développement d'Intel contenant une caméra R200 et une carte de prototypage bénéficiant elle d'un port 3.0. Notamment car les concurrents de RaspberryPi proposant une port 3.0 le font à un prix beaucoup plus élevé.&lt;br /&gt;
&lt;br /&gt;
'''Matériel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
*Intel® RealSense™ Robotic Development Kit:&lt;br /&gt;
**Intel RealSense R200 Camera&lt;br /&gt;
**AAEON UP Board (Intel Atom™ Processor x5-Z8350, Intel HD Graphics, 4GB DDR3L-1600 memory, 32GB eMMC storage)&lt;br /&gt;
**USB 3.0 Type A Female to Micro USB Type B Male Adapter&lt;br /&gt;
**USB 3.0 Type B Male to Micro USB Type B Male Cable&lt;br /&gt;
**5V 4A Power supply&lt;br /&gt;
https://click.intel.com/intelr-realsensetm-robotic-development-kit-2445.html&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&amp;lt;ol type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la caméra à la carte&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction pour récupérer l'image vue par la caméra&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'extraction des contours sur cette image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extraction des contours d'après les modélisations 3D à notre disposition&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction de comparaison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connexion de la carte au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de l'id de la machine reconnue au Robotino&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fonction permettant l'envoi de la demande au Robotino de se déplacer pour visualiser une autre phase de la MPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures Janvier==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Janvier !! Séance 1 !! Séance 2 !! Séance 3 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 6&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Mise en place du protocole de reconnaissance&lt;br /&gt;
| 1,5&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
| 4,5&lt;br /&gt;
|-&lt;br /&gt;
| Utilisation de la profondeur d'image&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Solution IBM - Watson&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0,2&lt;br /&gt;
|-&lt;br /&gt;
| Caméra (choix, configuration..) &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Gestion des fichiers image (format, récupération, traitement ...)&lt;br /&gt;
| 0,2&lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 3,2&lt;br /&gt;
|-&lt;br /&gt;
| Caractéristiques carte (alimentation..) &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Algorithme détection lignes et bords&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
| &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 14,9&lt;br /&gt;
| 10&lt;br /&gt;
| 10,5&lt;br /&gt;
|'''35,4'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 1.0==&lt;br /&gt;
* Prise en main su sujet / mise en place du CDCF,&lt;br /&gt;
* Analyse concurrentielle,&lt;br /&gt;
* Analyse matérielle,&lt;br /&gt;
* Réponse aux questions difficiles/vagues.&lt;br /&gt;
==Janvier: Séance 1.1 - 15/01/18==&lt;br /&gt;
* Nous nous orientons vers le choix de la Kinect 360, avec la possibilité de '''combiner Kinect, ROS et Raspberry'''.&lt;br /&gt;
* Mise en place de la méthode pour reconnaître une MPS:&lt;br /&gt;
:le robot se met “face” à la MPS&lt;br /&gt;
:si reconnaissance de la MPS avec un pourcentage de concordance correct&lt;br /&gt;
::communication au Robotino de l'id de la machine&lt;br /&gt;
:sinon analyse d'une autre face de la MPS&lt;br /&gt;
::on associe/compare alors les probabilités obtenues pour la 1ère face avec celles de la 2ème&lt;br /&gt;
::si on a toujours pas un pourcentage de concordance assez élevé&lt;br /&gt;
:::analyse d'une 3ème face et ainsi de suite…&lt;br /&gt;
:fin au bout de 4 faces repérées&lt;br /&gt;
* Mise à jour du wiki&lt;br /&gt;
* Mise en place d'un document partagé pour les comptes-rendus des séances et le planning horaire&lt;br /&gt;
==Janvier: Séance 1.2 - 17/01/18==&lt;br /&gt;
* Après réunion avec les tuteurs nous avons pu récupérer les fichiers des modélisations 3D des MPS (au format WRL)&lt;br /&gt;
:étant donné que toutes les MPS ont une partie basse similaire on pourra centré le traitement d'image pour la différenciation sur la partie haute.&lt;br /&gt;
* Amélioration du protocole de reconnaissance: &lt;br /&gt;
:récupération de la surface de l'objet grâce au fichier .WRL&lt;br /&gt;
:récupération des points infra-rouge de la caméra (mesure de profondeur)&lt;br /&gt;
:récupération d’une photo 2D prise avec la caméra&lt;br /&gt;
:on pourrait essayer de faire un programme qui passe un plan 3D en 2D →a t'on vraiment besoin de la couleur ? ou on se concentre surtout sur la forme des objets ?&lt;br /&gt;
:ainsi on pourrait faire une 1ere comparaison avec photo 2D (si gain de temps par rapport au 3D d'un point de vue traitement d'image)&lt;br /&gt;
:avec pourquoi pas du machine learning sur les pièces 2D&lt;br /&gt;
:si le taux de comparaison &amp;lt;70%&lt;br /&gt;
::on garde le taux de comparaison obtenu en mémoire &lt;br /&gt;
::on passe à la comparaison 3D (utilisation du machine learning ? Si oui, algorithme pour reconnaissance d’image et entrainement avec une base de données)&lt;br /&gt;
::si taux de comparaison toujours &amp;lt;70%&lt;br /&gt;
:::même protocole avec une autre face&lt;br /&gt;
:si taux de comparaison &amp;gt;70%&lt;br /&gt;
::fin de l'algorithme de reconnaissance et envoie de l’ID de la MPS au robotino&lt;br /&gt;
&lt;br /&gt;
==Janvier: Scéance 1.3 - 18/01/18==&lt;br /&gt;
On va se baser sur de la reconnaissance d'image 2D et non 3D comme imaginé au début.&lt;br /&gt;
*Solution possible, ''mais non adapté à notre problématique'', pour la reconnaissance d'image avec un outil externe:&lt;br /&gt;
**celui de google (https://cloud.google.com/ml-engine/) &lt;br /&gt;
**celui d’IBM (https://www.ibm.com/watson/services/visual-recognition/ ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* Comment placer la Kinect pour voir toute la partie haute de la MPS :&lt;br /&gt;
:champ de vision de la Kinect V1:&lt;br /&gt;
::champ de vision horizontal : 57°&lt;br /&gt;
::champ de vision vertical : 43°&lt;br /&gt;
::portée du capteur : 1,2 m – 3,5 m&lt;br /&gt;
:on a alors :&lt;br /&gt;
[[Fichier:Positionnement_kinect1.jpg|300px|center]]&lt;br /&gt;
:on en déduit :&lt;br /&gt;
[[Fichier:Positionnement_kinect3.jpg|350px|center]]&lt;br /&gt;
:avec:&lt;br /&gt;
::x la longueur, largeur ou hauteur de la MPS&lt;br /&gt;
::α le champ de vision horizontal ou vertical de la caméra&lt;br /&gt;
::d la distance entre le capteur et la MPS&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.0 - 22/01/18==&lt;br /&gt;
*Avancement sur le pseudo-code:&lt;br /&gt;
 signal_robotino = variable envoyée par le robotino à la RaspberryPi, on considère qu’il envoie 1 pour indiquer qu’il est bien positionné face à la PMS et que l’analyse peut démarrer et 2 pour indiquer qu’il a bien changé de face&amp;lt;br/&amp;gt;tab = tableau 5 colonnes (une pour chaque MPS) et 2 lignes (la première correspondant à l’id de la MPS et la seconde au nombre de MPS restantes à trouver), initialisé avec le nombre de MPS présentes au départ sur le terrain pour chaque type&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 main() {&lt;br /&gt;
    while (signal_robotino==0)    {&lt;br /&gt;
       wait;&lt;br /&gt;
    }&lt;br /&gt;
    recuperer_image_camera(); &lt;br /&gt;
    extraction_contour(); &lt;br /&gt;
    comparaison_avec_donnees(MPS_a_analyser); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 recuperer_image_camera() {&lt;br /&gt;
    //récupère l’image vue par la camera sous un format permettant le traitement par notre programme&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 extraction_contour() {&lt;br /&gt;
    //extraction des contours de l’image vue par la camera&lt;br /&gt;
    //les mets dans un fichier MPS_a_analyser&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 comparaison_avec_donnees(fichier MPS_a_analyser) {&lt;br /&gt;
    fichiers contenant les contours connus des MPS: MPS_1, MPS_2, MPS_3, MPS_4, MPS_5;&lt;br /&gt;
    int id=0;&lt;br /&gt;
    int taux_compare=0;&lt;br /&gt;
    for (i=1, i++, i&amp;lt;5){&lt;br /&gt;
       if (tab[i-1][1]&amp;gt;0) {&lt;br /&gt;
          if (compare(MPS_a_analyser,MPS_i))&amp;gt;taux_compare){&lt;br /&gt;
             taux_compare=compare(MPS_a_analyser,MPS_i);&lt;br /&gt;
             id=i;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       if (taux_compare&amp;gt;=70) {&lt;br /&gt;
          envoi_robotino(id);&lt;br /&gt;
          modifier_tab(id);&lt;br /&gt;
       }&lt;br /&gt;
       if(taux_compare&amp;lt;70) {&lt;br /&gt;
          envoi_robotino(7);&lt;br /&gt;
          // on lui indique qu’il doit changer de face&lt;br /&gt;
          while (signal_robotino!=2) {&lt;br /&gt;
             wait;&lt;br /&gt;
          }&lt;br /&gt;
          recuperer_image_kinect();&lt;br /&gt;
          extraction_contour();&lt;br /&gt;
          signal_robotino=1;&lt;br /&gt;
          comparaison_avec_donnees(MPS_a_analyser);&lt;br /&gt;
       }&lt;br /&gt;
       envoi_robotino(int id) {&lt;br /&gt;
          envoi variable id au robotino;&lt;br /&gt;
       }&lt;br /&gt;
       modifier_tableau(int id) {&lt;br /&gt;
          for (i=1; i++; i&amp;lt;=5) {&lt;br /&gt;
             if (id=tab[i]) {&lt;br /&gt;
                tab[i]=tab[i]-1;&lt;br /&gt;
             }&lt;br /&gt;
          }&lt;br /&gt;
       } &lt;br /&gt;
    }&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
Il faudra penser à écrire une fonction qui vérifie bien que la caméra et la carte sont bien connectées.&lt;br /&gt;
Il manque le tableau pour mémoriser les taux de comparaison&lt;br /&gt;
==Janvier: Séance 2.1 - 24/01/18==&lt;br /&gt;
* Mise à jour du wiki,&lt;br /&gt;
* Rendez-vous avec les tuteurs, suite auquel il faudrait :&lt;br /&gt;
:trouver la distance pour laquelle la Kinect voit toute la partie haute de la MPS (minimum 0,80m) et vérifier si la profondeur du laser correspond&lt;br /&gt;
::--&amp;gt; '''voir séance 3.1'''&lt;br /&gt;
:estimer si la Raspberry à une puissance de calcul suffisante&lt;br /&gt;
::--&amp;gt; '''voir séance 2.2'''&lt;br /&gt;
:On va communiquer avec le robotino via une connexion sans fil&lt;br /&gt;
:voir comment on alimente la Raspberry et la Kinect (avec le Robotino ?)&lt;br /&gt;
::-&amp;gt;effectivement possibilité d'alimentation grâce au Robotino, voltages à comparer pour pouvoir adapter l'alimentation.&lt;br /&gt;
:nous avons également discuté de l'utilisation de ROS kinetic et d'ubuntu 16.0.4&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 2.2 - 25/01/18==&lt;br /&gt;
*Recherche des caractéristiques requises pour la carte électronique. &lt;br /&gt;
**Objectifs&lt;br /&gt;
***Etre performant pour pouvoir utiliser des algorithmes de machines learning --&amp;gt; deep learning compatible si RAM &amp;gt; 128M0 &lt;br /&gt;
***Pouvoir assurer l'alimentation de la carte &lt;br /&gt;
*Recherche des caractéristiques de la caméra --&amp;gt; portée minimale pour les mesures de distance = 0,5 m (avec la kinect)&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.0 - 29/01/18==&lt;br /&gt;
*Affinement de notre choix matériel, nous souhaitons nous orienter vers:&lt;br /&gt;
::Raspberry 3 (alimentation 5V, 2.5A)&lt;br /&gt;
::Kinect V2 (alimentation avec adaptateur fourni ou utilisation d’un hub usb avec sa propre alimentation)&lt;br /&gt;
*A quelle distance de la MPS faudra-t-il placer la Kinect V2 ?&lt;br /&gt;
&lt;br /&gt;
::champs vision Kincet V2 : 70,6°*60°&lt;br /&gt;
&lt;br /&gt;
::dimension MPS 70cm*35cm*x &lt;br /&gt;
&lt;br /&gt;
::donc pour x=70cm et alpha=70,6° on a d=60cm&lt;br /&gt;
&lt;br /&gt;
::donc pour x=35cm et alpha=60° on a d=35cm&lt;br /&gt;
&lt;br /&gt;
Or capteur profondeur fonctionne sur [50cm ; 450cm]&lt;br /&gt;
&lt;br /&gt;
Donc on place le robot a minimum 50cm donc on fait l’hypothèse qu’on se placera toujours a 60-65 cm → recadrage d’image nécessaire pour la largeur dans ce cas&lt;br /&gt;
::'''cf. schéma séance 1.3'''&lt;br /&gt;
&lt;br /&gt;
==Janvier: Séance 3.1 - 31/01/18==&lt;br /&gt;
*Problème de choix matériel:&lt;br /&gt;
:les caméras que nous pourrions utiliser nécessitent toutes une connectique en USB 3.0 alors que les cartes Raspberry ne possèdent pas de port USB 3.0&lt;br /&gt;
:donc nous nous orientons vers un kit de développement Intel&lt;br /&gt;
:qui contient une caméra '''SR-200''' aux caractéristiques:&lt;br /&gt;
::format image couleur : 77*47*70  /  77*43*70      D*V*H (Diagonal, Vertical, Horizontal)&lt;br /&gt;
::format image IR : 70*46*59&lt;br /&gt;
*Nouveau calcul de la distance nécessaire entre la MPS et le Robotino:&lt;br /&gt;
::Couleur&lt;br /&gt;
:::donc pour x=70cm et alpha=70° on a d=61cm&lt;br /&gt;
:::donc pour x=35cm et alpha=70° on a d=30,5cm&lt;br /&gt;
::IR&lt;br /&gt;
:::donc pour x=70cm et alpha=59° on a d=71cm&lt;br /&gt;
:::donc pour x=35cm et alpha=59° on a d=35,5cm&lt;br /&gt;
'''cf. schéma scéance 1.3'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Comment détecter les bords contours d'une MPS sur l'image renvoyée par la caméra ?&lt;br /&gt;
:possibilité d'utiliser la librairie OpenCV qui possèdent des fonctions de traitement d'image,&lt;br /&gt;
:il sera nécessaire d'appliquer un filtre sur notre image avant traitement, notamment&lt;br /&gt;
::- Laplace&lt;br /&gt;
::- Sobel&lt;br /&gt;
::- Canny&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures Février==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâches Février !! Prévisionel !! Séance 1 !! Séance 2 !! Séance 3 !! Séance 4 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| ''Wiki'' &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1.Créer une banque d'image pour chaque MPS&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.Détection des contours&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.Détection des bords&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.Détection des formes&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.Stockage des informations pour chaque MPS&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.Connexion et récupération de l'image prise par la caméra&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.Comparaison avec la banque d'images&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.Connexion et envoie des résultats au Robotino (ID machine + machine suivante ?)&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''TOTAL'''&lt;br /&gt;
| 47&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 1 - 07/02/18==&lt;br /&gt;
&lt;br /&gt;
* Décomposition du code avec prévision du temps nécessaire à la réalisation&lt;br /&gt;
* Possibilité d'utiliser un filtre de Cznny (mais le résultat dépend de la qualité de l'image donc à tester), d'un filtre de Prewitt.&lt;br /&gt;
* Documentation sur les fonctions findcontours et drawcontours de la librairie openCV&lt;br /&gt;
* Problématiques:&lt;br /&gt;
::avec l'extraction des contours on risque d'avoir un &amp;quot;dessin&amp;quot; trop précis (à cause des fils ...), trop de détails pour que l’algorithme de comparaison donne des résultats probants.&lt;br /&gt;
::on pourrait chercher à reconnaître des formes précises (carrés, rectangles) mais dans ce cas là risquent liés à l'orientation du robot par rapport à la machine &lt;br /&gt;
* Réunion avec les tuteurs&lt;br /&gt;
::caméra acquise: BlasterX Senz3D&lt;br /&gt;
::nécessité d'un 25 V -&amp;gt; 5V pour alimenter la caméra à partir du Robotino&lt;br /&gt;
::validation de l'utilisation des filtres&lt;br /&gt;
::validation de la possibilité de ne sélectionner que les points de telle à telle profondeur&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 2 - 14/02/18==&lt;br /&gt;
* Premières tentatives de communication avec la caméra peu concluantes:&lt;br /&gt;
::difficultées liées à l'utilisation d'une VM,&lt;br /&gt;
::au téléchargement correct de la librairie openCV,&lt;br /&gt;
::à la reconnaissance de la caméra par un OS linux.&lt;br /&gt;
&lt;br /&gt;
==Février : Séance 3 - 21/02/18==&lt;br /&gt;
* Connexion avec la caméra établie (utilisation d'openCV2, python 3.4.0 et Ubuntu 16.04)&lt;br /&gt;
* Test des différents filtres:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Comparaison_filtres.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
(un test face à une MPS viendra bientôt remplacer celui-ci)&amp;lt;br&amp;gt;&lt;br /&gt;
A noter que le filtre de Canny prend en compte 2 arguments:&lt;br /&gt;
::- seuil bas&lt;br /&gt;
::- seuil haut&lt;br /&gt;
Il permet d'éliminer des faux contours. En prenant en compte l'intensité du gradient et sa direction, il permet d'éliminer un pixel qui pointe vers 2 valeurs supérieure car ce n'est pas un maximum local. Ensuite il effectue un seuillage par hystérésis. On commence par sélectionner les points qui dépassent le seuil haut et on applique ensuite le seuil bas en ne conservant que les composantes connexes qui contiennent un point au-dessus du seuil haut.&amp;lt;br&amp;gt;&lt;br /&gt;
En résumé: (en vert on conserve après filtrage, en orange on ne conserve pas.)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:canny1.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Éléments pouvant être utiles au projet (à tester au cours des prochaines séances):&lt;br /&gt;
::- Extreme Points (topmost, bottommost, rightmost and leftmost)&lt;br /&gt;
::- cv2.getAffineTransform et cv2.warpAffine qui permettent une transformation affine&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Comparaison_filtres.png&amp;diff=52152</id>
		<title>Fichier:Comparaison filtres.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Comparaison_filtres.png&amp;diff=52152"/>
				<updated>2018-02-21T16:36:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zbriois : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Zbriois</name></author>	</entry>

	</feed>