AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth
Onderdelen en Benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino Nano R3 | 1 | |
| HC-06 Bluetooth-module | 1 | |
| TCRT5000 4-kanaals infrarood lijnvolgsensor | 1 | |
| SparkFun RedBot lijnvolgsensor | 1 | |
| ZX03 (gebaseerd op TCRT5000) reflecterende infraroodsensoren (analoge uitgang) | 2 | Voor links/rechts kruisingdetectie |
| Android-apparaat | 1 | Voor tuning via app |
| RobotGeek Continue Rotatieservo | 2 | |
| 4xAA batterijhouder | 2 |
Apps en Online Services
- Arduino IDE
- MIT App Inventor 2 (voor Android-app)
Over Dit Project
Inleiding
Deze tutorial bouwt voort op mijn vorige project: Line Follower Robot - PID Control - Android Setup. Zodra je een robot hebt die lijnen kan volgen, is de volgende logische stap het toevoegen van intelligentie. Onze "Rex de Robot" zal nu proberen een uitweg te vinden uit een "doolhof" op de kortste en snelste manier (overigens haat hij de Minotaurus).
Wat is het verschil tussen een doolhof (maze) en een doolhof met één pad (labyrinth)? Volgens labyrinthos.net moet een maze keuzes in het pad bieden. Labyrinten hebben één pad dat onvermijdelijk van ingang naar doel leidt, hoeveel ook windingen er zijn. De meeste mazelen zijn "simply-connected" of "perfect mazes" – ze bevatten geen lussen. Als de muur rondom het doel verbonden is met de omtrek bij de ingang, kan de maze altijd opgelost worden door één hand aan de muur te houden (de linkerhand-regel).
Dit project is verdeeld in twee passes:
- Eerste Pass: De robot vindt een weg uit een onbekend perfect doolhof, ongeacht startpositie.
- Tweede Pass: De robot optimaliseert de gevonden route naar het kortste pad van start tot finish.
In de eerste pass "denkt" de robot na bij elke kruising, probeert dode uithoeken en maakt onnodige kehrtwendes. Tijdens deze verkenning bouwt hij ervaring op. In de tweede pass rijdt hij foutloos en snel naar de uitgang.
Stap 1: Stuklijst (Bill of Materials)
De materialenlijst is grotendeels gelijk aan die van de Line Follower Robot, met 2 extra sensoren voor betere detectie van links/rechts-kruisingen. Totale kosten: ca. $85.
Chassis (aanpasbaar):
- 2x Houten vierkanten (80x80mm)
- 3x Mapklampen
- 2x Houten wielen (Ø50mm)
- 1x Zwerkop (ball caster)
- 9x Elastieken
- 3M Command lijstjes
- Kunststof beugels voor sensoren
- Breadboard en bedrading
- 2x sets 4x NiMH-batterijen (5V per set)
- 2x SM-S4303R Continue Rotatie 360° Servo's
- Arduino Nano
- HC-06 Bluetooth-module
- 5x Lijnsensoren (TCRT5000 4-kanaals + 1 losse)
- 2x ZX03 analoge reflecterende sensoren
- 1x LED
- 1x Drukknop
Let op: Ideaal zijn alle sensoren identiek. Het project werkt ook met alleen de oorspronkelijke 5 sensoren, maar vereist gevoeligere instellingen voor kruisingdetectie.
Stap 2: Wijzigingen in het Chassis
Verwijder de oorspronkelijke set van 5 lijnvolgsensoren en monteer de nieuwe "Verre LINKS" en "Verre RECHTS" reflecterende sensoren aan de uiteinden van de kunststof beugel. Probeer alle 7 sensoren zo goed mogelijk uit te lijnen.
Stap 3: Installeren en Testen van de Nieuwe Sensoren
De nieuwe array van 7 sensoren is zo gemonteerd dat de 5 oorspronkelijke exclusief worden gebruikt voor PID-besturing (en detectie van "volledige lijn"), terwijl de 2 nieuwe sensoren exclusief dienen voor LINKS/RECHTS-kruisingdetectie.
De 5 originele digitale sensoren geven HIGH wanneer gecentreerd over de zwarte lijn. De afstand tussen sensoren is zo berekend dat 2 sensoren de volledige breedte van de lijn kunnen dekken.
De 2 nieuwe analoge sensoren geven een analoge waarde (meestal < 100 op zwart, 500-600 op wit). De THRESHOLD-constante moet experimenteel bepaald worden.
In de code worden sensoren gedefinieerd als:
const int lineFollowSensor0 = 12; // Digital input
const int lineFollowSensor1 = 18; // Analog Pin A4 as Digital
const int lineFollowSensor2 = 17; // Analog Pin A3 as Digital
const int lineFollowSensor3 = 16; // Analog Pin A2 as Digital
const int lineFollowSensor4 = 19; // Analog Pin A5 as Digital
const int farRightSensorPin = 0; // Analog Pin A0
const int farLeftSensorPin = 1; // Analog Pin A1
Sensorwaarden worden continu bijgewerkt in arrays/variabelen. De mode-variabele geeft aan of de robot een lijn volgt, op een continue lijn staat, een kruising detecteert of geen lijn ziet. De logica voor alle mogelijke sensorcominaties is uitgebreid gedocumenteerd in de originele tutorial.
Voor testdoeleinden is de functie testSensorLogic() opgenomen.
Stap 4: Het Doolhof Oplossen – De Linkerhand-regel
De linkerhand-regel stelt: houd je linkerhand aan de muur links van je, loop vooruit, en je bereikt de uitgang. In onze 2D-doolhof zijn er 8 typen kruisingen. De linkerhand-regel reduceert de acties tot één optie per kruisingstype:
- Kruispunt (Cross) → Linksaf
- T-kruising → Linksaf
- Alleen Rechts → Rechtsaf
- Alleen Links → Linksaf
- Rechtdoor of Links → Linksaf
- Rechtdoor of Rechts → Rechtdoor
- Doodlopend pad → Kehrt (180°)
- Einde doolhof → Stop
Het uitdaging is het onderscheiden tussen kruisingstypes die er hetzelfde uitzien (bijv. een lijn kan een Kruispunt OF een T-kruising zijn). De oplossing: de robot rijdt een "extra inch" vooruit om te zien wat er komt.
Stap 5: Implementatie van de Linkerhand-regel in Arduino-code
De hoofdlus (loop()) gebruikt een switch-statement op basis van de mode en roept helper-functies aan: runExtraInch(), goAndTurn(), followingLine() (met PID), mazeEnd().
void loop() {
readLFSsensors();
switch (mode) {
case NO_LINE:
motorStop(); goAndTurn(LEFT, 180); break;
case CONT_LINE:
runExtraInch(); readLFSsensors();
if (mode == CONT_LINE) mazeEnd();
else goAndTurn(LEFT, 90); break; // T of Cross → Links
case RIGHT_TURN:
runExtraInch(); readLFSsensors();
if (mode == NO_LINE) goAndTurn(RIGHT, 90); break;
case LEFT_TURN:
goAndTurn(LEFT, 90); break;
case FOLLOWING_LINE:
followingLine(); break;
}
}
Stap 6: Het Pad Opslaan
Bij elke kruising wordt de genomen actie (L, R, S, B) opgeslagen in een array path[]. Voorbeeldpad: LBLLLBSBLLBSLL (lengte 14).
Stap 7: Het Pad Vereenvoudigen (Optimaliseren)
Sequenties met een kehrt (B) kunnen verkort worden. Regels:
- LBL → S
- LBS → R
- RBL → B
- SBL → R
- SBS → B
- LBR → B
Toepassing op het voorbeeldpad leidt tot geoptimaliseerd pad: RL (Rechts, dan Links). De functie simplifyPath() (credit: Patrick McCabe) voert deze optimalisatie uit tijdens het rijden.
Stap 8: Tweede Pass – Zo Snel Mogelijk Door het Doolhof
Na de eerste pass bevat path[] de geoptimaliseerde route. De tweede pass volgt deze instructies:
void mazeOptimization() {
while (!status) {
readLFSsensors();
switch (mode) {
case FOLLOWING_LINE: followingLine(); break;
case CONT_LINE:
case LEFT_TURN:
case RIGHT_TURN:
if (pathIndex >= pathLength) mazeEnd();
else { mazeTurn(path[pathIndex]); pathIndex++; }
break;
}
}
}
void mazeTurn(char dir) {
switch(dir) {
case 'L': goAndTurn(LEFT, 90); break;
case 'R': goAndTurn(RIGHT, 90); break;
case 'B': goAndTurn(RIGHT, 800); break; // ~180°
case 'S': runExtraInch(); break;
}
}
Stap 9: Android-app voor Fine-tuning
De Android-app van het Line Follower-project kan hergebruikt worden. Belangrijke parameters voor calibratie: adjTurn, adjGoAndTurn, THRESHOLD, power, extraInch.
Stap 10: Conclusie
Dit project toont een toepassing van eenvoudige AI-concepten (linkerhand-regel + padoptimalisatie) op een lijnvolgende robot. De code is beschikbaar op GitHub: MJRoBot-Maze-Solver.
Groetjes uit het zuiden van de wereld! – Marcelo
Code Fragmenten
Alle codefragmenten (sensordefinities, hoofdlus, padopslag, vereenvoudiging, tweede pass, mazeTurn, testfuncties) zijn in de bovenstaande stappen opgenomen. De complete Arduino-bestanden zijn beschikbaar als download.
Schema
Fritzing-bestand: z7IdLkxL1J66qOtphxqC.fzz
Productieproces
- Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
- Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
- Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
- Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
- Bosch onthult AI-gedreven productieoplossing op Hannover Messe
- AI-gestuurde Robotica: High-tech Intelligente Machines
- Waarom Kiezen voor een Collaboratieve Robot voor Uw Werkruimte
- AI stelt robots in staat 90+ objecten te herkennen door tasten
- Kunstmatige Intelligentie in Detailhandel: Bewezen Voordelen, Geen Hype
- Kubernetes Geeft AI-Startups Schaalbare, Gecontaineriseerde Oplossingen
- AI-gestuurd Volgen van Amazon-ontbossing