<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sdeltomb</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sdeltomb"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Sdeltomb"/>
		<updated>2026-05-13T10:33:24Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=15185</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=15185"/>
				<updated>2014-12-17T13:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Robot de surveillance domestique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ mutt] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusions en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation vidéo.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 12'''===&lt;br /&gt;
* Partie alarme et notification : Ajout d'une alarme visuelle pour la démo. Le bouton Power devient rouge et clignote pendant l'alarme.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Tournage de la vidéo.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 13'''===&lt;br /&gt;
* Partie rapport : Fin de la rédaction.&lt;br /&gt;
* Partie soutenance : Préparation du support.&lt;br /&gt;
&lt;br /&gt;
==Rapport du projet==&lt;br /&gt;
&lt;br /&gt;
- Rapport de soutenance : [[Fichier:Rapport_PFE_P24_Deltombe.pdf]]&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=15178</id>
		<title>Projets IMA5 2014/2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=15178"/>
				<updated>2014-12-17T10:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P1 Modélisation et commande de l'auto-ignition d'un moteur HCCI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Moulé Alexandre / Taché Clément &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Anne-Lise Gehin / Jean-Yves Dieulot &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P5 Filtrage des indicateurs numériques de diagnostic]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; ZIOU Ismaïl / HAMZAOUI Oussama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P6 Gestion des flux thermiques du bâtiment Polytech]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Florian Royer / Zohour Assaieb &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P7 Utilisation d'un Robot Nao pour les enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rodriguez Loïc/Ismaïl Tahry&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Projetpfenaomi.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P8 Pilulier]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Mercier / Emile Pinet&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS / Alexandre BOE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P9 Agenda pour personnes non lectrices]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Cédric DESPREZ &amp;amp; Soufiane HADDAOUI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_MiSoutenance_DESPREZ_HADDAOUI.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P11 Détecteur d'obstacles pour fauteuils électriques]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Geoffrey ROSE / Marjorie TIXIER &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS / Blaise Conrard &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P12 Automatiser à l'aide d'une interface LabView la procédure de mesure de conductivité électrique d'un alternateur à griffes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Hugo FONDU &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Abdelkader Benabou &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P13 Construction d'un support motorisé pour la réalisation des essais de décharges électrostatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; JEBBARI Zineb / BEKRAOUI Oumaima &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Nathalie Rolland &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:rapportJebbek.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Balise Bluetooth Low Energy]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Kévin CHALONO / Armagan YAMNAZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[ Fichier:ProjetBLE 1 pdf.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P22 Google Glass en logistique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémy Gondry / Vincent Meunier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P24 Robot de surveillance domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Sébastien DELTOMBE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_PFE_P24_Deltombe.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P25 SmartMeter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Ederlé / Sylvain Fossaert&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Guillaume Renault / Xavier Redon / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:RapportFossaertEderle.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P26 Vehicule Electrique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Smain Labdouni / Adnane Jaoui &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Arnaud Chielens / Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P27 Controle Direct de Puissance d'un Convertisseur Matriciel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Quentin Pesqueux / Nicolas Alexandre &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Charlotte BRICOUT / Nathan MARTIN &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P33 Ligthing contactless / &amp;quot;wireless&amp;quot;]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benjamin Lafit &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_Benjamin_Lafit.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P37 Creation d'un composant d'audit des accès cache mémoire sur un microprocesseur LEON3 simulé en FPGA ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérôme Vaessen &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Julien Cartigny / Pierrick Buret &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_VAESSEN_presoutenance.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P44 Création d'un systeme domotique sans fil ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benoit MALIAR / Thomas MAURICE&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierrick BURET / Thomas VANTROYS  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P45 Aide à la navigation d'un véhicule autonome]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierre APPERCÉ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P46 Simulation Temps Réel d'un Environnement de Robots Autonomes Logisticiens]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Valentin VERGEZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P57 CHRU Lille : Smart Picking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu Bossennec / Florian Caron&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Gwénaëlle Maton / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P59 Assistance globale pour aide au parking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu GERIER / Céline LY &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre BOE / Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rapport_PFE_P24_Deltombe.pdf&amp;diff=15177</id>
		<title>Fichier:Rapport PFE P24 Deltombe.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rapport_PFE_P24_Deltombe.pdf&amp;diff=15177"/>
				<updated>2014-12-17T10:58:56Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=15066</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=15066"/>
				<updated>2014-12-15T19:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Avancement du Projet  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ mutt] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusions en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation vidéo.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 12'''===&lt;br /&gt;
* Partie alarme et notification : Ajout d'une alarme visuelle pour la démo. Le bouton Power devient rouge et clignote pendant l'alarme.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Tournage de la vidéo.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 13'''===&lt;br /&gt;
* Partie rapport : Fin de la rédaction.&lt;br /&gt;
* Partie soutenance : Préparation du support.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14969</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14969"/>
				<updated>2014-12-10T18:03:59Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ mutt] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusions en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation vidéo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14928</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14928"/>
				<updated>2014-12-09T21:42:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ mutt] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation vidéo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14893</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14893"/>
				<updated>2014-12-06T10:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ mutt] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation démo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14892</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14892"/>
				<updated>2014-12-06T10:40:38Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de [http://www.mutt.org/ MUTT] conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation démo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14891</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14891"/>
				<updated>2014-12-06T10:37:05Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de mutt conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation démo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14890</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14890"/>
				<updated>2014-12-06T10:36:53Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de mutt conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation démo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14889</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14889"/>
				<updated>2014-12-06T10:36:36Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Avancement du Projet  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 11'''===&lt;br /&gt;
* Partie mail : Utilisation de mutt conjointement à ssmtp afin de pouvoir envoyer les photos d'intrusion en même temps que le mail de notification.&lt;br /&gt;
* Partie rapport : Rédaction en cours.&lt;br /&gt;
* Partie vidéo : Rédaction script et préparation démo.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14836</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14836"/>
				<updated>2014-11-29T15:15:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie [http://pocoproject.org/ POCO] qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14835</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14835"/>
				<updated>2014-11-29T15:14:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie [http://doc.ubuntu-fr.org/ssmtp ssmtp]).&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14834</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14834"/>
				<updated>2014-11-29T15:09:24Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra, mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonnée au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie ssmtp).&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14833</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14833"/>
				<updated>2014-11-29T15:08:41Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:Roomspy_p24.jpg|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie ssmtp).&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14832</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14832"/>
				<updated>2014-11-29T15:07:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
[[Fichier:roomspy_p24.png|200px|thumb|left|Roomspy]]&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a un décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;br /&gt;
* Partie alarme et notification : Déclenchement d'une alarme sonore et envoi d'un mail en cas de détection (utilisation de la librairie ssmtp).&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Roomspy_p24.jpg&amp;diff=14831</id>
		<title>Fichier:Roomspy p24.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Roomspy_p24.jpg&amp;diff=14831"/>
				<updated>2014-11-29T15:03:16Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14830</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14830"/>
				<updated>2014-11-29T15:01:12Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14829</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14829"/>
				<updated>2014-11-29T15:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14828</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14828"/>
				<updated>2014-11-29T15:00:22Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
[[Fichier:POCO.png|200px|thumb|left|POCO]]&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:POCO.png&amp;diff=14827</id>
		<title>Fichier:POCO.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:POCO.png&amp;diff=14827"/>
				<updated>2014-11-29T14:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14826</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14826"/>
				<updated>2014-11-29T14:58:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14825</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14825"/>
				<updated>2014-11-29T14:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14824</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14824"/>
				<updated>2014-11-29T14:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Avancement du Projet  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 9'''===&lt;br /&gt;
* Partie webcam : Implémentation de la communication entre le programme de détection de la webcam et le programme de contrôle du robot. Afin de pouvoir réutiliser la même interface de commande que celle de la partie web, la communication s'effectuera également par WebSocket. Utilisation de la librairie POCO qui permet de réaliser un client WebSocket en C++.&lt;br /&gt;
* Partie contrôle du Roomba : Création de nouvelles commandes permettant de piloter le roomba en mode automatique. &lt;br /&gt;
* Partie serveur web : mise à disposition des nouvelles commandes par l'interface de contrôle WebSocket.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 10'''===&lt;br /&gt;
* Partie détection : Travail d'optimisation sur les temps de réaction. En effet, le robot arrive à suivre une personne qui se déplace grâce à la détection de visage de la caméra mais en général il y a décalage de 4 secondes. Plusieurs pistes ont été exploitées afin d'améliorer la vitesse de réaction. Finalement la détection de visage a été abandonné au profit d'une détection de buste. Celle-ci à l'avantage d'être plus rapide pour un résultat similaire.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14823</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14823"/>
				<updated>2014-11-29T14:22:59Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14627</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14627"/>
				<updated>2014-11-16T21:47:36Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ ont été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14626</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14626"/>
				<updated>2014-11-16T21:46:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin, création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14625</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14625"/>
				<updated>2014-11-16T21:46:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur, permettant de pivoter la caméra de gauche à droite, a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus, ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14624</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14624"/>
				<updated>2014-11-16T21:45:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permet le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyer une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14623</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14623"/>
				<updated>2014-11-16T21:43:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits fils ont été soudés sur des fils de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué : il est passé de 115200 bauds à 19200 bauds.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba répond correctement à toutes les commandes. De plus, les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14622</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14622"/>
				<updated>2014-11-16T21:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude, il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet, en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 a été réalisée dans le courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournie par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant, une fois le mode activé, le roomba ne répond plus aux commandes. La connection série semble toujours instable, des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14621</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14621"/>
				<updated>2014-11-16T21:37:26Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisi de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloqué trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant : récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturbé. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçue par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant : non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14620</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14620"/>
				<updated>2014-11-16T21:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallu faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits fils de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les fils qui permettent la communication série par rapport aux fils qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les fils permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet, la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14619</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14619"/>
				<updated>2014-11-16T21:24:17Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* 	=&amp;gt; Programmation de rondes  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tous les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14618</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14618"/>
				<updated>2014-11-16T21:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* 	Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet, le robot sera capable, via la caméra, de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14594</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14594"/>
				<updated>2014-11-14T07:40:01Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme pour l'ajustement automatique de la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14593</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14593"/>
				<updated>2014-11-14T07:38:24Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14592</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14592"/>
				<updated>2014-11-14T07:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14591</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14591"/>
				<updated>2014-11-14T07:37:51Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|Open Source Computer Vision]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:OpenCV_P24.png&amp;diff=14590</id>
		<title>Fichier:OpenCV P24.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:OpenCV_P24.png&amp;diff=14590"/>
				<updated>2014-11-14T07:35:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : a téléversé une nouvelle version de « Fichier:OpenCV P24.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14589</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14589"/>
				<updated>2014-11-14T07:33:21Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14588</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14588"/>
				<updated>2014-11-14T07:32:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14587</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14587"/>
				<updated>2014-11-14T07:32:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|400px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14586</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14586"/>
				<updated>2014-11-14T07:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création d'un programme qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14585</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14585"/>
				<updated>2014-11-14T07:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création du programme de détection qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement) ainsi que d'enregistrer les images suite à une détection.&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14584</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14584"/>
				<updated>2014-11-14T07:29:05Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Avancement du Projet  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
[[Fichier:FaceDetection_P24.png|200px|thumb|left|Exemple de détection]]&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création du programme de détection qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement).&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:FaceDetection_P24.png&amp;diff=14583</id>
		<title>Fichier:FaceDetection P24.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:FaceDetection_P24.png&amp;diff=14583"/>
				<updated>2014-11-14T07:28:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14582</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14582"/>
				<updated>2014-11-14T07:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création du programme de détection qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement).&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14581</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14581"/>
				<updated>2014-11-14T07:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création du programme de détection qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement).&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14580</id>
		<title>P24 Robot de surveillance domestique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P24_Robot_de_surveillance_domestique&amp;diff=14580"/>
				<updated>2014-11-14T07:24:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sdeltomb : /* Avancement du Projet  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Robot de surveillance domestique'''=&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=='''Cahier des charges'''==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Présentation générale du projet'''&amp;lt;br/&amp;gt;=== &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Contexte'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
La robotique est au service de l'homme dans de nombreux domaines y compris dans celui de la surveillance de nos maisons.&lt;br /&gt;
&amp;lt;br/&amp;gt;En effet de nouveaux robots voient le jour permettant de voir, d'entendre, de parler et de vous déplacer chez vous (ou ailleurs) depuis n'importe quel point de la planète.&amp;lt;br/&amp;gt;&lt;br /&gt;
Il y a par exemple le robot espion Rovio de la société WoWee:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Rovio.jpg|200px|Rovio]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ou encore pour un usage plus professionnel Lucos de la société Abankos Robotic. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Lucos.jpg|200px|Lucos]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Le roomba est un robot aspirateur de la société IRobot. Les Roombas contiennent une interface électronique et logicielle permettant la modification du firmware et ainsi, le contrôle, la modification du comportement et la lecture des données recueillies par les capteurs du robot. Cette fonction, appelée iRobot Roomba Open Interface par le constructeur, a été introduite afin d'encourager les programmeurs et ingénieurs en robotique à apporter leurs propres améliorations au Roomba.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Roomba1.jpg|Roomba]]&lt;br /&gt;
&lt;br /&gt;
===='''	Objectif du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le but du projet est la reconversion d’un vieux Roomba dont le bloc de rammasage est HS, en robot de surveillance domestique à l’aide d’un système embarqué dont les différentes fonctionnalités seront les suivantes :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Programmation de ronde&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Détection des intrus (par le biais d’une caméra)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Pilotage à distance du robot (par le biais d’une interface web ou application android)&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi de notification en cas de détection d’une intrusion&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Les avantages de la reconversion d'un roomba pour ce projet sont :&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Réutilisation du dock de recharge&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Utilisation des différents capteurs embarqués&amp;lt;br/&amp;gt;&lt;br /&gt;
=&amp;gt; Envoi des commandes par le port série (via la connectique MiniDIN)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Description du projet'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à greffer au Roomba un système embarqué qui dispose du Wifi et sera relié à une webcam. Le système devra permettre de piloter le roomba et de visualiser la vidéo de la webcam par le biais d'une page web.&amp;lt;br/&amp;gt;&lt;br /&gt;
Puis dans un second temps des nouvelles fonctionnalités orientées surveillance seront ajoutées. En effet le robot sera capable via la caméra de suivre un itinéraire, détecter des mouvements ainsi que des visages afin d'informer l'utilisateur de ce qui se passe chez lui. Celui-ci recevra alors une notification par mail avec image de l'intrusion qui a été détectée.&amp;lt;br/&amp;gt;&lt;br /&gt;
Le schéma suivant illustre comment s’effectuent les échanges entre les différents périphériques :&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:P24_principe.png|800px|thumb|center|Principe de fonctionnement]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	Choix techniques : matériel et logiciel'''&amp;lt;br/&amp;gt;====&lt;br /&gt;
Dans le cadre du projet, les matériels et logiciels suivants vont être utilisés : &amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un [http://www.irobot.fr/Roomba Roomba] série 520 de la société IRobot&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Un système embarqué [http://www.pcduino.com/pcduino-v2/ PcDuino] version 2&lt;br /&gt;
*  Un [http://www.arobose.com/shop/gamme-pcduino/399-kit-webcam-3-axes-pour-pcduino.html kit webcam 3 axes]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''	Étapes du projet'''&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;===&lt;br /&gt;
Afin de mener à bien le projet, différentes étapes ont étés posées.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du roomba&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
L’objectif de cette partie est de créer un programme simple sur le PcDuino permettant de communiquer avec le Roomba.&lt;br /&gt;
Principalement envoyer des ordres et récupérer les informations des capteurs.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Étude et réalisation de la partie alimentation du PcDuino&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
La batterie du Roomba délivre une tension qui varie en fonction de la charge de celle-ci (de 12V jusque 20V sur la base de recharge). Il est donc nécessaire de prévoir une régulation de cette tension afin d'obtenir l'alimentation nécessaire au bon fonctionnement du PcDuino.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Prise en main du kit webcam&amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans cette partie il est question de piloter les servomoteurs du kit et d'installer un logiciel permettant la récupération du flux vidéo de la webcam.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Réalisation de la prise en main à distance &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Il s'agit ici de disposer pour fin octobre d'une première version du système permettant de prendre à distance le roomba via un site web.&lt;br /&gt;
Il faudra être capable depuis le site de :&lt;br /&gt;
* piloter le roomba&lt;br /&gt;
* visualiser le flux vidéo de la webcam&lt;br /&gt;
* visualiser les informations des capteurs&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Détection d'intrus, alarme et notification &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Une fois la première version du système finalisée, il faudra étudier et mettre en place un dispositif de détection d'intrusion.&lt;br /&gt;
Avec la possibilité de déclencher une alarme sonore et d'envoyer une notification au propriétaire.&lt;br /&gt;
&lt;br /&gt;
===='''	=&amp;gt; Programmation de rondes &amp;lt;br/&amp;gt;'''====&lt;br /&gt;
Dans un dernier temps, si possible, réaliser un système de ronde permettant au Roomba d'inspecter une pièce tout les N temps.&lt;br /&gt;
&lt;br /&gt;
=='''Avancement du Projet '''==&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 1'''===&lt;br /&gt;
Réalisation des tests de communication avec le roomba.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MiniDIN.jpg|200px|thumb|left|Connecteur Mini DIN]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
J'ai récupéré dans un premier temps la documentation du ROI (Roomba Open Interface).&lt;br /&gt;
ROI permet de communiquer avec le roomba par le biais d'un port série dont le connecteur est un Mini DIN avec 8 pin.&lt;br /&gt;
Il a donc fallut faire l'acquisition d'un câble de ce type afin de pouvoir relier le roomba au système embarqué.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Fichier:Fiche8pin.jpg|200px|thumb|left|Description des pins]] &lt;br /&gt;
&amp;lt;br/&amp;gt;Il a fallu ensuite déterminer le rôle de chacun des 8 petits files de couleurs différentes se trouvant dans le cable Mini DIN.&lt;br /&gt;
Afin de distinguer notamment les files qui permettent la communication série par rapport aux files qui permettent l'alimentation.&lt;br /&gt;
Une breadboard a ensuite été utilisée afin de permettre de relier les files permettant la communication série au PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A l'issue de cette première semaine des commandes de mouvement ont été envoyées avec succès au Roomba, à l'aide d'un programme en C, même si la communication semble fastidieuse.&lt;br /&gt;
En effet la réussite d'une commande semble pour le moment aléatoire.&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 2'''===&lt;br /&gt;
[[Fichier:L78S05.jpeg|200px|thumb|left|L78S05]] &lt;br /&gt;
J'ai choisis de travailler sur plusieurs parties en parallèle afin de permettre une avancée globale du projet et d'éviter de me retrouver bloquer trop longtemps sur une même partie.&lt;br /&gt;
Évolution des différentes parties :&lt;br /&gt;
* Partie Webcam : Montage du kit Webcam. Test du logiciel mjpg-streamer afin de récupérer le flux vidéo de la webcam. Test concluant récupération réussi du flux vidéo via une page web depuis un pc sur le même réseau wifi que le PcDuino.&lt;br /&gt;
* Partie Communication série : création d'un programme en C++ permettant la réalisation des différentes commandes d'actions disponibles. La communication série semble toujours perturber. Le roomba, par moment, ne veut pas répondre aux commandes. Premiers tests de récupération des informations des capteurs réalisés mais non concluant car aucune information n'a été reçu par le PCDuino. &lt;br /&gt;
* Partie régulation : Test d'utilisation d'un régulateur de tension linéaire L78S05. Le résultat n'est pas concluant non seulement le PcDuino n'arrive pas à se lancer mais en plus le régulateur chauffe énormément même avec un dissipateur.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 3'''===&lt;br /&gt;
[[Fichier:LM2596.jpg|200px|thumb|left|Régulateur à découpage LM2596]] &lt;br /&gt;
* Partie régulation : Après étude il semblerait qu'un régulateur à découpage est mieux adapté à la situation. En effet en plus de proposer un meilleur rendement il chauffe beaucoup moins qu'un régulateur linéaire. Les régulateurs à découpage utilisent le rapport cyclique entre l'état passant et l'état bloqué du transistor de découpage pour réguler la tension et le courant de sortie. &lt;br /&gt;
Une commande d'un régulateur de tension basé sur un LM2596 est réalisée courant de la semaine dont les caractéristiques sont les suivantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension d'entrée du module prévue 4 à 40V (Tension d'entrée de 12 à 20V fournit par le roomba)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Tension de sortie 1.25V à 37V (5V sera suffisant dans notre cas)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;gt; Sortie en 2A normale et stable (demandé pour le PcDuino)&amp;lt;br/&amp;gt;&lt;br /&gt;
Le module a été reçu le weekend les premiers tests sont concluants. Le PcDuino démarre et il a fonctionné pendant plus d'une heure.&lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Les tests de récupération des informations des capteurs sont toujours problématiques seul le mode stream semble fonctionner. C'est à dire que c'est le roomba qui nous envoie périodiquement les données des capteurs. Cependant une fois le mode activé le roomba ne répond plus aux commandes. La connection série semble toujours instable des problèmes de CEM sont envisagés à cause de la breadboard.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 4'''===&lt;br /&gt;
[[Fichier:TBoardV2.jpeg|200px|thumb|left|T Board V2]] &lt;br /&gt;
&lt;br /&gt;
* Partie Communication série : Plusieurs actions ont été réalisées pour améliorer la communication série. La breadboard a été remplacée par un câblage en direct (sauf pour l'alimentation), les petits files ont été soudés sur des files de plus gros diamètre de type jumper mâle (permettant une liaison facile avec les Entrées/Sorties du PcDuino). Des gaines thermorétractables ont également été utilisées pour protéger les soudures. Un ralentissement de la communication a été réalisé en temporisant l'écriture sur le port série (150ms entre chaque écriture) car le roomba n'arrive pas à gérer la réception si l'intervalle entre deux paquets est trop court. Le baudrate a également été diminué il est passé de 115200 baud à 19200 baud.&lt;br /&gt;
Les tests suite à ces changements se sont avérés concluants en effets le roomba réponds correctement à toutes les commandes. De plus les différents modes de récupération des données capteurs sont désormais opérationnels.&lt;br /&gt;
&lt;br /&gt;
Une incompatibilité des entrés/sorties a été détectée entre les DIOs du PcDuino qui sont à 3,3V et ceux du roomba qui fonctionnent en 5V. Même si cela semble marcher, un shield de type TBoard V2 d'adaptation 3V vers 5V a été commandé afin d'éviter d'endommager le PcDuino.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 5'''===&lt;br /&gt;
[[Fichier:KitWebcam.jpg|200px|thumb|left|Kit Webcam]] &lt;br /&gt;
* Partie webcam : Implémentation dans le PcDuino d'un programme qui permets le pilotage des servomoteurs du kit webcam. Le principe utilisé est connu sous le nom de Pulse Width Modulation (PWM) ou Modulation de Largeur d'Impulsions; il consiste à moyenner un signal logique (0 et 1) de fréquence fixe mais de rapport cyclique contrôlé. Dans le cas des servomoteurs utilisés, il faut envoyé une impulsion dans un cycle de 20ms. La durée de l'impulsion permet de faire varier l'angle de rotation du servomoteur.&lt;br /&gt;
* Partie communication série : Ajout dans le programme principal d'une fonction permettant de réveiller le roomba si besoin. Car au bout d'un certain temps d'inactivité le roomba passe en mode sleep. Une fois dans ce mode, le roomba ne réagit plus aux commandes envoyées, il faut alors en général appuyer sur le bouton power afin de le réveiller. Ce comportement est problématique car dans le cas d'une prise de contôle à distance, l'utilisateur ne pourra pas être présent pour appuyer sur le bouton du Roomba. Le principe utilisé est d'envoyer sur le file BRC une impulsion afin de pouvoir changer le mode courant de sleep vers passif.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 6'''===&lt;br /&gt;
[[Fichier:IHM_P24.png|200px|thumb|left|Interface web]] &lt;br /&gt;
* Partie web : Utilisation de la librairie [https://github.com/cesanta/mongoose Mongoose] qui permet de disposer en un seul fichier d'un serveur web léger et embarqué dans une application C/C++. Implémentation de WebSocket pour pouvoir afficher les informations des capteurs du Roomba dans une page html tout en contrôlant celui-ci par le biais d'un joystick écrit en javascript.&lt;br /&gt;
* Partie pilotage de la webcam : Le pilotage des servomoteurs de la webcam est également géré via le même joystick (pas très maniable pour le moment en attente de l'utilisation d'un slider qui sera plus adapté pour la webcam). Un bouton présent sur l'interface permet de passer d'un mode pilotage du robot à un mode pilotage de la webcam. Le servomoteur permettant de pivoter la caméra de gauche à droite a été déconnecté pour le moment car l'utilisation des deux servomoteurs entraîne une instabilité de l'alimentation du PcDuino (ce qui provoque un arrêt de celui-ci). De plus ce servomoteur n'est pas indispensable car l'on peut pivoter la webcam de gauche à droite par le biais du Roomba.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 7'''===&lt;br /&gt;
[[Fichier:OpenCV_P24.png|200px|thumb|left|]]&lt;br /&gt;
* Partie webcam : Installation de la librairie [http://opencv.org/ OpenCV] et formation sur celle-ci. La réalisation de petits programmes en C++ on été réalisés afin d'apprendre à récupérer des images d'une vidéo, faire de la détection de mouvements ainsi que de la reconnaissance de visages. Ces tests permettront l'élaboration d'un programme qui permettra au roomba de suivre un mouvement ou une personne afin de prendre les meilleurs clichés possibles.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Semaine 8'''===&lt;br /&gt;
* Partie webcam : Finalisation des tests permettant la reconnaissance de visages et de mouvements. Réalisation d'un algorithme permettant d'ajuster automatiquement la vitesse de détection du visage en fonction de la distance. Enfin création du programme de détection qui permet de passer d'un mode de détection à l'autre (mouvement -&amp;gt; visage et visage -&amp;gt; mouvement).&lt;br /&gt;
* Partie servomoteur : Réalisation du slider permettant le pilotage du servomoteur en fonction de l'angle sélectionné.&lt;/div&gt;</summary>
		<author><name>Sdeltomb</name></author>	</entry>

	</feed>