Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

KI-gestütztes Hindernisvermeidungssystem mit Arduino und Ultraschallsensoren

Komponenten und Zubehör

Komponente Menge Hinweise
SparkFun Arduino Pro Mini 328 - 5V/16MHz 1
Ultraschallsensor HC-SR04 1
SparkFun Dual H-Bridge Motor Treiber L298 1
DC Motor (60 RPM) 2
Räder 4
Jumper-Kabel 1
Lötbare Steckplatine (Mini) 1
Li-Ion Akku 7,2 V 1
9 V Blockbatterie 1
9 V Batterieclip 1
PCBWay Custom PCB 1
C&K Switches JS Series Schalter 1

Benötigte Werkzeuge

Apps und Online-Dienste

Projekt: Hindernisvermeidender Roboter mit KI / Reinforcement Learning

Problemstellung

Ziel: Der Roboter soll in „N“ Episoden lernen, Hindernissen auszuweichen und die optimale Aktion (hier: „Rechts“) zu erlernen.

Verwendeter Algorithmus: Q-Learning

Wie der L298N zwei DC-Motoren antreibt

KI-gestütztes Hindernisvermeidungssystem mit Arduino und Ultraschallsensoren

Wie der HC-SR04 Abstand misst

KI-gestütztes Hindernisvermeidungssystem mit Arduino und Ultraschallsensoren

Wichtige Begriffe im Reinforcement Learning

  1. STATE (Zustand): Situation des Roboters. Hier zwei grundlegende Zustände: 1. Kein Hindernis nah, 2. Hindernis vorne. (Im Code 10 Zustände für komplexere Umgebung.)
  2. ACTION (Aktion): In Zustand 2 vier mögliche Aktionen: FORWARD, BACKWARD, LEFT, STOP. In Zustand 1 nur FORWARD.
    int ACTIONS = [0,1,2,3];
    // 0 = FORWARD, 1 = BACKWARD, 2 = STOP, 3 = RIGHT
    
  3. NEXT STATE (Folgezustand): Zustand nach der Aktion. Entweder „CRASHED“ oder „SURVIVED“ (Startzustand).
  4. Q-TABLE / Q-MATRIX: Tabelle mit Zuständen (Zeilen) und Aktionen (Spalten). Initial 0,0. Unerwünschte Aktionen auf -1,0 setzen.
    float Q[10][4] = {{0,0,0,0}, ...};
    
  5. TERMINAL STATE: Nicht vorhanden – Roboter lernt kontinuierlich.
  6. REWARD MATRIX: Belohnung für Aktionen. Positiv für gut, negativ für schlecht.
    int REWARDS[10][4] = {{-10,-2,-1,10}, ...};
    // FORWARD=-10, BACKWARD=-2, STOP=-1, RIGHT=+10
    
  7. ENVIRONMENT (Umgebung): Die Welt des Roboters (hier der Parcours).

Hyperparameter

Q-Learning Algorithmus

  1. Q-Tabelle initialisieren (hier 0,0).
  2. Aktuellen Zustand s beobachten.
  3. Aktion a wählen (ε-greedy Policy): Mit Wahrscheinlichkeit ε zufällige Aktion (Exploration), sonst beste Aktion aus Q-Tabelle (Exploitation).
  4. Aktion ausführen, Belohnung r und neuen Zustand s' beobachten.
  5. Q-Wert aktualisieren: Q_new = (1-α)*Q_old + α*(r + γ*max(Q(s',a'))) (Bellman-Gleichung).
  6. Zustand = neuer Zustand, wiederholen.
KI-gestütztes Hindernisvermeidungssystem mit Arduino und Ultraschallsensoren
// Epsilon-Greedy Policy
PROB = RANDOM(EPSILON);
if (PROB <= EPSILON) { ACTION = random(0,4); FLAG = 2; } // Explore
else { ACTION = ARGMAX(Q, STATE); FLAG = 2; } // Exploit

// Q-Update
Q_OLD = Q_TABLE[S][A];
Q_MAX = MAX(Q_TABLE, NEXT_S);
Q_NEW = (1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX);
Q_TABLE[S][A] = Q_NEW;

Funktionsvideo

Siehe Video im Originalprojekt.

Arduino Code (Q-Learning)

/* Obstacle Avoiding Robot using Reinforcement Learning / AI
   Author: Varun Walimbe
   Algorithm: Q-Learning
   Hardware: Arduino Pro Mini, HC-SR04, L298N, 2x 60 RPM DC Motoren
*/
////////// ROBOT HARDWARE PARAMETER //////////
int TRIG_PIN = 7;
int ECHO_PIN = 8;
int duration;
float distance;
int M1 = 13, M2 = 12, M3 = 11, M4 = 10;
bool Obstacle = false;
int FLAG;

////////// Q-LEARNING PARAMETER //////////
float ALPHA = 0.1;
float GAMMA = 0.5;
float EPSILON = 0.90;
int REWARD;
int EPISODES = 100;
int STATE = 0;
int ACTION = 0;
float PROB;
bool ACTION_TAKEN = false;
int NEXT_STATE;
const int STATES = 10;
int ACTIONS[4] = {1,2,3,4};
const int NUMBER_OF_ACTIONS = 4;

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}
};

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}
};

////////// Q-LEARNING UPDATE PARAMETER //////////
float Q_OLD, Q_NEW, Q_MAX;

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));
  STATE = 0;
  Serial.println("TRAINING STARTET IN 5 SEKUNDEN:");
  delay(5000);
}

// Roboter-Bewegungsfunktionen
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;
  Obstacle = (distance < 15);
  delay(10);
  return Obstacle;
}

// Q-Learning Hilfsfunktionen
float RANDOM(float EXPLORATION_PARAMETER) {
  float RANDOM_VARIABLE = random(0,100);
  return RANDOM_VARIABLE/100;
}
float DECAY(float PARAMETER) { return PARAMETER * 0.98; }
int GET_STATE() { return random(0,10); }

float MAX(float Q_Table[][4], int NEXT_S) {
  float MAX_VALUE = 0;
  for (int b=0; b<=3; b++) {
    if (Q_Table[NEXT_S][b] > MAX_VALUE) MAX_VALUE = Q_Table[NEXT_S][b];
  }
  return MAX_VALUE;
}
int ARGMAX(float Q_Table[][4], int S) {
  float MAX_VALUE = 0; int MAX_INDEX = 0;
  for (int u=0; u<=3; u++) if (Q_Table[S][u] > MAX_VALUE) { MAX_VALUE = Q_Table[S][u]; MAX_INDEX = u; }
  return MAX_INDEX;
}
void Update(float Q_TABLE[][4], int S, int NEXT_S, int A, int ACTIONS[], int R, float LEARNING_RATE, float DISCOUNT_FACTOR) {
  Q_OLD = Q_TABLE[S][A];
  Q_MAX = MAX(Q_TABLE, NEXT_S);
  Q_NEW = (1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX);
  Serial.print("Q VALUE: "); Serial.println(Q_NEW);
  Q_TABLE[S][A] = Q_NEW;
}

// HAUPTSCHLEIFE
void loop() {
  // TRAINING
  for (int I=0; I

Schaltplan

Fritzing-Datei: obstacle_avoiding_robot_using_ai_DcoMCWIOFm.fzz

Herstellungsprozess

  1. Arrow Electronics startet AI Experience Tour mit Intel, Microsoft, Nvidia
  2. Visionsbasierter Hindernis-vermeidender Mobiler Roboter auf Raspberry Pi
  3. Bosch stellt KI‑gestützte Fertigungslösung auf der Hannover Messe vor
  4. Künstliche Intelligenz im Retail: Bewiesene Vorteile, kein Hype
  5. Kubernetes befähigt KI-Start-ups mit skalierbaren, containerisierten Lösungen
  6. Wie KI die Internet-of-Things-Landschaft transformiert
  7. Künstliche Intelligenz noch nicht bereit für Industrial-Control-System-Cybersicherheit
  8. KI sagt Quanten-Vorteil voraus: Neuronales Netz prognostiziert Systemverhalten
  9. KI-gestützte Verfolgung der Entwaldung im Amazonas
  10. KI-gestützte Robotik: Spitzenklasse intelligenter Maschinen