RAMBOT

De Learning Lab Environnements Connectés
Révision datée du 19 avril 2024 à 15:10 par BILLAUD Paul (discussion | contributions) (Détection de saisie)
Sauter à la navigation Sauter à la recherche

Présentation

Mission des robots

Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:

  1. L'éclaireur :
    • il assiège les ennemis
    • il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège
    • il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)
  2. Le sauveteur :
    • il reçoit les informations de position des blessés
    • il récupère les blessés et les ramène à la base (hôpital)
  3. Le blindé :
    • il reçoit les informations de position des ennemis
    • il récupère les ennemis et les ramène à la base (prison)

Décomposition des actions élémentaires des robots

Dans l'idéal voici toutes les étapes à réaliser avec les robots:

  1. Les trois robots sont au camp de base
  2. Tant que pas d'obstacles : robot 1 fait sa "ronde" en suiveur de ligne
  3. Détecte un obstacle
  4. Identification blessé / ennemi
  5. Communication avec tous les robots
  6. Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)
  7. Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)
  8. Il attrape l'individu
  9. Retour à la base et dépose de l'individu
  10. Envoie d'un signal au robot 1 pour qu'il se réactive
  11. Envoie l'information à l'utilisateur
  12. On reboucle sur l'étape 2
  13. On atteint le drapeau et c'est gagné

Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.

Décomposition du travail

Tâches à réaliser par ordre de priorité :

  1. Contrôle des moteurs de la plateforme principale et des plateformes secondaires
  2. Odométrie et repérage dans l'espace
  3. Détection de ligne
  4. Asservissement
  5. Détection des cibles
  6. Identification
  7. Communication sans fil entre les robots et avec l'utilisateur
  8. Attrapage de la cible
  9. Interface utilisateur

Contrôle des moteurs

Robot 1

Robot 2 et 3

Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : Fichier:Essai moteurs.zip. Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :

  1. Alimenter la carte Teensy.
  2. Téléverser ce code dans la carte Teensy.
  3. Alimenter les moteurs via une batterie externe.

Ce code contient :

- La déclaration des constantes et variables utiles.
- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.
- La fonction controleMoteur qui calcul l'orientation des roues.
- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.

La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de Robotique mobile : conception, modélisation et commande.

Schema angles 3 roues.png

.

Odométrie

L'odométrie est très complexe à mettre en place. On a donc décidé de trouver des alternatives.


Détection de ligne

On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.

Datasheet : https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf

Code : Fichier:Test ligne.zip

Asservissement de ligne

Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.

Lien entre la carte Teensy et ESP32

Les capteurs de réflexion sont connectés à la carte ESP32. Nos moteurs sont contrôlés par la carte Teensy. Afin, d'envoyer les données mesurés par ces capteurs à la carte Teensy, il est nécessaire de faire le lien via une connexion UART.

Dans notre cas, nous avons utilisé les ports 16 et 17 de l'ESP32 qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. Sur la carte Teensy c'est l'UART1 qui est connecté ; il faut donc utiliser le Serial1.

Sur la carte ESP32, il faut écrire :

void setup() 
{
  // put your setup code here, to run once:
  Serial2.begin(115200); // Initialize serial communication at 115200 baud
}

Puis, dans la fonction concernée :

Serial2.write((int) thetaP); // Envoie du float à la carte teensy


De manière réciproque sur le code de la carte Teensy :

   // send data only when you receive data:
  if (Serial1.available() > 0) {
    // read the incoming byte:
    thetatest = Serial1.read();
  }

Envoie de données

Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à capteurD = analogRead(CAN1); en données d'un octet.

thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;

Codes utilisés

Fichier:AsservissementLigneESP.zip
Fichier:Essai moteur v3.zip

Détection des cibles

La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.

Plusieurs possibilités ont été envisagées :

  1. Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers.
  2. Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).
  3. Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation.
  4. Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).
  5. Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm).

On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles.

On utilise le capteur TCS3200

Datasheet : Fichier:TCS3200 (1).PDF

Identification des cibles

Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.


Datasheet : Fichier:TCS3200 (1).PDF

Code Arduino_Uno : Fichier:Test color sensor 4.zip

Code ESP32 THING : Fichier:Test color sensor esp 1.zip

On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.

Système de Préhension

Capture

Les robots 2 et 3 doivent ramener une cible à leur base

Plusieurs solution ont été envisagées :

  1. Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.
  2. Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.
  3. Une pince : plus stable, nécessite un servo moteur, plus maniable.

On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence. On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.

Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.

On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180°
Code : Fichier:Servo.zip

Détection de saisie

Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.

Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.

Datasheet LED : Fichier:SFH485P.pdf

Datasheet phototransistor : Fichier:OFT-3301.pdf

Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :

Datasheet phototransistor_2 : Fichier:SFH 309 FA.pdf

Capture d'écran 2024-04-19 150732.png

Communication Wi-Fi

Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi.

Connexion à la carte ESP32

La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet.

Voilà le code: Fichier:Connexion wifi.zip

Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.

Teensy :
- Installer le support de la carte dans l'IDE Arduino via ce lien

Interface utilisateur

Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.