Autor Tema: Robot equilibrista  (Leído 215013 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3574
    • Juntos es mejor
Re: Robot equilibrista
« Respuesta #210 en: 18 de Febrero de 2009, 21:05:05 »
Felicidaes, esta muy bueno!

Se lo complicado que es hacer que responda de esa manera tan estable. es grandioso.

Yo estoy haciendo uno, version miniatura, pero la exigencia es que deba tener control PID.

Implementas en el PIC ¿CONTROL PID?

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Robot equilibrista
« Respuesta #211 en: 19 de Febrero de 2009, 13:49:33 »
Hola:

Al igual que Manolo tengo una envidia de la sana  :D, felicidades por el trabajo, te quedó estupendo.

Desconectado Safareig

  • PIC10
  • *
  • Mensajes: 26
Re: Robot equilibrista
« Respuesta #212 en: 19 de Febrero de 2009, 18:42:57 »
Hola,

Os agradezco a todos vuestros comentarios, mas aún viniendo de quienes vienen. Leyendo este foro he aclarado muchas dudas y adquirido conocimientos que una vez juntos me han facilitado la labor y la han hecho posible.

Este bot en realidad no es el fin del proyecto, es solo una primera parte de él. Este bot debía proporcionarme la experiencia necesaria (y lo ha hecho) para afrontar el proyecto que tenía en mente, un segway.
Construir un segway era caro y no estaba seguro de saber hacerlo funcionar correctamente así que me decidí por hacer algo a escala reducida, si este salía bien entonces me plantearía acometer la construcción de su "hermano mayor".
Así que llegados a este punto me he decidido a continuar con el proyecto. Estoy adquiriendo el material necesario (motores, encoders, etc.) y diseñando la parte mecánica (esta no me gusta tanto, soy un poco manazas). Os iré informando de los progresos.


x MGLSOFT, como he explicado el proyecto no está terminado pero si, mi intención es publicar el proyecto completo una vez terminado.

x gera, no tengo problema en comentar cualquier aspecto del proyecto. Lo mas importante es calcular bien el ángulo de inclinación usando los datos de los sensores, en esta parte tiene mucho peso el uso de un filtro kalman que como no tengo conocimientos necesarios no he escrito yo, si no que con un poquito de aquí y un poquito de allá he podido implementar en el programa. Dime que aspectos te interesa comentar y lo hacemos.

x PICmouse, es mi primer robot y lo que conozco de los controles PID es lo que he leido en este foro y otros. A mi manera, pero si, si uso un control PID. Con lo de "a mi manera" me refiero a que mi implementación del dicho control no sé si será todo lo ortodoxa que debería pero creo que queda demostrado que eficaz si lo es :)  Podemos comentarlo si te apetece.



Un saludo...
 




Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3594
Re: Robot equilibrista
« Respuesta #213 en: 19 de Febrero de 2009, 19:45:53 »
Yo estoy muy interesado en el tema del filtro de Kalman. ¿Podrías indicar como lo has implementado?

Gracias y un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Safareig

  • PIC10
  • *
  • Mensajes: 26
Re: Robot equilibrista
« Respuesta #214 en: 20 de Febrero de 2009, 15:42:01 »
Hola jfh900

Una de las cosas mas importantes es que el cálculo del ángulo de inclinación sea lo mas real posible. Este cálculo se hace usando esta fórmula "angulo = angulo + (gyro * tiempo);" Donde "angulo" es la inclinación en radianes, "gyro" la velocidad angular en radianes/segundo y "tiempo" es el tiempo en segundos transcurrido entre cada llamada a dicha fórmula.
A groso modo, si al leer el giroscopio tenemos una velocidad angular de 0.5 rad/seg y desde la anterior lectura han pasado 0.1 seg significa que nos hemos inclinado 0.05 radianes. Esta inclinación se la sumamos a la que teniamos en el bucle anterior y así sucesivamente.

angulo actual = angulo anterior + (0.5rad/s * 0.1s) => angulo actual = angulo anterior + 0.05


Este sistema de cálculo tiene dos problemas importantes, uno es que nunca sabemos cual es el ángulo de partida y el otro es que los giroscopios tienen una deriva en el tiempo por lo que hay que buscar una manera de ir actualizando el valor del ángulo calculado de alguna forma.
La forma de hacerlo es con el acelerómetro, que a su vez tiene un "pro" y un "contra". El "pro" es que no tiene deriva y en condiciones de aceleración cero el ángulo que podemos calcular con su lectura es bastante certero. El "contra" es que en condiciones de aceleración y/o vibración el ángulo que podremos determinar no será todo lo acertado que necesitamos.

Así que hay que buscar un sistema que nos permita reducir al mínimo el efecto de la deriva del giroscopio y "creernos" al acelerómetro solo en ciertas condiciones. (mínima aceleración)
Para realizar esto probé distintas soluciones pero lo que mejor funcionó es el famosso filtro Kalman.

Encontré un ejemplo de filtro Kalman para un eje de inclinación usando un acelerómetro de dos ejes y un giroscopio. tilt.c y tilt.h
Son dos funciones, una de ellas se encarga (entre otras cosas) de calcular el ángulo de inclinación por el método que he comentado arriba "angulo += gyro * tiempo". La otra, entre otras cosas, "refresca" el valor de "angulo" con la lectura del acelerómetro y calcula un valor de error para el giroscopio (bias), de forma que puede eliminar la deriva antes comentada.   
He intentado entender el filtro kalman leyendo todo lo que he encontrado sobre él y para ser sincero tengo que decir que como mucho me hago una ligera idea de como funciona pero de ninguna forma lo entiendo completamente. Mi consejo es que leas sobre él, matrices de covarianza y que con el código de ejemplo te puedas hacer una idea de como y porqué funciona.

Te pego las dos funciones tal y como las estoy empleando en mi bot. Podemos ir comentandolas si quieres.

Código: [Seleccionar]
// Variables globales
float P[2][2] = { { 1, 0 }, { 0, 1 }, };
float R_angle = 0.3;
float Q_angle = 0.001;
float Q_gyro = 0.003;

float q_bias, angulo, gyro, tiempo;

void state_update( void )
{
float Pdot[4];

Pdot[0]= Q_angle - P[0][1] - P[1][0];
Pdot[1]= -P[1][1];
Pdot[2]= -P[1][1];
Pdot[3]= Q_gyro;

gyro -= q_bias;
angulo += gyro * tiempo;

P[0][0] += Pdot[0] * tiempo;
P[0][1] += Pdot[1] * tiempo;
P[1][0] += Pdot[2] * tiempo;
P[1][1] += Pdot[3] * tiempo;
}


void kalman_update( float angle_m )
{
float K_0;
float K_1;

K_0 = P[0][0] / (R_angle + P[0][0]);
K_1 = P[1][0] / (R_angle + P[0][0]);

P[0][0] -= K_0 * P[0][0];
P[0][1] -= K_0 * P[0][1];
P[1][0] -= K_1 * P[0][0];
P[1][1] -= K_1 * P[0][1];

angulo += K_0 * (angle_m - angulo);
q_bias += K_1 * (angle_m - angulo);
}


Un saludo...

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Robot equilibrista
« Respuesta #215 en: 21 de Febrero de 2009, 08:21:56 »
En este blog están también intentando crear un segway: http://www.ohscope.com/

Y en esta entrada comentan los resultados obtenidos con distintos tipos de filtrado: http://www.ohscope.com/2009/02/b-b-b-balancing.html

Indicando que se han basado en el material disponible en esta otra página web dedicada también a un segway DIY: http://web.mit.edu/first/segway/

Y concretamente a los PDF que se encuentran en este archivo: http://web.mit.edu/first/segway/segspecs.zip

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3574
    • Juntos es mejor
Re: Robot equilibrista
« Respuesta #216 en: 22 de Febrero de 2009, 23:02:18 »
Hola!

Safareig, muchas gracias por la informacion del filtro que implementaste. Seguro que me tocara usar ese filtro para que esto ande bien.

jfmateos2 . Tambien te quiero agradecer por tan buenos links...Son una gran fuente de informacion.

GRACIAS!

EDITO:

Encontre este link...

http://www.dprg.org/projects/2003-01a/
« Última modificación: 22 de Febrero de 2009, 23:11:22 por PICmouse »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3367
    • PICKEY ELECTRÓNICA
Re: Robot equilibrista
« Respuesta #217 en: 27 de Febrero de 2009, 21:02:47 »
Yo tambien me uno a las felicitaciones, quedo realmente bien. :-)
Saludos desde Granada, España.

Desconectado D@rio

  • PIC10
  • *
  • Mensajes: 14
    • roboticayelectronica
Re: Robot equilibrista
« Respuesta #218 en: 28 de Febrero de 2009, 01:57:46 »
este bot estamuy bueno, es un exelente trabajo!!! ¡mis felicitaciones amigo!!!  :o :mrgreen:
nueva info en internet http://roboticayelectronica.es.tl

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Robot equilibrista
« Respuesta #219 en: 02 de Marzo de 2009, 08:18:25 »
Bravo por esa integración de conceptos de física, mecánica, electrónica, control y programación!!! :)

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: Robot equilibrista
« Respuesta #220 en: 02 de Marzo de 2009, 10:01:22 »
Me uno a la envidia y la felicitación  :-/ :-/ :-/
Espero ver la verión "grande" y a tí subido en él.
Felicidades, inmenso proyecto.
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Robot equilibrista
« Respuesta #221 en: 30 de Marzo de 2009, 17:46:41 »
Saludos! Creo que no se ha hablado a lo largo del tema, he visto tambien este tipo de robots con un sensor de infrarrojos sharp GP2D12, que permite medir distancias.

En esta pagina puede verse hecho con un Lego,creo,  hecho:

Robot equilibrio Lego

Hay mas robots de este tipo hechos con un infrarrojo, pero ahora solo encuentro que permanezcan en equilibrio ¿es posible que un robot de este tipo ande manteniendo el equilibrio? Es que ya no sé si he visto alguno que se pudiera dirigir, o la mente me juega una mala pasada
Saludos desde Córdoba, españa

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #222 en: 30 de Marzo de 2009, 22:19:44 »
Saludos! Creo que no se ha hablado a lo largo del tema, he visto tambien este tipo de robots con un sensor de infrarrojos sharp GP2D12, que permite medir distancias.

En esta pagina puede verse hecho con un Lego,creo,  hecho:

Robot equilibrio Lego

Hay mas robots de este tipo hechos con un infrarrojo, pero ahora solo encuentro que permanezcan en equilibrio ¿es posible que un robot de este tipo ande manteniendo el equilibrio? Es que ya no sé si he visto alguno que se pudiera dirigir, o la mente me juega una mala pasada

Pero q pasa con ese robot en superficies inclinadas? jeje

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Robot equilibrista
« Respuesta #223 en: 31 de Marzo de 2009, 14:17:36 »
Pues si, no lo habia pensado. De todas formas mi interes por este tipo de robots es que si permite controlar el desplazamiento, que no sé si puede, puedes hacerlo con solo el sensor de ir y no necesitas acelerometro ni inclinometro, mas a modo de curiosidad que por practicidad.
Saludos desde Córdoba, españa

Desconectado Safareig

  • PIC10
  • *
  • Mensajes: 26
Re: Robot equilibrista
« Respuesta #224 en: 31 de Marzo de 2009, 16:21:06 »
Hola kain589
De todas formas mi interes por este tipo de robots es que si permite controlar el desplazamiento, que no sé si puede...

Claro que puedes controlar su desplazamiento. ¿Has visto este video una página mas atrás?


Un saludo...


 

anything