Empece a trabajar en este proyecto hace aproximadamente una semana a pesar que ya contaba con todos los componentes electrónicos la falta de tiempo para trabajar en el es algo que llevo a dilatar el mismo.
Se trata de un robot bípedo 17DOF el cual me causaba mucha ilusión cuando compre el KIT, la que a lo largo de esta semana se ha esfumado, dado que las piezas de electronica mas específicamente los servos recomendados para el proyecto dejan mucho que desear esto por su pobre centro el cual tiene mucho juego, lo cual hace una tarea difícil (mas no imposible) lograr una programación adecuada o al menos cercana a eso.
Bueno son servos de unos pocos dólares tampoco puedo hablar mal de ellos, por el precio ofrecen un buen rendimiento de entre 9 y 12 kg. solo digo que para este tipo de robot bípedos yo optaría a futuro por unos servos de mas alta gama, mas costosos claro eso si.
Esto me llevo a realizar muchas variaciones en el diseño del robot diferentes a la original y aunque obtuve buenos resultados después de ellas, no me termina de convencer su funcionamiento. Aquí les dejo una foto comparativa de los modelos armados de forma original y con las modificaciones.
A pesar de esto continuo pensando en que los servos al menos los de las piernas deben ser reemplazados por unos de mejor calidad para que el robot pueda moverse de forma correcta.
Aquí les dejo un video con algunas pruebas de movimientos que fueron realizadas durante su programación.
Aqui les dejo una lista detallada de las partes usadas:
1) 10 servos MG996R.
2) 7 servos MG995.
3) 6 Extencion de cable de servo
3) 1 Placa Arduino Uno.
4) 1 Joystick
5) 1 Par de APC220 V3.0
6) BEC reductor de 12 amp
7) Fuente de poder o Batería 12V
7) Veyron Servo Driver (24 Channel) V1.0
9) Cable micro USB
La Veyron es una tarjeta muy sencilla se usa como el código abajo lo explica en su pagina web tiene mas detalle del mismo. se trata de enviar el código por SERIAL.PRINTLN a travez del APC220 mediante código ya establecido indicando #(Numero de canal que se va a mover) P(Cantidad de moviendo a ejecutar en un rango entre 500 y 2500) T(La rapidez del movimiento que viene dada por una formula (The initial position is 750us, the finial position is 2250us, the speed is 1000us/s The running time;) todo tanto el modulo Veyron como el arduino y el APC220 debe estar configurado con los mismos Baudios en mi caso 9600 ya que el APC220 viene configurado así de fabrica y no tenia que configurarlos yo, en la tarjeta es simple solo se trata de mover unos interruptores de 1 a 0 para que trabaje en los baudios deseados, ella incluye una tabla dibujada en la misma.
T=(2250-750)/1000=1.5s
Este es el código que finalmente desarrolle para que el robot caminara, y aunque camina era muy inestable quizás los primero dos paso los realizaba de manera correcta pero luego aunque el código era una secuencia de repetición exacta el robot ya no hacia los pasos de manera correcta.
Creo que finalmente este proyecto se va a convertir en algo mas.....nada se pierde todo se transforma.
int UD = 0; //read from U/D axis of Joystick
int LR = 0; //read from L/R axis of Joystick
int a=0;
int b=0;
void setup()
{
Serial.begin(9600);//Set the baudrate to 115200 A:1 B:1
}
void loop()
{
UD = analogRead(A0); //read u/d from stick
LR = analogRead(A1); //read l/r from stick
if(UD < 400 && UD >= 0 && LR > 250 && LR < 800) // send ldown to display if stick is in lower left quadrant
{
Serial.println("#10 P1600 T1000");// Channel 5 will move to 750us within 500ms
delay(1000);
Serial.println("#10 P800 T800");// Channel 5 will move to 750us within 500ms
delay(1000);
}
if(UD > 600 && UD < 1100 && LR < 800 && LR > 200) // send ldown to display if stick is in upper left quadrant
{
Serial.println("#6 P1050 #9 P1400 #5 P1800 #8 P1650 #7 P1900 #4 P1200 T600"); // pos inicial caminata
delay(2000);
Serial.println("#11 P1650 T800 #10 P1600 T800");// inclinacion de lado cintura
delay(500);
Serial.println("#2 P1540 #3 P1600 T800"); // inclinacion pies DERECHA
delay(1000);
Serial.println("#9 P1000 #7 P2300 #5 P1620 T800");// priemr paso hacia adelante PIE IZQUIERDO
delay(500);
Serial.println("#10 P1470 T800 #11 P1520 T800");// inclinacion cintura
delay(500);
Serial.println("#17 P1700 #18 P1700 T800");
delay(500);
Serial.println("#6 P1400 #8 P1300 #4 P1000 T800");// impulso hacia adelante PIE DERECHO
delay(500);
Serial.println("#3 P1450 #2 P1320 T800"); // inclinacion pies INZQUIERDA
delay(1000);
Serial.println("#6 P1100 #9 P1400 #5 P1800 #8 P1650 #7 P1900 #4 P1650 T900"); // pos inicial caminata
delay(500);
Serial.println("#6 P1600 #8 P1700 #4 P1650 T800");// priemr paso hacia adelante PIE IZQUIERDo
delay(1000);
Serial.println("#8 P2100 #6 P700 #4 P1500 T800");// pirmer paso hacia adelante PIE DERECHO
delay(1000);
Serial.println("#17 P1700 #18 P1700 T800");
delay(500);
Serial.println("#11 P1650 T800 #10 P1580 T800");// inclinacion de lado cintura
delay(500);
Serial.println("#9 P1750 #7 P1900 #5 P2000 T800");// priemr paso hacia adelante PIE IZQUIERDO
delay(1000);
Serial.println("#2 P1450 #3 P1620 T1000"); // inclinacion pies DERECHA
delay(500);
Serial.println("#6 P1100 #8 P1650 #4 P1200 T800");// impulso hacia adelante PIE DERECHO
delay(500);
Serial.println("#9 P1000 #7 P2300 #5 P1620 T800");// priemr paso hacia adelante PIE IZQUIERDO
delay(1000);
Serial.println("#17 P1700 #18 P1700 T800");
delay(500);
Serial.println("#10 P1450 T800 #11 P1490 T800");// inclinacion cintura
delay(500);
Serial.println("#6 P1400 #8 P1300 #4 P1000 T800");// impulso hacia adelante PIE DERECHO
delay(500);
Serial.println("#3 P1400 #2 P1320 T800"); // inclinacion pies INZQUIERDA
delay(1000);
}
if(LR < 400 && LR >= 0 && UD > 250 && UD < 800) // send ldown to display if stick is in lower right quadrant
{
Serial.println("#23 P900 T500");
delay(800);
Serial.println("#23 P2000 T500");
delay(800);
}
if(LR > 600 && LR < 1100 && UD > 300 && UD < 800)
{
Serial.println("#19 P1000 #20 P1200 T800");
delay(500);
}
if(LR < 600 && LR > 400 && UD > 400 && UD < 600)
{ a=0;
Serial.println("#2 P1420 #4 P1450 #6 P1500 #8 P1550 #10 P1470 T1000");
delay(500);
Serial.println("#3 P1490 #5 P1550 #7 P1500 #9 P1500 #11 P1550 T1000");
delay(500);
Serial.println("#17 P1500 #18 P1500 #19 P1700 #20 P500 #21 P1500 #22 P1400 #23 P1500 T1500");
delay(250);
a=0;
b=0;
}
}

Hola, buen tutorial, felicitaciones, pero una consulta, como hiciste la conexion entre el veyron servo driver y el arduino uno, por favor te agradeceria tu ayuda, estoy en ese dilema, muchas gracias de antemano.
ReplyDelete