QuadruPET prototype
domingo, 5 de febrero de 2012
Giro conseguido!
Después de unas cuantas pruebas hemos conseguido que la araña gire bastante bien, además de fijar los angulos correctos de subida y giro para que sean óptimos en cuanto a velocidad y estabilidad.
miércoles, 1 de febrero de 2012
Robot caminante
¡Lo hemos conseguido! Nuestra araña ya camina, y no lo hace nada mal. En el siguiente vídeo podéis ver sus primeros pasos.
viernes, 27 de enero de 2012
Pruebas de movimiento
Después de estar probando la clase OutputCompare podemos ver que, de esta forma, el cuadrúpedo se levanta rápidamente al alimentarlo y se mantiene erguido ya que los ocho servos ejercen fuerza suficiente simultáneamente.
Un gran problema que hemos observado es la estabilidad del cuerpo del robot. El objetivo es levantar una pata cada vez y conseguir que pueda sostenerse con las tres restantes, pero vemos que tiende a caerse hacia los lados. Hemos minimizado este problema añadiéndole doble pata y apretando los tornillos para que se mueva lo menos posible, a pesar de ello, el robot sigue cayéndose al no ser perfectamente simétrico.
Intentaremos resolver este problema moviendo las patas muy rápidamente, para así corregir la inclinación antes de que el robot pueda llegar a tocar el suelo. Acortaremos la duración de cada movimiento ajustando el Thread Sleep (tiempo de espera para poder ejecutar la siguiente instrucción).
En el siguiente ejemplo tenemos un bucle en el que vamos moviendo cada servo a un ángulo determinado, pero entre cada movimiento ponemos un valor de espera en milisegundos.
while (true)
{
servo1.Mover(45);
Thread.Sleep(1000);
servo1.Mover(90);
Thread.Sleep(1000);
...
miércoles, 25 de enero de 2012
Clase OutputCompare
Al probar de mover todos los servos usando threads, observamos que se producia un movimiento más lento y entrecortado (a trompicones), ya que al parecer nuestra placa era incapaz de ejecutar un programa con ocho hilos a la vez. Así que estamos provando otro método que funcione mejor, se trata de la clase OutputCompare.
Utilizando esta clase se puede configurar uno o varios pines para que retengan su salida en el estado deseado durante un tiempo concreto. El OuputCompare es muy fácil de implementar ya que no es necesario generar la señal PWM que activa los servos, simplemente tenemos que darle el valor del ancho de pulso y la espera (tiempo que dura el valor alto y bajo).
Utilizando esta clase se puede configurar uno o varios pines para que retengan su salida en el estado deseado durante un tiempo concreto. El OuputCompare es muy fácil de implementar ya que no es necesario generar la señal PWM que activa los servos, simplemente tenemos que darle el valor del ancho de pulso y la espera (tiempo que dura el valor alto y bajo).
A continuación, mostramos un sencillo ejemplo para mover el servo a tres posiciones distintas:
public static void Main()
{
OutputCompare oc = new OutputCompare((Cpu.Pin)FEZ_Pin.Digital.Di0, true, 2);
while (true)
{
oc.Set(true, new uint[] { 2200, 17800 }, 0, 2, true); // Servo hacia la derecha
Thread.Sleep(1000);
oc.Set(true, new uint[] { 1200, 1800 }, 0, 2, true); // Servo en el centro
Thread.Sleep(1000);
oc.Set(true, new uint[] { 200, 19800 }, 0, 2, true); // Servo hacia la izquierda
Thread.Sleep(1000);
}
}
viernes, 20 de enero de 2012
Montaje completado!
Tras un duro trabajo en casa y en la cafetería de la uni (las servilletas nos delatan), conseguimos montar la estructura del bot que podemos observar en la foto inferior.
Aquí lo tenemos ya terminado con duplex y todo! El cableado y las conexiones las hemos fijado de ésta manera para que evite malos contactos y desconexiones durante el movimiento.
Aquí podeis ver a los creadores, ahora solo queda darle vida! Esperemos que no explote al conectarlo ;)
martes, 17 de enero de 2012
Moviendo las patas
Estamos acabando de construir el robot, pero mientras tanto queríamos ver una de las patas en funcionamiento. En el siguiente vídeo podemos observar el movimiento de los dos miembros de la pata. Como ya sabéis ésto se consigue realizando un giro completo con ambos servos.
En el vídeo vemos como los servos se mueven uno después del otro, y no conjuntamente. Esto es debido a que en nuestro programa la función MoveServo nos crea un bucle, y hasta que éste no termina no se ejecuta la siguiente instrucción. Para arreglar esto usaremos hilos de ejecución (threads) para mover cada servo independientemente, y así poder hacerlos girar al mismo tiempo cuando sea necesario.
miércoles, 11 de enero de 2012
Diseño finalizado!
En las imagenes inferiores tenemos el diseño con las cotas que posteriormente utilicé para plasmarlo en la madera para llevarlo al taller.
Ayer fuimos al taller y cortamos las piezas para montar una pata, al menos, para poder seguir programando en clase. El lunes que viene vamos otra vez para acabar el centro del quadropod y acabar de montarlo complétamente. Todo parece ir bien por el momento.
Suscribirse a:
Entradas (Atom)