KI-gestützter Linienfolger-Roboter auf Arduino Nano Basis
Komponenten und Zubehör
| Bauteil | Menge |
|---|---|
| Arduino Nano | 1 |
| Bluetooth RF Transceiver (Master/Slave, z. B. HC-05/06) | 1 |
| IR-Reflexionssensor-Modul (5-Kanal-Array für PID) | 1 |
| 2× Zusätzliche IR-Sensoren (Links/Rechts für Kreuzungserkennung) | 2 |
| 2× Continuous Rotation Servos (Antrieb) | 2 |
| 4,8 V Akku-Pack (z. B. 4× NiMH AA) | 1 |
Software
- Arduino IDE
- Bibliotheken:
Servo.h,SoftwareSerial.h(Bluetooth)
Projektbeschreibung
Motivation
Nach einem Pick-&-Place-Roboter sollte ein KI-basierter Linienfolger entstehen – „Test meiner Skills auf fortgeschrittenem Niveau“. Einfache Linienfolger nutzen PID; hier kommt Maze-Solving mit „Left-Hand-Rule“ und Pfadoptimierung hinzu.
Warum KI bei Linienfolgern?
KI ermöglicht Robotern, reale Probleme (Kreuzungen, Sackgassen, Labyrinthe) autonom zu lösen. Anwendungen: Fertigungsstraßen, autonome Shuttle-Busse. Dieser Prototyp demonstriert die Grundlagen: Sensorfusion, Zustandsmaschine, Pfadlernen & -optimierung.
Sensorkonfiguration
5 PID-Sensoren (LFS0–LFS4) – digital, erkennen schwarze Linie auf weiß. Mittiger Sensor auf Linie = HIGH (1). Typische Muster:
10000 11000 01000 01100 00100 00110 00010 00011 00001 00000 11111
2 Laterale Sensoren (Far-Left, Far-Right) – analog, erkennen Abzweigungen links/rechts außerhalb der Hauptlinie. Schwellenwert THRESHOLD = 150 (anpassbar).
Algorithmus: Left-Hand-Rule Maze Solving
Prinzip
Linke Hand an der Wand entlang: An jeder Kreuzung links abbiegen, wenn möglich; sonst geradeaus; sonst rechts; sonst Umkehr (Dead End). Führt garantiert zum Ziel (nicht notwendigerweise kürzester Weg).
Kreuzungstypen & Aktionen (nach Left-Hand-Rule)
| Kreuzung | Aktion |
|---|---|
| Kreuz (4 Wege) | Links |
| T-Kreuzung | Links |
| Nur Rechts | Rechts |
| Nur Links | Links |
| Gerade oder Links | Links |
| Gerade oder Rechts | Geradeaus |
| Sackgasse | 180° Wende |
| Ziel (Ende) | Stop |
Erkennungsstrategie: „Extra Inch“
Bei Linienende (alle 5 PID-Sensoren HIGH = CONT_LINE) oder Abzweig (lateraler Sensor triggert) fährt der Roboter ein kurzes Stück weiter (extraInch = 200 ms), liest Sensoren neu ein und klassifiziert die Situation eindeutig.
Software-Architektur (Modular)
- robotDefines.h: Pin-Definitionen, Modi (STOPPED, FOLLOWING_LINE, NO_LINE, CONT_LINE, RIGHT_TURN, LEFT_TURN), PID-Parameter (Kp, Ki, Kd), Pfad-Array
path[100](L, R, S, B). - sensorFunctions:
readLFSsensors()liest 5 Digital- + 2 Analog-Sensoren, setztmodeunderrorfür PID. - motorFunctions: Servo-Steuerung per
writeMicroseconds()(1500 = Stopp). PID-Regelung:leftSpeed = 1500 - (base+adj) - PIDvalue,rightSpeed = 1500 + base - PIDvalue. Funktionen:motorStop(),motorForward(),motorTurn(dir, deg),runExtraInch(),goAndTurn(dir, deg). - generalFunctions: Bluetooth-Kommando-Parser (manuelle Steuerung, PID-Tuning per BT), LED-Blink, Pfad-Vereinfachung (
simplifyPath(): LBL→S, LBS→R, RBL→B, SBL→L, etc.). - main (RoBot_Maze_Solve_2): Zwei Phasen:
- Erster Durchlauf (Exploration):
mazeSolve() folgt Linie, erkennt Kreuzungen per „Extra Inch“, speichert Aktionen inpath[], vereinfacht online. Stoppt bei Ziel (mazeEnd()). - Zweiter Durchlauf (Optimierung):
mazeOptimization() fährt den gelernten, vereinfachten Pfad (path[]) ohne Erkundung – maximal schnell.
- Erster Durchlauf (Exploration):
Code-Highlights
PID-Berechnung
void calculatePID() {
P = error;
I = I + error;
D = error - previousError;
PIDvalue = (Kp*P) + (Ki*I) + (Kd*D);
previousError = error;
}
Zustandsmaschine (Exploration)
void mazeSolve(void) {
while (!status) {
readLFSsensors();
switch (mode) {
case NO_LINE: motorStop(); goAndTurn(LEFT, 180); recIntersection('B'); break;
case CONT_LINE: runExtraInch(); readLFSsensors();
if (mode != CONT_LINE) { goAndTurn(LEFT, 90); recIntersection('L'); }
else mazeEnd(); break;
case RIGHT_TURN: runExtraInch(); readLFSsensors();
if (mode == NO_LINE) { goAndTurn(RIGHT, 90); recIntersection('R'); }
else recIntersection('S'); break;
case LEFT_TURN: goAndTurn(LEFT, 90); recIntersection('L'); break;
case FOLLOWING_LINE: followingLine(); break;
}
}
}
Pfad-Vereinfachung
void simplifyPath() {
if (pathLength < 3 || path[pathLength-2] != 'B') return;
int totalAngle = 0;
for (int i=1; i<=3; i++) {
switch(path[pathLength-i]) {
case 'R': totalAngle += 90; break;
case 'L': totalAngle += 270; break;
case 'B': totalAngle += 180; break;
}
}
totalAngle %= 360;
switch(totalAngle) {
case 0: path[pathLength-3] = 'S'; break;
case 90: path[pathLength-3] = 'R'; break;
case 180: path[pathLength-3] = 'B'; break;
case 270: path[pathLength-3] = 'L'; break;
}
pathLength -= 2;
}
Bluetooth-Steuerung & PID-Tuning
Per Smartphone (Bluetooth-Terminal) sendet man Befehle: g (Start Linefollow), s (Stopp), f/b/l/r (manuell), p/i/d + Wert (PID-Parameter live ändern).
Aufbau & Inbetriebnahme
- Chassis bauen, Servos montieren, Sensor-Array vorne zentriert (5 PID), seitliche Sensoren links/rechts leicht nach außen versetzt.
- Verkabelung: PID-Sensoren → D12, D18, D17, D16, D19; Laterale → A0 (Rechts), A1 (Links); Servos → D5 (Links), D3 (Rechts); BT → D10 (RX), D11 (TX); Taster → D9; LED → D13.
- Akku anschließen, Arduino programmieren.
- PID-Werte per BT anpassen (Start: Kp=50, Ki=0, Kd=0).
- Ersten Lauf starten (
g), Roboter lernt Labyrinth. Taster drücken → 2. Lauf (Optimiert).
Tipps & Weiterentwicklung
- Mehr Sensoren (8–10) für höhere Auflösung & Geschwindigkeit.
- DC-Motoren mit Encodern statt Servos für präzisere Odometrie.
- Rechte-Hand-Regel als Alternative implementieren.
- KI-Erweiterung: Q-Learning für optimale Pfadfindung ohne Hand-Regel.
- Kamera (OpenMV) für visuelle Linien- & Hinderniserkennung.
Fazit
Der Roboter demonstriert eindrucksvoll, wie aus einfachen IR-Sensoren und einer Zustandsmaschine ein lernfähiges System entsteht. Die modulare Code-Struktur erleichtert Experimente. Basis für weiterführende KI-Robotik-Projekte.
Herstellungsprozess
- Wand-vermeidenden Roboter mit Raspberry Pi bauen – Schritt-für-Schritt-Anleitung
- Visionsbasierter Hindernis-vermeidender Mobiler Roboter auf Raspberry Pi
- Star Automations Pinsel-führender Roboter glänzt auf NPE 2018
- Wittmann Battenfeld stellt WX153 vor: Fortgeschrittene Roboterlinie für Hochkraft-Spritzgießautomatisierung
- Bosch stellt KI‑gestützte Fertigungslösung auf der Hannover Messe vor
- FANUC erweitert SCARA‑Roboter‑Portfolio: Sechs Modelle, 3–20 kg Traglast, 400–1.100 mm Reichweite
- Künstliche Intelligenz im Retail: Bewiesene Vorteile, kein Hype
- KI befähigt Roboter, 90+ Objekte durch Tasten zu erkennen
- KI-gestützte Robotik: Spitzenklasse intelligenter Maschinen
- KI: Vorteile, Risiken und industrielle Auswirkungen