Virtual Robot Arm

Bonjour ! Nous sommes Axel, Baptiste et Kilian, trois étudiant de Peip 2 à Polytech Angers. Nous avons eu pour consigne de choisir un projet que nous essayerions de mener à bien en une centaine d’heure. Notre passion pour l’informatique nous a poussés à choisir “Virtual Robot Arm”. Ce projet consiste à programmer les mouvements d’un bras robot industriel et essayer de rendre l’expérience la plus réaliste et immersive possible. Pour y parvenir, nous pourrons également utiliser la réalité virtuelle !

La Découverte

Dans un premier temps, nous avons dû nous familiariser avec le robot, le logiciel Unity, le langage de programmation. Tout cela constituait des nouveautés pour nous. Nous avons donc passé quelques dizaines d’heures à apprendre comment manipuler l’interface, à prendre en main C#, le langage de programmation que nous avons utilisé et à configurer tous les angles limites du robot à l’aide de la documentation. Ceci ne constituait que les bases de notre projet, que nous nous devions d’acquérir avant de pouvoir commencer à réellement programmer le robot.

Voici quelques exemples de code écrit avec le langage C# :

if (Booleen == true)
        {

            if (FirstGrab < 5)
            {
                ccdik.solver.IKPosition = CibleJaune.position; //Va à la position de la Cible
                FirstGrab += 1;
            }
            Invoke("Grab", 0.06f);//Laisse le temps au robot d'aller vers la target avant de la grab
            //enleve la gravit  de l'objet (s'il en a une)
            if (CibleJaune.GetComponent<Rigidbody>() != null)
            {
                CibleJaune.GetComponent<Rigidbody>().isKinematic = true;
            }
	}

Cette portion de code se trouve dans la partie Update (extrait du code qui se joue 60 fois/s) et correspond à la capture de la boule cible par le robot.

Scripts de base

Une fois les différents outils pris en main, nous avons pu entamer la programmation du robot. L’objectif était de faire en sorte que l’utilisateur puisse contrôler le robot. Nous avons donc implémenter la possibilité de contrôler chacune des articulations du robot à l’aide de deux touches du clavier. Cinq articulations sont contrôlables, il nous a donc fallu configurer dix touches. Chacune des articulations ne peut que pivoter, alors, chaque touche permet un sens de rotation de la pièce concernée.

  • Articulation 1 (Verte) : A-Z
  • Articulation 2 (Bleu foncé) : E-R
  • Articulation 3 (Rose) : T-Y
  • Articulation 4 (Jaune) : U-I
  • Articulation 5 (Bleu clair) : O-P
if ( Input.GetKeyDown(KeyCode.A))
    {
        Part2.GetComponent<Transform>().Rotate(-Vector3.up * 0.5f, Space.World);
    }

Lors de l’appui sur le bouton “A” du clavier, la partie 1 va tourner de 0.5 degré par frame sur l’axe y vertical.

Si configurer les déplacements du bras robot était la première étape, notre projet ne s’arrête pas là. L’objectif principal d’un bras industriel de ce type est la manipulation d’objets de 90 à 180 kilogrammes. Il était donc nécessaire de prévoir une option pour attraper un objet. Dans notre système de capture, l’approche est simplifiée : la partie finale du robot, représentée par la partie nommée “end” du robot, doit simplement avoir la même position que la cible.

Notre script récupère la position de l’objet qu’il veut attraper et la position de la partie “end” du robot. Ensuite le script calcul la distance entre les deux points, si la distance est plus grande que l’allonge du robot, alors le script s’occupant de la capture de la cible ne s’exécutera pas. Si au contraire, la première étape est passée avec succès, le robot ira à la position de la sphère, c’est-à-dire que l’on change la position de la partie “end” par la position de la sphère. En faisant ça tout le bras robot va se déplacer jusqu’à l’objectif, en respectant les limites de rotations fixées précédemment. Il faut ensuite faire en sorte que la sphère reste attachée au robot lorsqu’il se déplace. Pour ce faire nous allons utiliser la technique du parent/enfant. Nous allons dans la hiérarchie de Unity, déplacer la sphère et la mettre en enfant de la partie end . Ainsi, la cible restera solidaire du robot, en nous pourrons bel et bien, attraper, déplacer et relâcher un objet.

Automatisation

Une fois ces programmes de base bien définis, nous avons créé un script permettant d’automatiser les mouvements du robot. L’automatisation est la plus longue et fastidieuse tâche de ce projet. Bien qu’apportant son lot de problèmes, il est une part essentielle de notre simulation. Nous pouvons ainsi voir le robot bouger de manière autonome. Son parcours est le suivant, tout d’abord, grâce au package Final IK (qui permet de faire de la cinématique inverse) il va aller chercher les positions de ses différentes cibles. Une fois les positions (du pavé au sol et de la sphère correspondante) il va se remettre dans sa position initiale. Ensuite il se déplace doucement vers la boule, l’attrape, se met dans sa position de transport et va déposer la boule sur l’endroit prévu. Ce fut un travail assez long puisqu’il nous aura occupés au total entre 20 et 30 heures. Nous sommes très fiers du travail fourni même s’il y a une grande quantité d’améliorations possibles.

Expérience utilisateur et immersion

1 – Ambiance sonore

Pour qu’une simulation soit la plus complète possible, les programmes doivent être fonctionnels évidemment, mais l’expérience utilisateur doit aussi être fluide et immersive. Pour y arriver, nous avons d’abord décidés d’implémenter une ambiance sonore. Un son qui se jouerait lors des mouvements du robot pour simuler le bruit qu’il pourrait produire. Puisque l’activer et le désactiver provoquait une latence qui rendait l’expérience moins fidèle à la réalité, nous avons pris la décision de laisser le son se jouer en boucle, mais avec un volume nul, et n’augmenter le volume que lorsqu’au moins une des articulations effectuent une rotation. Voici le son que nous avons implémenté :

Il s’agit d’un court extrait de sample que nous avons coupé et mis en boucle pour avoir le son le plus continu possible.

2 – Réalité Virtuelle

La réalité virtuelle est l’apogée de la simulation réaliste. Nous avons alors, autant que possible essayé de comprendre et maîtriser cet outil afin de rendre notre expérience la plus fluide et conforme possible. Étant parfaitement étranger à cette nouvelle technologie, nous avons eu besoin de M.Richard pour nous y initier, lequel nous a fourni un script C# dans lequel se trouvent les bases pour coder en VR. Il y a par exemple la connexion du casque VR et de ses manettes, la détection des inputs des manettes, etc…

En s’appuyant sur cette aide, nous avons adapté tous nos anciens scripts pour qu’ils puissent fonctionner avec le matériel VR. C’est-à-dire plus concrètement que nous avons changé les clics du clavier par le clic d’un bouton ou le déplacement d’un joystick.

Voici les contrôles que nous avons finalement utilisés :

Nous avons en somme pu développer de nombreuses compétences durant ces mois de travail. Ainsi, nos capacités de développement, de gestion du temps et du stress s’en retrouvent grandement améliorées. Nous pouvons donc dire qu’il nous a préparé aux défis qui nous seront imposés dès l’année prochaine. Il a également été bénéfique, pour chacun de nous, vis-à-vis de notre projet professionnel nous dirigeant vers certaines spécialités ou non. Enfin nous tenions à remercier nos professeurs encadrants, P.Richerd et E.Richard pour l’aide qu’ils ont su nous apporter tout au long de la réalisation du projet ainsi que Polytech Angers de nous avoir offert cette opportunité.

Merci pour votre lecture, en espérant avoir réussi à attiser votre curiosité ! 

Axel WEIL

Baptiste GUICHETEAU

Kilian CHAMPIN