Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Système d'Évitement d'Obstacles par Intelligence Artificielle (Q-Learning) sur Arduino

Composants et Fournitures

Composant Quantité Notes
Arduino Pro Mini 328 - 5V/16 MHz (SparkFun) 1
Capteur Ultrason HC-SR04 1
Double Driver Moteur L298N (SparkFun) 1
Moteur DC 60 tr/min 2
Roues 4
Fils de liaison 1 Lot
Plaque à souder mini (SparkFun) 1
Batterie Li-Ion 7,2 V 1 Alimentation moteurs
Batterie 9 V + connecteur 1 Alimentation logique
PCB Personnalisé (PCBWay) 1
Interrupteur C&K Série JS 1

Outils Nécessaires

Applications

À Propos du Projet

Robot Évitement d'Obstacles par Apprentissage par Renforcement (Q-Learning)

Objectif : Apprendre au robot à éviter les obstacles en « N » épisodes et converger vers l'action optimale (ici : tourner à droite).

Algorithme : Q-Learning (apprentissage par renforcement sans modèle, hors-ligne).

Principe du Pilotage Moteurs par L298N

Le L298N est un double pont en H permettant de contrôler indépendamment la vitesse (PWM) et le sens de deux moteurs DC.

Système d Évitement d Obstacles par Intelligence Artificielle (Q-Learning) sur Arduino

Mesure de Distance par HC-SR04

Le capteur émet une impulsion ultrasonore (40 kHz) et mesure le temps de retour de l'écho. Distance = (durée × 0,0343) / 2.

Système d Évitement d Obstacles par Intelligence Artificielle (Q-Learning) sur Arduino

Concepts Clés du Renforcement (RL)

Terme Définition dans ce Projet
État (State) Situation du robot. 10 états discrétisés (bien que physiquement 2 : « obstacle loin » / « obstacle près »).
Action 4 actions possibles : 0=AVANT, 1=ARRIÈRE, 2=STOP, 3=GAUCHE. (Droite non implémentée dans le code fourni).
État Suivant (Next State) Résultat de l'action : « SURVÉCU » (retour état initial) ou « CRASHÉ ».
Table Q (Q-Table) Matrice 10×4 initialisée à 0. Stime la valeur « qualité » de chaque (état, action).
État Terminal Inexistant ici : apprentissage continu sans fin d'épisode définie.
Matrice de Récompense Récompenses par (état, action) : AVANT=-10, ARRIÈRE=-2, STOP=-1, GAUCHE=+10 (identique pour les 10 états).
Environnement Monde physique du robot (piste, obstacles).

Hyperparamètres

Algorithme Q-Learning (Politique ε-Greedy)

  1. Initialiser Q(s,a) = 0.
  2. Observer état courant s.
  3. Choisir action a : avec prob. ε → aléatoire (exploration) ; sinon → argmax Q(s,·) (exploitation).
  4. Exécuter a, observer récompense r et nouvel état s'.
  5. Mettre à jour : Q(s,a) ← (1-α)Q(s,a) + α[r + γ·maxa' Q(s',a')].
  6. s ← s' et recommencer.
Système d Évitement d Obstacles par Intelligence Artificielle (Q-Learning) sur Arduino
// Mise à jour Q (équation de Bellman)
Q_OLD = Q_TABLE[S][A];
Q_MAX = MAX(Q_TABLE, NEXT_S);
Q_NEW = (1 - ALPHA) * Q_OLD + ALPHA * (R + GAMMA * Q_MAX);
Q_TABLE[S][A] = Q_NEW;

Phases du Programme

  1. Entraînement (100 épisodes) : le robot explore/exploite, met à jour sa Q-table, ε décroît.
  2. Évaluation : affichage sériel des valeurs Q finales pour vérification.
  3. Test (infini) : politique purement gloutonne (argmax Q) : le robot évite les obstacles sans exploration.

Code Complet (C/C++ pour Arduino)

Afficher le code source (cliquer pour déplier)
/* Obstacle Avoiding Robot using Q-LEARNING
   Auteur : Varun Walimbe
   Algorithme : Q-Learning
*/
////////// PARAMÈTRES MATÉRIEL //////////////////
int TRIG_PIN = 7;
int ECHO_PIN = 8;
int duration;
float distance;
int M1 = 13, M2 = 12, M3 = 11, M4 = 10;  // L298N IN1..IN4
bool Obstacle = false;
int FLAG;

////////// PARAMÈTRES Q-LEARNING ////////////////
float ALPHA = 0.1;      // Learning rate
float GAMMA = 0.5;      // Discount factor
float EPSILON = 0.90;   // Exploration rate
int REWARD;
int EPISODES = 100;
int STATE = 0;
int ACTION = 0;         // 0:AVANT, 1:ARRIÈRE, 2:STOP, 3:GAUCHE
float PROB;
bool ACTION_TAKEN = false;
int NEXT_STATE;
const int STATES = 10;
const int NUMBER_OF_ACTIONS = 4;

// Q-Table 10x4
float Q[STATES][NUMBER_OF_ACTIONS] = {
  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}
};

// Matrice de récompense (identique pour les 10 états)
int REWARDS[STATES][NUMBER_OF_ACTIONS] = {
  {-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10},
  {-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10},{-10,-2,-1,10}
};

float Q_OLD, Q_NEW, Q_MAX;

//////////////// FONCTIONS ROBOT ////////////////
void Forward()  { digitalWrite(M1,LOW);  digitalWrite(M2,HIGH); digitalWrite(M3,LOW);  digitalWrite(M4,HIGH); }
void Backward() { digitalWrite(M1,HIGH); digitalWrite(M2,LOW);  digitalWrite(M3,HIGH); digitalWrite(M4,LOW);  }
void Left()     { digitalWrite(M1,HIGH); digitalWrite(M2,LOW);  digitalWrite(M3,LOW);  digitalWrite(M4,HIGH); }
void Right()    { digitalWrite(M1,LOW);  digitalWrite(M2,HIGH); digitalWrite(M3,HIGH); digitalWrite(M4,LOW);  }
void Stop()     { digitalWrite(M1,LOW);  digitalWrite(M2,LOW);  digitalWrite(M3,LOW);  digitalWrite(M4,LOW);  }

bool Obstacle_Avoider() {
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  duration = pulseIn(ECHO_PIN, HIGH);
  distance = (duration / 2) / 29.1;  // cm
  Obstacle = (distance < 15);
  delay(10);
  return Obstacle;
}

/////////// FONCTIONS Q-LEARNING ///////////////
float RANDOM(float eps) { return random(0,100) / 100.0; }

float DECAY(float param) { return param * 0.98; }

int GET_STATE() { return random(0,10); }  // État simulé (10 états)

float MAX(float Q_Table[][4], int next_s) {
  float maxv = Q_Table[next_s][0];
  for (int i=1;i<4;i++) if (Q_Table[next_s][i] > maxv) maxv = Q_Table[next_s][i];
  return maxv;
}

int ARGMAX(float Q_Table[][4], int s) {
  float maxv = Q_Table[s][0]; int idx = 0;
  for (int i=1;i<4;i++) if (Q_Table[s][i] > maxv) { maxv = Q_Table[s][i]; idx = i; }
  return idx;
}

void Update(float Q_TABLE[][4], int s, int next_s, int a, int R, float lr, float df) {
  Q_OLD = Q_TABLE[s][a];
  Q_MAX = MAX(Q_TABLE, next_s);
  Q_NEW = (1-lr)*Q_OLD + lr*(R + df*Q_MAX);
  Serial.print("Q VALUE: "); Serial.println(Q_NEW);
  Q_TABLE[s][a] = Q_NEW;
}

//////////////// BOUCLE PRINCIPALE //////////////
void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN,OUTPUT); pinMode(ECHO_PIN,INPUT);
  pinMode(M1,OUTPUT); pinMode(M2,OUTPUT); pinMode(M3,OUTPUT); pinMode(M4,OUTPUT);
  randomSeed(analogRead(A0));
  Serial.println("ENTRAINEMENT DANS 5 SEC...");
  delay(5000);
}

void loop() {
  ///// ENTRAÎNEMENT /////
  for (int ep=0; ep

Schéma Électrique

Fichier Fritzing : obstacle_avoiding_robot_using_ai_DcoMCWIOFm.fzz

Remarques & Améliorations Possibles

  • L'action « DROITE » (récompense +10) est définie dans la matrice mais non codée dans Right() ni dans l'exécution — à implémenter pour correspondre à l'énoncé.
  • La discrétisation en 10 états identiques est pédagogique ; un vrai projet utiliserait la distance continue ou des secteurs angulaires.
  • L'absence d'état terminal et la réinitialisation d'ε font de cet apprentissage un processus continu (apprentissage tout au long de la vie).
  • Pour un déploiement réel : ajouter des capteurs latéraux, gérer l'évitement arrière, et sauvegarder la Q-table en EEPROM.

Processus de fabrication

  1. Arrow Electronics lance l'AI Experience Tour avec Intel, Microsoft, Nvidia
  2. Robot mobile évitant les obstacles par vision sur Raspberry Pi
  3. Bosch dévoile une solution de fabrication pilotée par l'IA au salon Hannover Messe
  4. Intelligence artificielle dans le retail : Bénéfices prouvés, pas un effet de mode
  5. Kubernetes propulse les startups IA avec des solutions conteneurisées scalables
  6. Comment l'IA transforme le paysage de l'Internet des objets
  7. L'intelligence artificielle n'est pas encore prête pour la cybersécurité des systèmes de contrôle industriels
  8. L'IA prédit l'avantage quantique : un réseau neuronal prédit le comportement du système
  9. Suivi de la déforestation amazonienne par l'IA