Robot seguidor de línea de control PID
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Descripción general
Una característica que necesitan la mayoría de los robots autónomos móviles es el seguimiento de línea. El propósito de este proyecto es construir un robot seguidor de línea y comenzar a aprender el controlador PID de una manera divertida.
Piezas
El robot funciona correctamente con dos motores, la placa base Rosbot y un sensor de 5 canales. A diferencia de otros, no tiene que comprar un controlador de motor de puente H adicional o varios componentes, ya que la placa base Rosbot tiene un controlador doble de puente H 2x incorporado. Simplemente conecta los motores a la placa base Rosbot y proporcionará más energía que Arduino Uno.
- Estructura del robot: Chasis de aluminio anodizado KittenBot
Chasis fresco y sólido que tiene toneladas de orificios de montaje (LEGO Technic de 4.8 mm), definitivamente puedes reutilizar este chasis para otros proyectos divertidos.
- Cerebro de robot :Zócalo RosBot
Una placa base basada en Arduino UNO con 2x controladores de motor de doble puente H integrados.
- Ojos de robot :Sensor de seguimiento de línea IR de 5 canales
Detector de infrarrojos de 5 canales, más preciso y estable.
Paso 1:montaje
Este robot es bastante fácil de montar, siga las instrucciones y le llevará unos 15 minutos.
Primero, conecte sus motores a los lados del chasis, simplemente conecte la rueda de goma.
Monte el sensor de infrarrojos de 5 canales en la parte delantera del chasis.
Conecte su placa base Rosbot al chasis, luego el robot estará listo para conectarse.
Paso 2:Escurrir
Las siguientes son las conexiones para el sensor de infrarrojos de 5 canales:
- VCC a 5V
- GND a GND de RosBot
- T1-T4 para fijar A0-A3
- T5 para fijar SDA
Los motores de CC simplemente van al pin A + A- y al pin B + B-.
Codificación
En los códigos, tenemos una máquina de estado que indica cada posible salida de matriz de sensores. El robot se mueve en una determinada dirección de acuerdo con la salida de la matriz de sensores.
void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; descanso; caso B11111:outlineCnt ++; descanso; caso B00010:caso B00110:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 50, 0)); sesgo =1; descanso; caso B00001:caso B00011:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 200, 0)); sesgo =2; descanso; caso B00100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 0, 20)); sesgo =0; descanso; caso B01000:caso B01100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (50, 0, 0)); sesgo =-1; descanso; caso B10000:caso B11000:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (200, 0, 0)); sesgo =-2; descanso; predeterminado:Serial.println (a, BIN); outlineCnt ++; descanso; }
Ya configuramos el valor de Error, término de proporción, término integral y término derivado.
float Kp =25; float Ki =0.15; float Kd =1200; float error, errorLast, erroInte; float calcPid (float input) {float errorDiff; salida flotante; error =error * 0,7 + entrada * 0,3; // filtro // error =entrada; errorDiff =error - errorLast; erroInte =restringir (erroInte + error, -50, 50); salida =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (error); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (salida); errorLast =error; devolver salida;
Manipule los valores para encontrar el que mejor se adapte a su robot.
Código
- Robot seguidor de línea
Robot seguidor de línea Arduino
En los códigos, incluimos un NeoPixel de Adafruit, pero eso es opcional.#include#define S_NULL 0 # define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel (4, 4, NEO_GRB + NEO_KHD800cSpeed do (int spdL, int spdR) {spdR =-spdR; si (spdL <0) {analogWrite (5, 0); analogWrite (6, -spdL); } else {analogWrite (5, spdL); analogWrite (6, 0); } si (spdR <0) {analogWrite (9, 0); analogWrite (10, -spdR); } else {analogWrite (9, spdR); analogWrite (10, 0); }} int sesgo =0; int outlineCnt =0; void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; descanso; caso B11111:outlineCnt ++; descanso; caso B00010:caso B00110:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 50, 0)); sesgo =1; descanso; caso B00001:caso B00011:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 200, 0)); sesgo =2; descanso; caso B00100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 0, 20)); sesgo =0; descanso; caso B01000:caso B01100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (50, 0, 0)); sesgo =-1; descanso; caso B10000:caso B11000:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (200, 0, 0)); sesgo =-2; descanso; predeterminado:Serial.println (a, BIN); outlineCnt ++; descanso; } píxeles.setPixelColor (0, píxeles.Color (outlineCnt * 10, 0, 0)); if (outlineCnt> 10) {doDcSpeed (0,0); } else {float ff =150; flotador ctrl =calcPid (sesgo); 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; salida flotante; error =error * 0,7 + entrada * 0,3; // filtro // error =entrada; errorDiff =error - errorLast; erroInte =restringir (erroInte + error, -50, 50); salida =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (error); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (salida); errorLast =error; retorno de salida;} int echoTrace () {int ret =0; int a [5]; para (int i =0; i <5; i ++) {a [i] =restringir ((1025 - analogRead (A0 + i)) / 10 - 4, 0, 20); si (a [i]> 2) ret + =(0x1 < LinefollowRobot
https://github.com/KittenBot/LinefollowRobot
Esquemas
Proceso de manufactura
- El futuro de la robótica
- Baloncesto
- Pelota de golf
- Tutorial - sPiRobot:Controle y vea lo que su robot está viendo desde cualquier lugar
- Automatización:Línea de robot rediseñada
- Línea de robot SCARA ampliada
- Robots de línea de montaje:una guía definitiva
- Seguidor de línea industrial para suministro de materiales
- Robot seguidor de línea de velocidad V4
- Control PID de Robot Gripper en Matlab / Simulink
- Control de calidad de la línea de envasado automatizado