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

PID-Steuerungslinien-Follower-Roboter

Komponenten und Verbrauchsmaterialien

KittenBot eloxiertes Aluminiumgehäuse
× 1
KittenBot RosBot Baseboard
× 1
KittenBot-Kugelrolle mit Durchmesser und Metallkugel (Paar)
× 1
KittenBot Gummirad mit Motornabensatz (Paar)
× 1
KittenBot 5-Kanal IR-Linienfolgender Tracker-Sensor
× 1
DC-Motor (generisch)
× 1
9-V-Batterie (generisch)
× 1
Arduino UNO
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Übersicht

Eine Funktion, die die meisten autonomen Rover-Roboter benötigen, ist die Linienverfolgung. Der Zweck dieses Projekts ist es, einen Linienfolger-Roboter zu bauen und auf spielerische Weise mit dem Erlernen des PID-Reglers zu beginnen.

Teile

Der Roboter funktioniert ordnungsgemäß mit zwei Motoren, dem Rosbot Baseboard und einem 5-Kanal-Sensor. Im Gegensatz zu anderen müssen Sie keinen zusätzlichen H-Brücken-Motortreiber oder verschiedene Komponenten kaufen, da das Rosbot-Baseboard über eingebaute 2x H-Brücken-Dual-Treiber verfügt. Verbindet einfach Motoren mit dem Rosbot-Baseboard und es liefert mehr Leistung als Arduino Uno.

  • Roboterrahmen: KittenBot eloxiertes Aluminiumgehäuse

Cooles und solides Chassis mit vielen Befestigungslöchern (4,8 mm LEGO Technic). Sie können dieses Chassis definitiv für andere lustige Projekte wiederverwenden.

  • Gehirn des Roboters :RosBot Baseboard

Ein Arduino UNO-basiertes Mainboard mit zwei integrierten Dual-H-Brücken-Motortreibern.

  • Roboteraugen :5-Kanal IR linienfolgender Tracker Sensor

5-Kanal-Infrarotdetektor, genauer und stabiler.

Schritt 1:Montage

Dieser Roboter ist ziemlich einfach zu montieren, befolgen Sie die Anweisungen und es dauert ungefähr 15 Minuten.

Befestigen Sie zuerst Ihre Motoren an den Seiten des Chassis, stecken Sie einfach das Gummirad ein.

Montieren Sie den 5-Kanal-IR-Sensor an der Vorderseite des Chassis.

Befestigen Sie Ihr Rosbot-Baseboard am Chassis, dann ist der Roboter bereit für die Verkabelung.

Schritt 2:Auswringen

Im Folgenden sind die Anschlüsse für den 5-Kanal-IR-Sensor aufgeführt:

  • VCC bis 5V
  • GND zu RosBots GND
  • T1-T4 an Pin A0-A3
  • T5 an SDA anheften

Gleichstrommotoren gehen einfach auf Pin A+A- und Pin B+B-.

Codierung

In den Codes haben wir eine Zustandsmaschine, die jeden möglichen Sensor-Array-Ausgang anzeigt. Der Roboter bewegt sich entsprechend der Sensor-Array-Ausgabe in eine bestimmte Richtung.

void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; brechen; Fall B11111:outlineCnt++; brechen; Fall B00010:Fall B00110:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 50, 0)); Voreingenommenheit =1; brechen; Fall B00001:Fall B00011:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 200, 0)); Voreingenommenheit =2; brechen; Fall B00100:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 0, 20)); Voreingenommenheit =0; brechen; Fall B01000:Fall B01100:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(50, 0, 0)); Voreingenommenheit =-1; brechen; Fall B10000:Fall B11000:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(200, 0, 0)); Voreingenommenheit =-2; brechen; Standard:Serial.println (a, BIN); skizzeCnt++; brechen; } 

Wir haben bereits den Wert von Fehler, Proportionalterm, Integralterm und Ableitungsterm festgelegt.

float Kp =25;float Ki =0.15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float input) { float errorDiff; Float-Ausgang; Fehler =Fehler * 0,7 + Eingabe * 0,3; // filtern //Fehler =Eingabe; errorDiff =error - errorLast; FehlerInte =Einschränkung (FehlerInte + Fehler, -50, 50); Ausgabe =Kp * Fehler + Ki * FehlerInte + Kd * FehlerDiff; Serial.print (Fehler); Serial.print (' '); Serial.print (erroInte); Serial.print (' '); Serial.print (errorDiff); Serial.print (' '); Serial.println (Ausgabe); errorLast =Fehler; Ausgabe zurückgeben; 

Bearbeiten Sie die Werte, um die beste Passform für Ihren Roboter zu finden.

Code

  • Linienfolger-Roboter
Linienfolger-RoboterArduino
In den Codes fügen wir ein NeoPixel von Adafruit hinzu, aber das ist optional.
#include #define S_NULL 0#define S_ONTRACE 1Adafruit_NeoPixel Pixel =Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_KHZ800); spdL, int spdR) { spdR =-spdR; wenn (spdL <0) { analogWrite (5, 0); analogWrite(6, -spdL); aufrechtzuerhalten. Sonst { AnalogWrite (5, spdL); analogWrite(6, 0); aufrechtzuerhalten. Wenn (spdR <0) { analogWrite (9, 0); analogWrite(10, -spdR); aufrechtzuerhalten. Sonst { AnalogWrite (9, SPDR); analogWrite (10, 0); }}int bias =0;int outlineCnt =0;void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; brechen; Fall B11111:outlineCnt++; brechen; Fall B00010:Fall B00110:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 50, 0)); Voreingenommenheit =1; brechen; Fall B00001:Fall B00011:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 200, 0)); Voreingenommenheit =2; brechen; Fall B00100:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(0, 0, 20)); Voreingenommenheit =0; brechen; Fall B01000:Fall B01100:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(50, 0, 0)); Voreingenommenheit =-1; brechen; Fall B10000:Fall B11000:UmrissCnt =0; Pixel.setPixelColor(2, Pixel.Color(200, 0, 0)); Voreingenommenheit =-2; brechen; Standard:Serial.println (a, BIN); skizzeCnt++; brechen; } Pixel.setPixelColor(0, Pixel.Color(outlineCnt * 10, 0, 0)); if (outlineCnt> 10) { doDcSpeed ​​(0,0); aufrechtzuerhalten. Sonst { Float ff =150; float ctrl =calcPid(bias); doDcSpeed(ff-Strg,ff+Strg); } Pixel.show();}float Kp =25;float Ki =0.15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float input) { float errorDiff; Float-Ausgang; Fehler =Fehler * 0,7 + Eingabe * 0,3; // filtern //Fehler =Eingabe; errorDiff =error - errorLast; FehlerInte =Einschränkung (FehlerInte + Fehler, -50, 50); Ausgabe =Kp * Fehler + Ki * FehlerInte + Kd * FehlerDiff; Serial.print (Fehler); Serial.print (' '); Serial.print (erroInte); Serial.print (' '); Serial.print (errorDiff); Serial.print (' '); Serial.println (Ausgabe); errorLast =Fehler; Ausgabe zurückgeben;}int echoTrace() {int ret =0; int a[5]; for (int i =0; i <5; i++) {a[i] =Constraint((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20); if (a[i]> 2) ret +=(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Schaltpläne


Herstellungsprozess

  1. Die Zukunft der Robotik
  2. Basketball
  3. Golfball
  4. Tutorial – sPiRobot:Steuern und sehen Sie, was Ihr Roboter von überall sieht
  5. Automatisierung:Roboterlinie neu gestaltet
  6. SCARA-Roboterlinie erweitert
  7. Montagelinienroboter:Ein definitiver Leitfaden
  8. Industrial Line Follower für die Materialversorgung
  9. PID-Steuerung eines Robotergreifers in Matlab / Simulink
  10. Automatisierte Qualitätskontrolle der Verpackungslinie