Skip to main content

Phase 3 - Programmation du bras robotique

Cinématique d'un bras robot

La cinématique est un domaine de la mécanique qui se concentre sur l’étude des mouvements. Ça tombe bien, le but d'un robot étant de bouger ! L'étude cinématique consiste donc à déterminer les positions, vitesses et accélérations des différentes parties d’un robot, sans prendre en compte les forces qui causent ces mouvements (puissance des moteurs par exemple). Un robot, souvent décrit comme une machine automatisée, peut effectuer des tâches complexes apportant une réelle valeur ajoutée dans divers secteurs.

Notre robot a 4 moteurs, l'objectif est de les actionner pour :

  • Fermer la pince pour saisir un objet
  • Déplacer la pince pour déplacer l'objet
  • Ouvrir la pince pour lâcher l'objet

Les 4 moteurs contrôlent 4 mouvements possibles : 

  • Moteur 1 : Base 
  • Moteur 2 : Coude
  • Moteur 3 : Épaule
  • Moteur 4 : Pince

https://www.youtube.com/watch?v=xQkPjDEbFoU

Attention chaque Servomoteur possède des positions maximums et minimums à bien respecter pour pas que ce dernier ne fonctionne plus.

Voici un tableau qui regroupe ces valeurs si vous l'avez monter comme dans la phase 1 : 

image.png

Pour ouvrir et fermer la pince c'est donc facile, on actionne le moteur 4.

Espace Cartésien : les mouvements de la pince et des objets

Espace articulaire : les mouvements des moteurs

La question principale qu'on se pose c'est comment actionner mes moteurs pour faire bouger ma pince comme je veux ? C'est le modèle cinématique inverse.

On peut aussi se demander : si je bouge mes moteurs à telle position, quelle sera la position de ma pince ? C'est le modèle cinématique direct.

Voici un code mblock qui permet de prendre un objet à une où le coude est à la position 140 et l'épaule à la position 150.

Epaule : Pin 6

Coude : Pin 9

Base : Pin 3 

Pince : Pin 13

Partie 1 :

image.png

Partie 2 :

image.png

Code traduit en Arduino

#include <Servo.h>

Servo monServo1;
Servo monServo2;  // Création de l'objet Servo
Servo monServo3;
Servo monServo4;


void setup() {
    monServo1.attach(3);
    monServo2.attach(6);
    monServo3.attach(9);
    monServo4.attach(13); // Attache le servomoteur à la broche définie

    monServo1.write(0);
    monServo2.write(90);
    monServo3.write(180);
    monServo4.write(90);
}

void loop() {

  delay(1000);
    // Balayage de 0° à 180°
    for (int angle =0; angle <= 90; angle++) {
        monServo1.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =180; angle >= 140; angle--) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =140; angle <= 180; angle++) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle >= 0; angle--) {
        monServo1.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =180; angle >= 140; angle--) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =140; angle <= 180; angle++) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);
}


Sources

Cinématique des robots série :

https://howtomechatronics.com/tutorials/arduino/diy-arduino-robot-arm-with-smartphone-control/ 

https://poppy.discourse.group/t/presentation-dun-travail-de-cinematique-2d-avec-le-robot-poppy-ergo-jr-1ere-s/2611 

https://poppy.discourse.group/t/algorithme-de-cinematique-inverse-applique-a-poppy-inverse-kinematic-algorithm-applied-to-poppy/1582 

https://learn.ros4.pro/fr/theory/ 

https://files.ros4.pro/theorie.pdf 

https://www.youtube.com/watch?v=vKD20BTkXhk 

Robot série à parallélogramme : 

https://www.youtube.com/watch?v=GnrRk9mWv7A 

https://www.youtube.com/watch?v=xQkPjDEbFoU

https://www.youtube.com/watch?v=Z7HWoh_MR1s

https://drive.google.com/drive/folders/1zaOw2QcZatylyqQoVnYhIK7iysyCOY2d

https://www.youtube.com/watch?v=Q9JOKQaIR1w

Un peu complexe :

https://eduscol.education.fr/sti/ressources_pedagogiques/analyse-et-performance-cinematique-dun-robot-bi-articule#fichiers-liens 

https://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/14480/14480-1-robot-bi-articule-doc-ressource.pdf