Proj-2011-2012-BrasRobotiqueHandicap



Enseignant: Olivier Richard

Etudiants:FALL Yacine (Chef de projet), LU Xiao, NICOLACCINI Mickaël , PRAK Soriya

Début du projet le 16/01/2012

Assemblage du robot

Rencontre avec les membres de l'équipe le 17 et le 18 pour monter le robot

Semaine du 23/01/2012

Configuration et Paramétrage du robot

Après avoir rassemblé les pièces comme indiqué sur le site de lynxmotion.com, nous l'avons configuré pour pouvoir effectuer des tests avec le logiciel fourni. De ce fait, le robot fonctionne et il est possible d'envoyer des commandes.

Semaine du 30/01/2012

La mise en route du bras robotique étant terminée, nous allons commencer le projet.

Le but de notre projet est de développer un bras robotique capable d'exécuter une série de mouvements à partir de marqueurs.Pour ce faire, nous nous répartissons en deux sous-groupes: Multimédia et Système.

Système
Objectif 0 : Mise en place de l'environnement ROS(Robot Operating System) et Découverte du robot (par là, on entend le fonctionnement des servo moteurs et quels sont les commandes qui permettent de les manipuler en ligne de commande...)

Objectif 1 : Manipulation du robot avec les touches du clavier

Objectif 2 : Etablissement de trajectoire et Cinématique inverse

Objectif 3 : Manipulation du bras avec les données "obtenues" avec la reconnaissance

Objectif 0
Mise en place de l'environnement ROS(Robot Operating System) et Découverte du robot (par là, on entend le fonctionnement des servo moteurs et quels sont les commandes qui permettent de les manipuler en ligne de commande...)

ROS

Nous avons mis l'environnement ROS pour la virtualisation du robot et pouvoir faire des tests sans que le robot soit présent physiquement. Cependant après avoir épluché plusieurs tutos et passé environ 6h dessus, nous avons conclu qu'il serait préférable de commencer le projet avec les environnements que nous maitrisons. En effet ROS regroupe un ensemble de packages qu'il faut comprendre et savoir utilisé ce qui n'est certes pas chose impossible mais nécessite un temps d'apprentissage tant soit peu. Dans le emps qui nous est imparti pour réaliser ce projet, il est préférable d'y revenir si le temps nous le permet à la fin pour exploiter les propriétés qui nous sont fournies avec cet environnement.

Fonctionnement des servo Cette partie est assez facile car toutes les informations sont fournis avec le logiciel.

Objectif 1 : Manipulation du robot avec les touches du clavier'''
Pour réaliser cet objectif, nous avons coder en C++ avec Visual express(version open source). Pourquoi Visual? D'abord parce que nous avons rencontrer quelques problèmes pour faire fonctionner nos ports série quand on est sous Linux. En effet, nous n'arrivions pas à écrire sur un port choisi malgré la configuration du port avec la structure termios. Toujours dans un souci d'avoir rapidement un prototype qui tourne, nous avons décidé pour le moment de coder sous windows avec Visual avec la librairie windows.h beaucoup plus facile à manier. Maintenant qu'on arrive à manipuler le robot sans le logiciel fourni, nous migrons le code sous Linux. Notre problème étant que le port est bien ouvert, le buffer chargé mais le robot ne bouge toujours pas. Ce qui nous amène à la conclusion que c'est l'écriture qui pose problème.

Objectif 2 : Etablissement de trajectoire et Cinématique inverse
L'un des problèmes assez complexe de notre projet est la résolution de la cinématique inverse. Pour ce faire, nous avons décidé d'ignorer l'un des servo. Ce qui fait que nous avons maintenant 3 servo à prendre en compte. A première vue, celà parait simple, il s'agit de connaître la position de l'objet et de bouger le bras pour aller le chercher. Mais en réalité ça ne l'est pas. - il est possible d'avoir plusieurs solutions (voir fig) - les équations à résoudre sont non-linéaires (ici 3 inconnues et 2 équations)

Multimédia
Objectif 0 : Apprentissage de C++

Objectif 1 : Utilisation d'OpenCv pour la reconnaissance de forme

Objectif 2 : Apprentissage de l'utilisation des marqueurs pour les objets à manipuler

Objectif 3 : Localisation des objects à manipuler

Objectif 4 : Synthèse

Semaine du 23/01

Durant cette séance nous avons installé le logiciel, fourni avec le bras, permettant de contrôler ce dernier. L’installation a été laborieuse à cause d’un problème de compatibilité avec les ports usb de nos machines, il nous fallait chercher un driver permettant la connexion. Une fois cela fait, nous avons manipulé le robot et tenté quelques manipulations en utilisant les codes binaires du bras.

Semaine du 30/01 et du 6/02

Nous avons décomposé le projet en 2 tâches majeures : la reconnaissance de forme et la manipulation du bras. La reconnaissance de forme est traitée principalement par le binôme multimédia. La librairie Open CV est tout indiqué pour ce genre de tâche. Nous avons trouvé cette librairie pour le langage C++, celle pour le langage java est expérimentale. Nous avons donc consacré un certains temps à l’apprentissage du C++.

Semaine du 20/02, 27/02, 05/03 Après avoir appris le C++, nous avons commencé à aborder OpenCV et à définir quel serait le marqueur, que devra faire notre programme de reconnaissance de forme et comment. Notre idée de départ était de créer un marqueur ayant une forme bien précise, notre programme devrait alors le rechercher dans l’image dispensée par la caméra. Nous avons effectué des recherches sur le sujet et avons consulté des sites offrant des tutoriels sur cette librairie. Pour reconnaitre une forme précise les méthodes les plus efficaces semblent être la transformée de Hough ou le Harrtraining. Ces techniques sont assez complexes, nous avons donc opté pour une autre solution plus simple : reconnaitre une couleur. Nous avons mis du temps à coder cette fonctionnalité car nous ne sommes pas familier d’OpenCV, nous avons passé beaucoup de temps sur les tutoriels. Au final, notre programme est capable de reconnaitre une couleur indiqué au préalable par l’utilisateur, selon la position de cette couleur dans l’image, le programme retourne un ordre qui sera envoyé au robot. Ces ordres sont implémentés par le binôme de système. Ce programme permet de positionner le robot face à l’objet à saisir. Le but étant dans un premier temps de mettre dans un même plan vertical, le bras et l’objet (marqueur).

La deuxième étape consiste à faire avancer le bras à la rencontre de l’objet. Pour cela nous utilisons la cinématique inverse, qui est implémenté par le binôme système. Pour appliquer la cinématique inverse il est nécessaire de connaitre la distance entre le bras et l’objet, cette partie est traité par les multimédias. La solution qui nous a paru la plus évidente était la triangulation, mais elle nécessite 2 caméras, or le bras ne supporterait pas le poids de 2 caméras. Nous avions pensé à utiliser le théorème de Thalès mais il nous manquait plusieurs donnés pour pouvoir l’appliquer.

Semaine 12/03

Après entretien avec notre tuteur, nous avons exploré 2 nouvelles pistes pour le calcul de la distance : effectuer une triangulation avec une caméra en prenant 2 image décalées avec la même caméra ou utiliser le nombre de pixel représentant l’image pour calculer la distance (en utilisant le théorème de Thalès). Nous avons creusé la deuxième solution et nous avons trouvé plusieurs problèmes:

-nous ne pouvons compter le nombre de pixel codant notre marqueur car selon la luminosité, certaines parties changent plus ou moins de ton et ne sont donc pas reconnu par le programme. Ce dernier fonctionne car le marqueur est assez large (3 ou 4 cm).

Nous analysons actuellement la seconde solution.

Objectifs communs

 * Fusion des deux parties (Système+Multimédia)
 * Action et mouvement préprogrammés