Robot Centaure

De Wiki d'activités IMA
Révision datée du 16 mars 2013 à 13:26 par Dribreau (discussion | contributions) (La Kinect)

Introduction

Etude du robot

Phase de l'inventaire matériel

Dès la première séance nous avons vu que les batteries du robot étaient hors d'usage. Nous avons donc noté les références et demandé à Polytech'Lille de passer la commande de nouvelles batteries, afin de ne pas être bloqué par le problème de l'alimentation trop longtemps. Le robot nécessite également de nombreuses réparations, vu le temps d'inactivité de celui-ci, pour qu'il soit de nouveau utilisable. Nous allons enlever les capteurs qui sont jugés inutiles à la réalisation de notre projet, et recâbler les capteurs essentiels.


Résumé du matériel à acheter:

- 2 batteries 12V et 24Ah.

- Shield Sensor v4 pour Arduino.

- Connecteurs de type FUTABA.

- Gaine thermorétractable.


Résumé des changements à envisager :

- Nettoyage total du robot.

- Câblage des capteurs avec des câbles fins.

- Réparation des supports des capteurs endommagés.


Robot Centaure

L'inventaire du travail à réaliser, constaté à la première séance

- Réparation de certains supports de capteurs.

- Recâblage des capteurs et actionneurs.

- Faire un bilan des éléments à acheter pour avoir une solution de câblage propre.

- Choisir et programmer un microcontrôleur permettant d'être évolutif (choix d'un Arduino Mega).

- Trouver une solution viable et propre de connectique sur l'Arduino.

- Réaliser une carte de convertion PWM -> Tension pour le contrôle des moteurs (moteurs contrôlés en tension). Utilisation possible du logiciel PSIM pour les tests.


intérieur du robot Centaure

Bilan des séances

1er et 2ème séances

La Kinect

Nous avons dans un premier temps pris en main la bibliothèque (Freenect) permettant de gérer la Kinect. Nous avons commencé par analyser et modifier un exemple de programme livré avec la bibliothèque (glview.c).

Nous avons toutefois relevé un problème inhérent à la Kinect : la projection des infrarouge projette des ombres sur l'arrière plan. Ceci risque de posé des problèmes pour l'algorithme de décision de la trajectoire. Un problème similaire est observé sur les surfaces vitrées.

Notre première tâche a donc était de développer un premier algorithme permettant de récupérer ces zones d'ombres.

Nous avons pu ensuite jeter les premières base de l’algorithme de décision de la trajectoire.

Le robot

Nous avons, lors de la première séance, examiné le robot pour comprendre son fonctionnement. A partir de là, nous avons remarqué que le changement des batteries était notre priorité, vu l'état dans lequel celles-ci se trouvaient. Nous avons donc tout démonté pour prendre les références et en commander de nouvelles. Lors de la seconde scéance, nous avons listé les éléments à changer pour que le robot soit fonctionnel. Nous devons donc :

- Refaire le câblage des capteurs

- Nous avons choisi un Arduino pour réaliser la liaison Capteur / Actionneur ainsi que la liaison avec le PC. Le choix d'un Arduino Méga est la solution qui semble la plus adaptée, afin de rendre le robot évolutif. Sinon le nombre d'entrées / sorties risque d'être un élément bloquant, pour l'évolution du projet.


Nous avons aussi réfléchi à la nouvelle connectique, qui sera de type prise "JR" utilisée dans le modélisme. Chaque prise correspondra à un capteur. Pour ce qui est de l'Arduino, nous voulons lui ajouter un Shield "Sensor" qui permet une gestion de la connectique des capteurs beaucoup plus simple. Il en existe 2 modèles, un limité à 300mA pour ce qui est de l'alimentation (ce qui peut être suffisant pour les capteurs) et un avec une alimentation externe permettant l'ajout de puissance. N'ayant pas besoin de puissance pour l'envoi ou la réception de signal nous choisirons la première version.

Connectique choisie
Shield Arduino facilitant la connectique

3ème et 4ème séances

La Kinect

Nous avons finis l'algorithme permettant de "reconstruire" les zones d'ombres.

L'algorithme que nous avons confectionné est relativement simple : il balaye l'image ligne par ligne, puis à chaque fois qu'il détecte une ombre il se procure la valeur de la profondeur à gauche et à droite de l'ombre. La valeur la plus lointaine sera utilisé pour remplir l'ombre, ce qui correspond à une bonne approximation.

Voici un comparatif sans et avec l’algorithme de récupération des ombres :

Sans récupération des ombres. Les 3 lignes rouges délimitent les zones en dehors du champs de considération du robot.
Avec récupération des ombres



Nous pouvons constater que l'image ainsi obtenu n'est pas très esthétique, mais cela permettra à l’algorithme de décision de la trajectoire de travailler sur des valeurs de profondeurs quasiment correcte. De plus, la simpliciter de l'algorithme permettra de ne pas utiliser trop de ressource processeur.


Nous avons également quasiment finalisé l'algorithme de décision de la trajectoire. Tout d'abord, il faut savoir que l'algorithme ne travail que sur une certaine zone de l'image. En effet un objet situé trop à gauche (ou trop en haut ou à droite) ne gênera pas le robot. Du coup seul une partie du champ de vision de la Kinect est utilisé. Pour régler ces constantes nous avons afficher 3 lignes délimitant l'espace de considération du robot.

L’algorithme en lui même consiste à calculer la moyenne des profondeurs de la partie gauche et droite de l'image. Ensuite, nous calculons la différence entre ces 2 valeurs. Avec cette différence nous pouvons discerner 3 cas :

  • différence < -C => tourner à gauche
  • -C <= différence <= C => continuer tout droit
  • différence < -C => tourner à droite

(avec C une constante)

Par ailleurs, la décision de la trajectoire est prioritairement influencé par la présence d'objet très proche :

  • Si un objet très proche est détecter à gauche et à droite le robot s'arrêtera
  • Si un objet très proche est détecter à gauche le robot ira à droite dans tout les cas
  • Si un objet très proche est détecter à droite le robot ira à gauche dans tout les cas

Le robot

La 3ème séance avait un but purement informatif et explicatif pour nous. Nous avons pu rencontrer notre tuteur pour ce projet, Mr. LITWAK, afin de relater nos premières impressions, notre envie commune de voir le Centaure se mouvoir dans un premier temps, et remplir le cahier des charges qu'il nous est demandé de remplir par la suite. Nous avons évoqué avec lui le choix que nous avions décidé de prendre pour l'évolution de notre projet (solution Shield + Arduino Mega), ainsi que notre volonté de rendre le tout le plus esthétique possible (utilisation de nappes envisagées mais pas encore confirmée). Nous définissons ensemble un plan de route :

1) Dégager les élèments inutiles.

2) Restaurer l'alimentation et refaire les câblages nécessaires.

3) Être capable de contrôler la direction de notre robot (asservissement en vitesse et en position nécessaires).

4) Pouvoir joindre le côté commande et le côté Kinect.


Une boîte à outils nous est fournie pour nos travaux sur le Centaure, ainsi que toute la documentation nécessaire au bon déroulement de notre projet (la documentation sur les capteurs SHARP avant et arrière en particulier).

La 4ème séance consiste à vider le Centaure de ces composants, dresser le bilan des éléments utiles et de ceux dont l'utilisation n'est pas envisagée.

Au final, lors de cette semaine de projet, nous avons défini notre plan d'action, commencé le gros oeuvre sur le Centaure, puis noté les éléments de câblage à utiliser lorsque la phase de nettoyage sera terminée. Nous attendons pour la reprise l'arrivée des 2 batteries nécessaires à l'alimentation du robot, le Shield sensor ainsi que les connecteurs FUTABA/JR (les deux étant compatibles).

Nous avons posé les bases du système et imaginé l'architecture final du système. Représenté par la figure ci-dessous ométant certaines parties servants de liaisons.


Schéma simplifié du système

5ème, 6ème et 7ème séances

La Kinect

L'algorithme de décision de la trajectoire par la Kinect étant fait, nous nous somme pencher sur la capacité des PC embarqués disponible à pouvoir éxécuter le code de la Kinect. Les premiers essais ce sont révélé infructueux, les 2 PC embarqués disponible ne sont pas assez puissant pour éxécuté le code.

Nous nous sommes alors lancer dans une phase d'optimisation importante du code de gestion de la Kinect. A COMPLETER

NOUS AVONS ALORS ACHETER UN PC, A COMPLETER.

Carte mère : ASRock H61M-ITX MAJ du BIOS obligatoire

Le Robot

Nous avons reçu, pendant les vacances, les éléments que nous avions commandé, et qui étaient nécessaires au bon déroulement de notre projet. Ainsi, le Shield Sensor pour Arduino, ainsi que les connecteurs, nous sont parvenus. Nous avons également reçu les deux batteries (12V, 24Ah), pour venir en remplacement des anciennes, qui étaient totalement Hors-Service. Ces séances de la semaine nous ont permis de pouvoir (re)faire les câblages de tous nos capteurs (4 capteurs avant SHARP 2Y3A003 - portée de 40 à 300 cm ; 2 capteurs arrières SHARP 2Y0A02 - portée de 20 à 150 cm) avec les nappes fournies, de manière à les brancher directement sur le Shield. Nous avons également installé les nouvelles batteries, et ainsi remettre en état de marche l'alimentation du robot (l'écran du Centaure s'allume). Grâce à un mini-programme, nous avons pu vérifier le bon état des capteurs. Ainsi, 3 des capteurs avant et 1 capteur arrière répondent convenablement, les deux autres capteurs normalement utlisés étant HS. Un autre programme a été mis au point sur l'Arduino, demandant une simple marche avant au Centaure. Nous vérifierons son fonctionnement la semaine prochaine, tout en nous penchant également sur le rétablissement de l'arrêt d'urgence et du coupe-batterie, primordiaux avant de faire se mouvoir le robot.


Connecteurs des capteurs IR


8ème, 9ème et 10ème séances

La Kinect

INCORPORATION DE LA GESTION DE LA KINECT AU PROJET EXISTANT

Le Robot

Commande 4 relais + 2 IR

Compréhension fonctionnement variateur et comment déjouer les sécurité

1 test d'une roue OK

Test avec programme AV/ARR/AR OK

Commande des 2 roues OK

Test sur plaque LABTEC avec relay (expliquer pk pas transistor)

Conception de la carte



Schéma de principe de la carte de commande des variateurs


PCB de la carte de commande


Vu 3D


11ème séances

La Kinect

Le Robot

Test du code de l'Arduino pour voir les fonctions de base.

Manque 1 relais donc pas marche arrière possible.

Principale fonction OK

Il faut rajouté un indicateur de niveau de batterie. Sera conçu de la manière suivante : Relais + Pont diviseur de tension (le relais permet de désactiver le pont. Ainsi nous consommons moins)

PCB de la carte du capteur batterie


PCB 3D de la carte du capteur de batterie

Etape importante

Petit récapitulatif à mi-projet:

- Reste a définir les éléments de communication PC -- Arduino

- Intégrer un régulateur de type FLOU dans l'Arduino

- Faire la carte Relais

- Créer la "mini-carte" permettant l'indication du niveau de batterie