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

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_PFE_Hagui_Bacem.pdf&amp;diff=51892</id>
		<title>Fichier:Rapport PFE Hagui Bacem.pdf</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_PFE_Hagui_Bacem.pdf&amp;diff=51892"/>
				<updated>2018-02-21T13:21:07Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : Bhagui a téléversé une nouvelle version de Fichier:Rapport PFE Hagui Bacem.pdf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_PFE_Hagui_Bacem.pdf&amp;diff=51891</id>
		<title>Fichier:Rapport PFE Hagui Bacem.pdf</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Rapport_PFE_Hagui_Bacem.pdf&amp;diff=51891"/>
				<updated>2018-02-21T13:15:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2017/2018&amp;diff=51890</id>
		<title>Projets IMA5 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2017/2018&amp;diff=51890"/>
				<updated>2018-02-21T13:14:42Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* 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;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&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;tr&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;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Vidéo&amp;lt;/th&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;[[P1 Conception d'une pompe automatique à insuline]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alice Coffin / Amina Fahem&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;[[Fichier:rapport_mi_PFE_COFFIN_FAHEM.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P18 Localisation of quadrotors]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Nicky UNG / Hugo Delatte&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Jérémie DEQUIDT / Gang ZHENG&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:RapportMi-PFE-UNG DELATTE.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P25 Développement d'un cobot ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tristan HART&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rodolphe Astori / Alexandre Boé / Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:RapportIntermédiaire_PFE25_HART.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P29 QT pour tablette à retour tactile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lValentin BEAUCHAMP / Vivian SENAFFE&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;[[Fichier:Rapport_pfe_BEAUCHAMP_SENAFFE.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:BEAUCHAMP_SENAFFE_Rapport_Final_PFE.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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P30 patcher l’IoT par intrusion]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexis DORIAN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Thomas Vantroys /Worldline&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P33 Utilisation de Nao avec des enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Antoine ARNAUDET&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:ARNAUDET_ANTOINE_RAPPORT_DECEMBRE_2017_PFE.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:ANTOINE_ARNAUDET_P33_RAPPORT_PFE_FINAL.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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P34 Robot reconstructeur de mouvement]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Baptiste GRILLERE / Jean-Baptiste SAISON&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rochdi MERZOUKI / Guillaume DEWAELE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P21 Projet bras déformable antagoniste]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Florian GIOVANNANGELI&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Thor BIEZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P20 Projet marionnette déformable interactive ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Bacem HAGUI&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Félix VANNESTE, Jeremie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:bacem_mi_parcours.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_PFE_Hagui_Bacem.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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P5 Commande d’une centrale de production de biogaz ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cheikh Soilihi SAID AHMED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Midzodzi PEKPE &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:Rapport_intermediaire.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P15 Réseau de capteurs temps réel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Edmur Lopes&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexandre Boé / Xavier Redon / Thomas Vantroys&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:Rapport_mi_parcours.pdf ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:Rapport PFE15 LOPES.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;[[P23 Application de gestion de conteneurs pour sites Web]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexis MACHEREZ&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Xavier REDON / 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;td&amp;gt; &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;[[P36 Robots Mobiles Chorégraphes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Joshua LETELLIER&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;[[Fichier:RapportAvancementPFE_Letellier_Joshua.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Fichier:RapportFinalPFE_Letellier.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;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P26 Réseau de capteurs de pollution]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Marianne BUTAYE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexandre BOE / Xavier REDON / 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;td&amp;gt;[[Fichier:Rapport p26 2018 marianne butaye.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;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P32 Apprentissage automatique pour la détection d’attaques par déni de services ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Robin Cavalieri&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; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &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;[[P27 Réseau LoRaWAN ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;François Lefevre&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexandre BOE / Xavier REDON / 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;td&amp;gt; &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;[[P38 Conception par fabrication additive des pièces en plastique à partir d’un robot]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Diana Marrucho&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;td&amp;gt;[[Fichier:MARRUCHO Diana Rapport PFE.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;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matériel nécessaires ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Matériel&amp;lt;/th&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;P15&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 2 câbles usb&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;50 Positions Embase Connecteur 0,100 po (2,54 mm) Trou traversant Or  [https://www.digikey.fr/products/fr?keywords=SFH11-PBPC-D25-ST-BK%20]&amp;lt;/span&amp;gt; &lt;br /&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; P27 Réseau LoRaWAN &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 1 Raspberry Pi 3 + boîtier + alimentation + câble USB &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 STM32 Nucleo + 3 câbles mini-USB &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 3 modules émetteurs LoRa &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 1 module récepteur LoRa &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 1 carte SD &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 10 câbles de connexion &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51153</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51153"/>
				<updated>2018-02-18T21:35:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
| 20&lt;br /&gt;
|&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué, mis-au point avec l'ingénieur R&amp;amp;D, tournage de la vidéo de présentation, rédaction du rapport et préparation de la soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51152</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51152"/>
				<updated>2018-02-18T21:33:53Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué, mis-au point avec l'ingénieur R&amp;amp;D, tournage de la vidéo de présentation, rédaction du rapport et préparation de la soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51151</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51151"/>
				<updated>2018-02-18T21:29:55Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué, mis-au point avec l'ingénieur R&amp;amp;D, tournage de la vidéo de présentation, rédaction du rapport et préparation de la soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51150</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51150"/>
				<updated>2018-02-18T21:28:19Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué, rédaction du rapport et tournage de la vidéo de présentation.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51149</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51149"/>
				<updated>2018-02-18T21:26:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué, rédaction du rapport et tournage de la vidéo de présentation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Mis-au point avec l'ingénieur R&amp;amp;D et préparation de soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51148</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51148"/>
				<updated>2018-02-18T21:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Mouvement dans l'axe Z:'''&lt;br /&gt;
La distance entre la LeapMotion et la main est exprimée en millimètres. Le code ci-dessous traite cette information comme suivant; de 0 à 150mm nous considérons que l'utilisateur voudrais la position la plus basse de la marionnette (pour avoir assez d'espace pour plier les doigts et contrôler la marionnette), à partir de 400mm la position la plus haute est choisie. Dans le cas contraire, une hauteur intermédiaire est choisie pour notre marionnette. Un filtre exponentiel est utilisé pour éviter des mouvements brusques afin de garder la stabilité de la marionnette dans l'espace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur de ouputVector[12] est alors ajoutée aux autres moteurs pour permettre à la marionnette d'être levé et de conserver sa forme simulée, à une certaine limite bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mouvement dans l'axe X:'''&lt;br /&gt;
Nous n'avons que 18cm à manipuler dans l'axe X, nous avons donc limité les mesures de la LeapMotions entre -200mm et 200mm. Lorsque la valeur respecte cette condition, elle sera transformée en une valeur entre 4 et 22cm qui sont le minimum et maximum respectivement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'Arduino reçois un tableau de 14 valeurs par le port série qu'il traite ensuite pour déplacer chacun des 13 servomoteurs qui lui sont connectés. La dernière valeur est celle destinée au moteur pas-à-pas contenant la distance à atteindre entre 4 et 22cm. Le démonstrateur est équipée d'un capteur ultrasons. La distance mesurée, entre le capteur et la plaque de moteurs, est utilisée pour activer ou non le moteur pas-à-pas. La vitesse du moteur est proportionnelle à la différence entre la position désirée et la position actuelle de la plaque.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué et rédaction du rapport. &lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Mis-au point avec l'ingénieur R&amp;amp;D et préparation de soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51147</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=51147"/>
				<updated>2018-02-18T21:09:29Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
The distance between the LeapMotion and the hand is expressed in millimeters. The code below does the followig; from 0 to 150mm we consider that the user wants the lowest position of the Octupus (so that they would have enough space to fold their fingers), starting at 400mm and onwards the highest position is chosen and otherwise an intermediate heigh is chosen. An exponential filter is used to avoid having huge changes to the values sent to the motors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global interZ&lt;br /&gt;
global lastValueZ&lt;br /&gt;
if vectors[10][1] &amp;lt;= 150:&lt;br /&gt;
    interZ = 0&lt;br /&gt;
elif vectors[10][1] &amp;gt;= 400:&lt;br /&gt;
    interZ = 250&lt;br /&gt;
else:&lt;br /&gt;
    interZ = vectors[10][1]-150&lt;br /&gt;
outputVector[12] = lastValueZ * (1-alpha) + interZ * alpha&lt;br /&gt;
lastValueZ = outputVector[12]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value added of ouputVector[12] is then added to the other motors to allow the Octupus to be lifted to dropped and keep its simulated shape, to a certain limit of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i in range(0,12):&lt;br /&gt;
    if outputVector[i] &amp;lt; 0:&lt;br /&gt;
        outputVector[i] = 0&lt;br /&gt;
    outputVector[i] = 255/116*outputVector[i]&lt;br /&gt;
    #adding an offset to compensate for lifting the robot&lt;br /&gt;
    outputVector[i] += (outputVector[12])&lt;br /&gt;
    if outputVector[i] &amp;gt; 250:&lt;br /&gt;
        outputVector[i] = 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans l'axe x:&lt;br /&gt;
We only have 18cm to play with when it comes to the X-axis so we limited the measurements to -200 and 200. When the value respects our condition, it will be mapped between the values 4 and 22cm which are our minimum and maximum respectively.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if vectors[10][0] &amp;gt; -200 and vectors[10][0] &amp;lt; 200:&lt;br /&gt;
    outputVector[13] = (vectors[10][0]+200)*18/400+4&lt;br /&gt;
elif vectors[10][0] &amp;lt; -200:&lt;br /&gt;
    outputVector[13] = 4&lt;br /&gt;
else:&lt;br /&gt;
    outputVector[13] = 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
&lt;br /&gt;
Documentation du travail effectué et rédaction du rapport. &lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Mis-au point avec l'ingénieur R&amp;amp;D et préparation de soutenance.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50861</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50861"/>
				<updated>2018-02-14T16:10:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 6(05/02/2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup()  &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  Herkulex.beginSerial1(57600); //open serial port 1 &lt;br /&gt;
  Herkulex.reboot(6); //reboot first motor&lt;br /&gt;
  delay(500); &lt;br /&gt;
  Herkulex.initialize(); //initialize motors&lt;br /&gt;
  delay(200);  &lt;br /&gt;
  Herkulex.clearError(6);&lt;br /&gt;
  //Herkulex.set_ID(253, 6);&lt;br /&gt;
  //Herkulex.writeRegistryRAM(6, 6, 0x51);&lt;br /&gt;
  //Herkulex.writeRegistryEEP(6, 4, 0x22);&lt;br /&gt;
  //Herkulex.reboot(6); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  Herkulex.moveOne(6, random(0,1023), 2000, LED_BLUE);&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50545</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50545"/>
				<updated>2018-02-12T14:10:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50539</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50539"/>
				<updated>2018-02-12T14:08:03Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour que l'actionnement soit fluide à l'utilisateur nous souhaitons avoir un actionnement de la marionnette dans un temps qui ne dépasse pas 40ms. Nous souhaitons avoir au moins un &amp;quot;Frame Rate&amp;quot; de 24fps, et donc chaque &amp;quot;Frame&amp;quot; ne doit pas dépasser 40ms. J'ai transmis les résultats du log dans un fichier Excel pour mieux interpréter les résultats qui sont les suivantes. La commande moveOne prends entre 5 et 6ms pour actionner un moteur, ayant treize moteurs cela donne 69ms et donc cette commande n'est pas utilisable dans notre cas. En revanche, la commande moveAllAngle prends entre 0 et 1ms pour préparer un moteur pour un actionnement synchrone avec les autres moteurs. moveAllAngle doit etre suivi par la commande actionAll qui elle prendre environs 10ms pour actionner tout les moteurs au même temps. Dans les pires des cas ou chaque moteur prends 1ms pour être préparer, la totale de temps consommé est de 23ms ce qui nous laisse assez de temps pour l'actionnement de la marionnette dans l'axe x avec un moteur pas-à-pas et de toujours respecter la contrainte de 24 fps minimum. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAllAngle.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50529</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50529"/>
				<updated>2018-02-12T13:50:44Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAll.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50528</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50528"/>
				<updated>2018-02-12T13:47:33Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;700px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAll.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50527</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50527"/>
				<updated>2018-02-12T13:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:moveOne.png|Photo 7 : Un total de 69 Millisecondes pour actionner les treize moteur avec moveOne.&lt;br /&gt;
Fichier:moveAll.png|Photo 8 : Un total de 5 millisecondes pour '''préparer''' les treize moteurs avec moveAll.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:moveOne.png]]&lt;br /&gt;
[[Fichier:moveAll.png]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50526</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50526"/>
				<updated>2018-02-12T13:42:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 49 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 6 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:moveOne.png]]&lt;br /&gt;
[[Fichier:moveAll.png]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:MoveAll.png&amp;diff=50521</id>
		<title>Fichier:MoveAll.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:MoveAll.png&amp;diff=50521"/>
				<updated>2018-02-12T11:34:22Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:MoveOne.png&amp;diff=50520</id>
		<title>Fichier:MoveOne.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:MoveOne.png&amp;diff=50520"/>
				<updated>2018-02-12T11:33:57Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50519</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50519"/>
				<updated>2018-02-12T11:33:26Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:moveOne.png]]&lt;br /&gt;
[[Fichier:moveAll.png]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50433</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50433"/>
				<updated>2018-02-09T11:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet ou définition/redéfinition des objectifs &lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50432</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50432"/>
				<updated>2018-02-09T11:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50431</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50431"/>
				<updated>2018-02-09T11:20:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Actionnement des treize moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50430</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50430"/>
				<updated>2018-02-09T11:14:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5(05/02/2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50429</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50429"/>
				<updated>2018-02-09T11:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50428</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50428"/>
				<updated>2018-02-09T11:14:35Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données &amp;quot;DATA_SIZE&amp;quot; à 60 au lieu de 50 (dans la librairie Herkulex). En conclusion, j'ai identifié chaque moteur, ajouté un treizième et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50148</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50148"/>
				<updated>2018-02-07T15:48:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50147</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50147"/>
				<updated>2018-02-07T15:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50146</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50146"/>
				<updated>2018-02-07T15:46:12Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Test des temps de réponse des commandes&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Ajout d'actionnement dans les axes X et Z&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50144</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50144"/>
				<updated>2018-02-07T15:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| Identification des actuators et programmation d'un nouveau moteur&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50143</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50143"/>
				<updated>2018-02-07T15:41:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et définition des objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50139</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50139"/>
				<updated>2018-02-07T15:38:07Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de la LeapMotion et Sofa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction rapport et préparation soutenance&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50126</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50126"/>
				<updated>2018-02-07T15:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5(05/02/2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai pu, en utilisant la librairie LeapMotion, récupérer la position de la paume d'une main. La position est décrite par la distance entre la paume et l'origine de la LeapMotion (centre du capteur). Avec ces données je suis maintenant capable d'actionner le treizième moteur pour monter ou descendre la pieuvre ainsi que le moteur pas-à-pas pour coulisser l'ensemble de plaque et pieuvre dans l'axe X.&lt;br /&gt;
&lt;br /&gt;
Ayant bien identifié chaque moteur cette fois-ci j'ai pu faire une première simulation avec l'ancienne configuration de 12 moteurs.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50112</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50112"/>
				<updated>2018-02-07T15:19:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart actuators nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
Pour cela j'ai écrit un script python qui envoi un message par le port série pour lancer le test et ensuite enregistre les temps de réponse dans un fichier nommé '''log.txt'''. &lt;br /&gt;
&lt;br /&gt;
Script python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from time import sleep&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial(&amp;quot;/dev/ttyACM1&amp;quot;, 9600) # Establish the connection on a specific port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sleep(2)&lt;br /&gt;
ser.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
f = open('log.txt','w')&lt;br /&gt;
while True:&lt;br /&gt;
	f.write(ser.readline()) # Read the newest output from the Arduino&lt;br /&gt;
ser.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un des scripts Arduino (commande moveAllAngle):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Herkulex.h&amp;gt;&lt;br /&gt;
unsigned long time;&lt;br /&gt;
int positions[13];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600); // set the baud rate&lt;br /&gt;
  Herkulex.begin(57600, 12, 11);&lt;br /&gt;
  Herkulex.initialize();&lt;br /&gt;
  &lt;br /&gt;
  for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
    positions[n]=random(0,1023);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available() &amp;gt; 0){&lt;br /&gt;
    &lt;br /&gt;
    Serial.read();&lt;br /&gt;
    &lt;br /&gt;
    for (int n=0; n&amp;lt;13; n++){&lt;br /&gt;
      Serial.println(&amp;quot;Sending&amp;quot;);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);&lt;br /&gt;
      Herkulex.moveOne(n+1, positions[n], 2000, LED_BLUE);&lt;br /&gt;
      time = millis();&lt;br /&gt;
      Serial.println(time);      &lt;br /&gt;
      Serial.print(&amp;quot;Command sent to motor &amp;quot;);&lt;br /&gt;
      Serial.println(n+1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50104</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50104"/>
				<updated>2018-02-07T15:11:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart moteurs nous avons choisi de tester 2 commandes '''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)''' et '''Herkulex.moveAllAngle(int servoID, float angle, int iLed)''' suivi par '''Herkulex.actionAll(int pTime)'''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50102</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50102"/>
				<updated>2018-02-07T15:11:30Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart moteurs nous avons choisi de tester 2 commandes ''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)'' et ''Herkulex.moveAllAngle(int servoID, float angle, int iLed)'' suivi par ''Herkulex.actionAll(int pTime)''.&lt;br /&gt;
'''Texte gras'''&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50101</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50101"/>
				<updated>2018-02-07T15:11:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Pour les tests des commandes de smart moteurs nous avons choisi de tester 2 commandes ''Herkulex.moveOne(int servoID, int Goal, int pTime, int iLed)'' et ''Herkulex.moveAllAngle(int servoID, float angle, int iLed)'' suivi par ''Herkulex.actionAll(int pTime)''.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50089</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50089"/>
				<updated>2018-02-07T14:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur et ré-installer les moteurs dans leurs socles correspondant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50031</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50031"/>
				<updated>2018-02-07T14:03:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
Le but de cette semaine était de tester les temps de réponse des smart actuators mais j'ai rencontré un problème avec le ID de chacun. J'ai donc du identifier chacun d'entre eux (IDs entre 1 et 12). Vu que j'ai ajouté un moteur à la plaque je lui ai donné un ID (13) et changé son baud rate à 57600 pour être cohérent avec les autres moteurs et pouvoir l'utiliser. &lt;br /&gt;
J'ai rencontré un problème avec la librairie Herkulex et le contrôle des 13 moteurs simultanément, effectivement il fallait changer la valeur d'un buffer de données dans la librairie &amp;quot;DATA_SIZE&amp;quot; à 60	au lieu de 50. &lt;br /&gt;
En conclusion, j'ai identifié chaque moteur, ajouté un treizième moteur,&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50013</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50013"/>
				<updated>2018-02-07T13:52:49Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 2 (08/01/2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart actuators (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50012</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50012"/>
				<updated>2018-02-07T13:51:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 2 (08/01/2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
Prenant en compte le retour durant la soutenance sur la programmation de la carte Arduino avec l'IDE et non en C, j'ai rencontré l'ingénieur R&amp;amp;D pour en parler. Le résultat de notre discussion est résumé ci-dessous:&lt;br /&gt;
*Continuer la programmation de l'Arduino avec l'IDE; coût de changement sera trop élevée.&lt;br /&gt;
*Tester les temps de réponse des commandes d'actionnement des smart servos (Herkulex DRS-0101) avec un script Python pour lancer le test et sauvegarder les résultats dans un log.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50000</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=50000"/>
				<updated>2018-02-07T13:26:36Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 50 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main des logiciels et j'ai ensuite fait un premier test de l'ensemble, simulation et robot réel. J'ai pu constater quelque problèmes avec le robot et la réalisation de la forme simulé sur l'écran.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49999</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49999"/>
				<updated>2018-02-07T13:11:07Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 49 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec la LeapMotion et le logiciel de simulation SOFA, comment les lancer et comment les utiliser.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49998</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49998"/>
				<updated>2018-02-07T13:00:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 49 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49997</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49997"/>
				<updated>2018-02-07T13:00:03Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 48 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque, j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecter la marionnette (corps déformable) en utilisant des fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir les séances de cette semaine j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA.&lt;br /&gt;
&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49996</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49996"/>
				<updated>2018-02-07T12:47:22Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecté la marionnette (corps déformable) en utilisant les fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir la séance d’aujourd’hui j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA. Il est donc nécessaire d'avoir un minimum de maîtrise de ce langage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5(05/02/2018)===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49995</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49995"/>
				<updated>2018-02-07T12:46:53Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecté la marionnette (corps déformable) en utilisant les fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir la séance d’aujourd’hui j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA. Il est donc nécessaire d'avoir un minimum de maîtrise de ce langage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2 (08/01/2018)===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49631</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49631"/>
				<updated>2018-02-02T14:43:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecté la marionnette (corps déformable) en utilisant les fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir la séance d’aujourd’hui j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA. Il est donc nécessaire d'avoir un minimum de maîtrise de ce langage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49624</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49624"/>
				<updated>2018-02-02T13:50:14Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecté la marionnette (corps déformable) en utilisant les fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir la séance d’aujourd’hui j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA. Il est donc nécessaire d'avoir un minimum de maîtrise de ce langage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z réussi&lt;br /&gt;
&lt;br /&gt;
Mouvement dans l'axe x ajoutée également, attende de rendez-vous avec l’ingénieur R&amp;amp;D pour avoir son retour.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49433</id>
		<title>P20 Projet marionnette déformable interactive</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=P20_Projet_marionnette_d%C3%A9formable_interactive&amp;diff=49433"/>
				<updated>2018-01-31T15:07:25Z</updated>
		
		<summary type="html">&lt;p&gt;Bhagui : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
=== Présentation générale du projet ===&lt;br /&gt;
==== Contexte ====&lt;br /&gt;
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.&lt;br /&gt;
&lt;br /&gt;
==== Description et objectifs ====&lt;br /&gt;
Le projet consistera principalement de deux étapes: &lt;br /&gt;
*La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.&lt;br /&gt;
*Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.&lt;br /&gt;
&lt;br /&gt;
*'''Début Novembre''': Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.&lt;br /&gt;
*'''Début Décembre''': Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.&lt;br /&gt;
*'''Mi-décembre''': Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.&lt;br /&gt;
*'''Début Janvier''': Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2). &lt;br /&gt;
*'''Fin Janvier''': Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X. &lt;br /&gt;
*'''Février''': Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! S38 !! S39 !! S40 !! S41 !! S42 !! S43 !! S45 !! S46 !! S47 !! S48 !! S49 !! S50 !! S51 !! S2 !! S3 !! S4 !! S5 !! S6 !! S7 !! S8 !! S9 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Présentation du projet et objectifs &lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Rédaction du wiki&lt;br /&gt;
| 2&lt;br /&gt;
| 0,5&lt;br /&gt;
| 0,5&lt;br /&gt;
| 2&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 0.5&lt;br /&gt;
| 1&lt;br /&gt;
| 0.5&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Mise-à-jour de la plaque des moteurs (recherche d'améliorations)&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main de nouveau matériel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 1,5&lt;br /&gt;
| 1,5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Préparation de la plaque des moteurs&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Impression et préparations des pièces 3D&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2,5&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| 8.5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Remplacement de l'ancienne plaque des moteurs.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| Installation du logiciel de modélisation Sofa.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main du langage Python.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| LeapMotion Software Developpement Kit.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
===Semaine 38===&lt;br /&gt;
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:&lt;br /&gt;
*Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.&lt;br /&gt;
*L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2). &lt;br /&gt;
*Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.&lt;br /&gt;
*La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:20170923_221605.jpg|Photo 1 : Dispositif contenant la marionnette.&lt;br /&gt;
Fichier:20170923_220540.jpg|Photo 2 : Plaque des moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 39===&lt;br /&gt;
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution. &lt;br /&gt;
&lt;br /&gt;
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs. &lt;br /&gt;
===Semaine 40===&lt;br /&gt;
Durant la première séance de cette semaine j'ai reçu un &amp;quot;ZX gesture sensor&amp;quot;, ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.&lt;br /&gt;
&lt;br /&gt;
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&amp;amp;D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.&lt;br /&gt;
&lt;br /&gt;
===Semaine 41===&lt;br /&gt;
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).&lt;br /&gt;
&lt;br /&gt;
Ensuite j'ai pu discuter avec l’ingénieur R&amp;amp;D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500px&amp;quot; heights=&amp;quot;600px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:design_matrice_moteurs.jpg|Photo 3 : Ma proposition de layout des moteurs.&lt;br /&gt;
Fichier:motor_matrice_2.jpg|Photo 4 : Avancement d'installation des socles moteurs.&lt;br /&gt;
Fichier:motor_matrice_3.jpg|Photo 5 : Résultat finale d'installation des socles moteurs.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&amp;amp;D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.&lt;br /&gt;
&lt;br /&gt;
===Semaine 42===&lt;br /&gt;
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.&lt;br /&gt;
&lt;br /&gt;
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.&lt;br /&gt;
&lt;br /&gt;
===Semaine 43===&lt;br /&gt;
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&amp;amp;D de l'équipe pour réparer l'imprimante et continuer mes tests.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.&lt;br /&gt;
&lt;br /&gt;
===Semaine 45===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #define PINstep 10&lt;br /&gt;
  #define PINdir 8&lt;br /&gt;
  const long int stepspermm = 800;&lt;br /&gt;
  const int periode = 28;&lt;br /&gt;
  long int stepperposition = 0;&lt;br /&gt;
  byte header;&lt;br /&gt;
  unsigned char positions[13] = {&lt;br /&gt;
    0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0&lt;br /&gt;
  };&lt;br /&gt;
  long int steps;&lt;br /&gt;
  void setup()&lt;br /&gt;
  {&lt;br /&gt;
  &lt;br /&gt;
    OCR1A = periode;&lt;br /&gt;
    TCCR1B = TCCR1B &amp;amp; 0b11111000 | 0x12;&lt;br /&gt;
    pinMode (PINdir, OUTPUT);&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
    Serial.begin(115200);    // Open serial communications&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop()&lt;br /&gt;
  {&lt;br /&gt;
    analogWrite(PINstep, periode &amp;gt;&amp;gt; 1);&lt;br /&gt;
    for (long int i = 1; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
      delayMicroseconds(periode);&lt;br /&gt;
    }&lt;br /&gt;
    analogWrite(PINstep, 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Semaine 46===&lt;br /&gt;
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.&lt;br /&gt;
&lt;br /&gt;
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define trigPin 13&lt;br /&gt;
#define echoPin 12&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin (9600);&lt;br /&gt;
  pinMode(trigPin, OUTPUT);&lt;br /&gt;
  pinMode(echoPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long duration, distance;&lt;br /&gt;
  &lt;br /&gt;
  //In order to generate the ultrasound you need to set the Trig on High for 10µs&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
  digitalWrite(trigPin, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trigPin, LOW);&lt;br /&gt;
  &lt;br /&gt;
  // v=340m/s et donc 0.034cm/µs&lt;br /&gt;
  //The echo pin will outuput the time in µs the sound wave travelled back and forth&lt;br /&gt;
  duration = pulseIn(echoPin, HIGH);&lt;br /&gt;
  distance = (duration*0.034/2);&lt;br /&gt;
  &lt;br /&gt;
  /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/&lt;br /&gt;
  //print result&lt;br /&gt;
  Serial.print(distance);&lt;br /&gt;
  Serial.println(&amp;quot; cm&amp;quot;); &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.&lt;br /&gt;
&lt;br /&gt;
===Semaine 47===&lt;br /&gt;
Pour la première séance de cette semaine j'ai nettoyé et installé deux socles moteurs sur la plaque ainsi que lancer l'impression de plusieurs autres pièces nécessaire à la plaque de moteurs. Les impressions 3D n'étaient pas optimale et les pièces avaient des point faible et susceptible à la casse. Malgré cela, j'ai pu utiliser un 3D pen (un stylo avec le même principe de fonctionnement qu'une imprimante 3D mais qui est plus manipulable) pour corriger les pièces et ajouter de la matière (PLA) la où il fallait. Cela m'as permis d'éviter de lancer une encore une longue impression et attendre jusque la fin de ceci. Une fois assez des pièces étaient prête, j'ai pu terminer l'installation des socles moteurs sur la plaque.&lt;br /&gt;
&lt;br /&gt;
J'ai ensuite commencé à remplacer l'ancienne plaque des moteurs représenté sur les photo 1 et 2.&lt;br /&gt;
===Semaine 48===&lt;br /&gt;
Ayant fini l'installation de la nouvelle plaque j'ai aujourd’hui installé les moteurs dans les socles ainsi que connecté la marionnette (corps déformable) en utilisant les fils de pêche.&lt;br /&gt;
&lt;br /&gt;
Pour finir la séance d’aujourd’hui j'ai commencé l’installation du logiciel de simulation SOFA.&lt;br /&gt;
&lt;br /&gt;
La compilation et installation de SOFA étant très longue, j'ai commencé à faire des tutoriels du langage Python. C'est grâce à des scripts Python que les informations du LeapMotion sont récupéré et traité par SOFA. Il est donc nécessaire d'avoir un minimum de maîtrise de ce langage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:sofa_leap.jpg|1000px|thumb|center|Photo 5 : Simulation et acquisition des information avec la Leapmotion.]]&lt;br /&gt;
===Semaine 49===&lt;br /&gt;
Cette semaine j'ai commencé à me familiariser avec LeapMotion SDK. Effectivement c'est cette librairie qui est utilisé pour récupérer les données de la LeapMotion pour ensuite les traiter et décider ce quoi faire par la suite.&lt;br /&gt;
===Semaine 50===&lt;br /&gt;
&lt;br /&gt;
J'ai continué cette semaine la prise en main de la librairie LeapMotion ainsi que la compréhension du code déjà écrit pour ce projet.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi commencé la rédaction de mon rapport mi-parcours.&lt;br /&gt;
&lt;br /&gt;
===Semaine 51===&lt;br /&gt;
&lt;br /&gt;
Continuation de rédaction du rapport et préparation de mi-soutenance. &lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Pourquoi nous allons continuer avec un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Le script de test à faire.&lt;br /&gt;
&lt;br /&gt;
Optimisation!&lt;br /&gt;
&lt;br /&gt;
Leapmotion.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
test de temps de réponse des commandes Herkulex&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Extrait des coordonnées X et Z de la paume par Leapmotion.&lt;br /&gt;
&lt;br /&gt;
Simulation entière.&lt;br /&gt;
&lt;br /&gt;
Mouvement dans axe z reussi&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Bhagui</name></author>	</entry>

	</feed>