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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Robot equilibrista
« Respuesta #270 en: 22 de Octubre de 2009, 16:29:47 »
En realidad parece que todo se reduce en hacer lo que ya explicó Safareig: confiar un poco en el acelerómetro y un mucho en el giróscopo.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #271 en: 01 de Diciembre de 2009, 16:43:47 »
Hola amigos!!! que tal??
Les cuento q me acaban de llegar unas cositas de sparkfun. Mas especificamente un gyro, y unos motorcitos con sus encoders :lol: (otro dia subo unas fotos, es q donde estoy ahora la conexion no es buena).
Asiq me voy a lanzar a hacer mi robot de dos ruedas. Ya tengo una idea general de como voy a armarlo y todo eso. Pienso usar un pic16f877a, y un modulito bluetooth q tengo para hacer adquisicion de datos remota, y en un futuro control remoto :)

Estuve leyendo otros proyectos y la mayoria hacen el calculo basado en el acelerometro y gyro pero sin encoder. Y creo q esto puede traer problemas cuando el bot se encuentre con un obstaculo o algun plano inclinado.
El problema es q no se como utilizar los datos del encoder en el algoritmo. En este sitio hay un diagrama y lo q hace es sumar la inclinacion y la velocidad de las ruedas, y de ahi calcula el torque del motor, pero me parece q no va a andar.
Creo q seria mejor hacer un pid q tenga como entrada la inclinacion y como salida la velocidad a la q debe girar el motor. Y otro pid q tenga como entrada la salida del anterior (velocidad deseada), y como salida la velocidad real del motor. No se si se entiende. Si puedo mas tarde subo un diagrama.
Ustedes que opinan?? desde ya gracias por su rta! :D

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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Robot equilibrista
« Respuesta #272 en: 05 de Enero de 2010, 15:39:53 »
Hola a todos.

Estoy intentando implementar el filtro de Kalman, según las ecuaciones de Safareig y ya las tengo pasadas a Delphi, para un proyecto de educación que cuando lo termine subiré un vídeo y me encuentro que no se cuales son las variables que tengo que utilizar, ¿donde pongo el valor del giroscopio y donde pongo el valor del acelerómetro? y ¿en que valor me devuelve el valor correcto de la medición?. Seria interesante modificar las funciones para poder tener una llamada del tipo: angulo = kalman(giroscopio,acelerómetro), que es totalmente intuitiva su utilización.

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 #273 en: 07 de Enero de 2010, 10:49:16 »
Hola,

jfh900, supongo que te refieres a las dos funciones que pegué unas páginas mas atrás.

Código: [Seleccionar]
// Constantes
#define R_angle = 0.3;
#define Q_angle = 0.001;
#define Q_gyro = 0.003;
#define tiempo = 0.01;

// Variables globales
float P[2][2] = { { 1, 0 }, { 0, 1 }, };
float q_bias, angulo, gyro;


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);
}


A ver si se explicarme. Así lo entiendo yo.
Para empezar hay tres variables globales que son: "angulo", "gyro" y "q_bias" donde:
"angulo" es la varialble que contendrá el resultado del algoritmo y te da el ángulo de inclinación en radianes.
"gyro" es la variable que contendrá la velocidad angular a la que el robot se está inclinando. En radianes/segundo.
"q_bias" está variable contiene el valor de error (desviación) que se supone tiene el giroscopio y que el algoritmo va calculando y eliminando de la lectura que obtienes del giroscopio.

Luego tienes las dos funciones, "state_update(void)" y "kalman_update(float angle_m)" cada una de ellas tiene una misión. Las vemos mas al detalle:

Función "state_update(void)"
Esta función calcula una ángulo estimado "angulo" y la velocidad angular de inclinación "gyro" una vez se le ha quitado la desviación. "gyro" es la lectura del giroscopio en radianes por segundo (rd/s).
Otra característica de esta función es que hay que llamarla en espacios delimitados de tiempo, por ejemplo con una frecuencia de 100 veces por segundo, lo que significa que la constante "tiempo" deberá valer en este caso 0.01 segundos. La explicación es sencilla, la variable "angulo" se actualiza por medio de esta operación "angulo += gyro * tiempo" o lo que es lo mismo, angulo actual es igual al angulo calculado en el anterior ciclo, mas la distancia en radianes que nos hemos inclinado un tiempo de 0,01seg y que se calcula haciendo "gyro * tiempo" o lo que es lo mismo "velocidad angular * tiempo de ciclo"  

Función "kalman_update(float angle_m)"
Esta función refresca el algoritmo y las variables globales "angulo" y "q_bias" Básicamente arregla el error de estimación de la variable "angulo" que se va calculando con la anterior función y calcula un valor de error "q_bias". Se le pasa un valor "angle_m" que es el ángulo calculado con el acelerómetro en radianes. Este ángulo se puede calcular con solo un eje del acelerómetro o con los dos. Si es con un solo eje sería así: "angle_m = asin(lectura_eje_en_fuerza_g)", si es con los dos ejes sería así: "angle_m = atan2(lectura_ejeY_en_fuerza_g, lectura_ejeX_en_fuerza_g)"
De cualquiera de las dos formas la variable "angle_m" contendrá el ángulo de inclinación en radianes según el acelerómetro.  
A diferencia de la función "state_update()" a esta función "kalman_update(float angle_m)" no es necesario llamarla en cada ciclo de programa o cada 0.01 segundos. Como he dicho antes esta función "refresca" de alguna manera las desviaciones de ángulo calculadas y lo hace utilizando el acelerómetro como referencia, por lo que podríamos llamarla solo cuando el robot estubiera sometido a pocas aceleraciones, vibraciones, etc.



x gera

Lo que puedes hacer es centrarte en el algoritmo pid que hace que se mantenga el equilibrio, una vez conseguido quizás veas mas claro como introducir los datos de los encoders.



Un saludo...
« Última modificación: 18 de Enero de 2010, 10:59:14 por Safareig »

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #274 en: 08 de Enero de 2010, 15:16:24 »
Gracias Safareig! Me parece q voy a hacer eso, ya me estoy preocupando por problemas q todavia no tengo jaja.
Bueno, si cuando llegue a ese punto tengo algun problema, les planteo la duda puntual. Gracias y saludos!

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

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Robot equilibrista
« Respuesta #275 en: 18 de Enero de 2010, 15:27:28 »
Hola Gera,

Una consulta, conseguiste los componentes de Sparkfun en Argentina¿?
Porque me trajo un amigo que estuvo de visita de España, un giróscopo de Sparkfun, pero resulta que se me daño una de las pistas; y no se si lograré repararlo, por lo que estoy considerando comprar uno nuevo. Conseguí un comercio de Córdoba, que aparentemente son distribuidores, pero todavía no tuve respuesta.

Gracias!
Saludos.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #276 en: 18 de Enero de 2010, 15:56:35 »
Hola marito!!
El gyro efectivamente lo compre a los muchachos de sparkfun. Pero lamentablemente no lo he podido hacer funcionar. Al parecer vino defectuoso (o lo rompi sin darme cuenta, aunq lo dudo). Estoy muy indignado por eso porq entre el envio y todo me salio bastante carito.
En cordoba podes consultar con los chicos de electrocomponentes que son distribuidores. Si tenes suerte avisame por favor, asi veo de comprar otro porq lo necesito para mi tesis.
saludos!!

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

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Robot equilibrista
« Respuesta #277 en: 18 de Enero de 2010, 16:07:55 »
muy bieeeen gera!!!! queremos ver avances!!! vamos!!! vamos!!! (alaro que no es meter presion! jaja)
saludos y exitos!
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Robot equilibrista
« Respuesta #278 en: 18 de Enero de 2010, 16:13:06 »
Hola Gera,

Consulte a Electrocomponentes pero me dijeron que no venden giróscopios. No sabía que trabajaban con Sparkfun.
La gente de Córdoba que es representante Sparkfun es Control Comp, http://www.controlcomp.com/
Los llamé por teléfono y me dijeron que tienen algunos componentes, y que traen por pedidos. Quedaron en mandarme un correo hace una semana, pero todavía no lo recibí. En estos días llamaré de nuevo.
El giro que rompí, es el MLX 90609, Conecte Vcc, GND y Rate. Alimente con 5v y las lecturas tienen una pequeña variación contínua aún estando en reposo. Apenas lo alimento, mido 2,2v en la salida rate, y muy lentamente se va incrementando de a 0,1v. Lo raro es que el valor debería ser de 2,5v estando en reposo y alimentando con 5v. Pienso que lo que puede meter ruido es que estoy alimentando con una fuente de PC que entrega 5,15v. Es lo único que por ahora encuentro.
Que defecto tiene tu giro?
Saludos.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Robot equilibrista
« Respuesta #279 en: 18 de Enero de 2010, 16:17:53 »
Perdón, una aclaración, las pruebas que mencione, fueron antes del desperfecto. La rotura se produjo cuando intente soldar las patitas de conexión y se me desprendio una pista.

Saludos!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #280 en: 18 de Enero de 2010, 22:49:25 »
El mio directamente no anda... solo muestra ruido en la salida. En la hoja de datos dice q son muy fragiles estos integrados, asiq tal vez fue un golpe o vaya a saber por q no anda.
Los de sparkfun me ofrecieron q les envie este y si no lo podian hacer funcionar me mandaban otro, pero se me va a ir muchisima plata en envio nomas, asiq no me conviene.. la verdad q no se q hacer. El integrado lo necesito para mi tesis, q mala suerte tengo!! jeje
saludos!

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

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Robot equilibrista
« Respuesta #281 en: 19 de Enero de 2010, 08:55:54 »
Hola Gera, me contestaron de Control Comp (Córdoba). Tienen giros Sparfun de 1 eje 75-150-300 gr/seg. Los precios son cercanos a los que manejan en europa.
Saludos

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Robot equilibrista
« Respuesta #282 en: 19 de Enero de 2010, 09:07:04 »
Uuu... que mala suerte gera  :( Fue mucho gasto para que termine así, los muchachos de sparkfun deberian hacerse cargo de los $ del envío  :?

Hola Gera, me contestaron de Control Comp (Córdoba). Tienen giros Sparfun de 1 eje 75-150-300 gr/seg. Los precios son cercanos a los que manejan en europa.
Saludos

Una muy buena data! Gracias marito!


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Robot equilibrista
« Respuesta #283 en: 19 de Enero de 2010, 10:17:08 »
Hola Gera, me contestaron de Control Comp (Córdoba). Tienen giros Sparfun de 1 eje 75-150-300 gr/seg. Los precios son cercanos a los que manejan en europa.
Saludos

Hmmm, interesante. Gracias por el dato marito, ahora les escribo un mail a ver cuanto me puede salir el envio hasta mendoza :)

Uuu... que mala suerte gera  :( Fue mucho gasto para que termine así, los muchachos de sparkfun deberian hacerse cargo de los $ del envío  :?

La verdad, fue una sorpresa bastante desagradable.. Y bueno, suficiente con q me hayan ofrecido revisar la placa y enviar otra. Son cosas q pasan no?

Saludos!!

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

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Robot equilibrista
« Respuesta #284 en: 27 de Enero de 2010, 09:16:37 »
Hola Gera!
Compraste el giroscopio?
Saludos.