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

PID-regellijnvolgerrobot

Componenten en benodigdheden

KittenBot geanodiseerd aluminium chassis
× 1
KittenBot RosBot-plint
× 1
KittenBot Diameter kogelzwenkwiel met metalen kogel (paar)
× 1
KittenBot rubberen wiel met motornaafset (paar)
× 1
KittenBot 5-kanaals IR-lijnvolgende trackersensor
× 1
DC-motor (generiek)
× 1
9V-batterij (algemeen)
× 1
Arduino UNO
× 1

Apps en online services

Arduino IDE

Over dit project

Overzicht

Een functie die de meeste autonome robots van rover nodig hebben, is lijnvolging. Het doel van dit project is om een ​​lijnvolgerrobot te bouwen en op een leuke manier aan de slag te gaan met het leren van PID-controller.

Onderdelen

De robot functioneert naar behoren met twee motoren, de Rosbot Baseboard, en een 5-kanaals sensor. In tegenstelling tot anderen hoeft u geen extra H-bridge motordriver of verschillende componenten te kopen, aangezien de Rosbot Baseboard een ingebouwde 2x H-bridge dual driver heeft. Sluit eenvoudig motoren aan op de Rosbot-plint en deze levert meer stroom dan Arduino Uno.

  • Het frame van de robot: KittenBot geanodiseerd aluminium chassis

Cool en solide chassis met tonnen montagegaten (4,8 mm LEGO Technic), je kunt dit chassis zeker hergebruiken voor andere leuke projecten.

  • Het brein van een robot :RosBot-plint

Een op Arduino UNO gebaseerd moederbord met 2 ingebouwde dubbele H-bridge motordrivers.

  • Robots ogen :5-kanaals IR-lijnvolgende trackersensor

5-kanaals infrarooddetector, nauwkeuriger en stabieler.

Stap 1:Montage

Deze robot is vrij eenvoudig in elkaar te zetten, volg de instructie en het duurt ongeveer 15 minuten.

Bevestig eerst uw motoren aan de zijkanten van het chassis, sluit gewoon het rubberen wiel aan.

Monteer de 5-kanaals IR-sensor aan de voorkant van het chassis.

Bevestig je Rosbot-plint aan het chassis, dan is de robot klaar om bedraad te worden.

Stap 2:Wringen

Hieronder volgen de aansluitingen voor de 5-kanaals IR-sensor:

  • VCC naar 5V
  • GND naar RosBot's GND
  • T1-T4 naar pin A0-A3
  • T5 om SDA vast te pinnen

DC-motoren gaan gewoon naar pin A+A- en pin B+B-.

Coderen

In de codes hebben we een statusmachine die elke mogelijke sensorarray-uitvoer aangeeft. De robot beweegt in een bepaalde richting volgens de output van de sensorarray.

void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; pauze; geval B11111:outlineCnt++; pauze; geval B00010:geval B00110:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); vooringenomenheid =1; pauze; geval B00001:geval B00011:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); vooringenomenheid =2; pauze; geval B00100:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); vooringenomenheid =0; pauze; geval B01000:geval B01100:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); vooringenomenheid =-1; pauze; geval B10000:geval B11000:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); vooringenomenheid =-2; pauze; standaard:Serial.println(a,BIN); schetsCnt++; pauze; } 

We hebben al de waarde van Error, proportieterm, integrale term en afgeleide term ingesteld.

float Kp =25;float Ki =0.15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float input) { float errorDiff; vlotter uitgang; fout =fout * 0,7 + invoer * 0,3; // filter // fout =invoer; errorDiff =fout - errorLast; erroInte =beperking (erroInte + fout, -50, 50); output =Kp * error + Ki * erroInte + Kd * errorDiff; Seriële.afdruk (fout); Serieel.print(' '); Serial.print(erroInte); Serieel.print(' '); Serial.print(errorDiff); Serieel.print(' '); Serial.println(uitvoer); errorLaatste =fout; output teruggeven; 

Manipuleer de waarden om de beste pasvorm voor uw robot te vinden.

Code

  • Lijnvolgrobot
LijnvolgerrobotArduino
In de codes nemen we een NeoPixel van Adafruit op, maar dat is optioneel.
#include #define S_NULL 0#define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_KHDC800); spdL, int spdR) { spdR =-spdR; if (spdL <0) { analogWrite(5, 0); analogWrite(6, -spdL); } else { analogWrite(5, spdL); analoogWrite(6, 0); } if (spdR <0) { analogWrite(9, 0); analogWrite(10, -spdR); } else { analogWrite(9, spdR); analoogWrite(10, 0); }}int bias =0;int outlineCnt =0;void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; pauze; geval B11111:outlineCnt++; pauze; geval B00010:geval B00110:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); vooringenomenheid =1; pauze; geval B00001:geval B00011:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); vooringenomenheid =2; pauze; geval B00100:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); vooringenomenheid =0; pauze; geval B01000:geval B01100:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); vooringenomenheid =-1; pauze; geval B10000:geval B11000:outlineCnt =0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); vooringenomenheid =-2; pauze; standaard:Serial.println(a,BIN); schetsCnt++; pauze; } pixels.setPixelColor(0, pixels.Color(outlineCnt * 10, 0, 0)); if (outlineCnt> 10) { doDcSpeed(0,0); } else { float ff =150; float ctrl =calcPid(bias); doDcSpeed(ff-ctrl,ff+ctrl); } pixels.show();}float Kp =25;float Ki =0.15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float input) { float errorDiff; vlotter uitgang; fout =fout * 0,7 + invoer * 0,3; // filter // fout =invoer; errorDiff =fout - errorLast; erroInte =beperking (erroInte + fout, -50, 50); output =Kp * error + Ki * erroInte + Kd * errorDiff; Seriële.afdruk (fout); Serieel.print(' '); Serial.print(erroInte); Serieel.print(' '); Serial.print(errorDiff); Serieel.print(' '); Serial.println(uitvoer); errorLaatste =fout; retourneer output;}int echoTrace() {int ret =0; int a[5]; for (int i =0; i <5; i++) { a[i] =constrain((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20); als (a[i]> 2) ret +=(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Schema's


Productieproces

  1. De toekomst van robotica
  2. Basketbal
  3. Golfbal
  4. Tutorial – sPiRobot:Bedien en zie wat uw robot overal ziet
  5. Automatisering:opnieuw ontworpen robotlijn
  6. SCARA Robotlijn uitgebreid
  7. Assembly Line Robots:A Definitive Guide
  8. Industriële lijnvolger voor het leveren van materialen
  9. Speed ​​Line Follower Robot V4
  10. PID-regeling van robotgrijper in Matlab / Simulink
  11. Geautomatiseerde kwaliteitscontrole van verpakkingslijnen