Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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.

AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth AI-gestuurde Doolhof-oplossende Robot met Arduino en Bluetooth

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

  1. Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
  2. Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
  3. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  4. Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
  5. Bosch onthult AI-gedreven productieoplossing op Hannover Messe
  6. AI-gestuurde Robotica: High-tech Intelligente Machines
  7. Waarom Kiezen voor een Collaboratieve Robot voor Uw Werkruimte
  8. AI stelt robots in staat 90+ objecten te herkennen door tasten
  9. Kunstmatige Intelligentie in Detailhandel: Bewezen Voordelen, Geen Hype
  10. Kubernetes Geeft AI-Startups Schaalbare, Gecontaineriseerde Oplossingen
  11. AI-gestuurd Volgen van Amazon-ontbossing