fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Duda prueba de velo...
 
Avisos
Vaciar todo

Duda prueba de velocistas.

38 Respuestas
4 Usuarios
0 Reactions
8,741 Visitas
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

Hola, una pregunta para los que han participado en anteriores velocistas. Según el reglamento del cosmobot, la prueba concluye cuando:

1. Sea capaz de alcanzar a su contrincante.

Qué se entiende por alcanzar al contrincante, acercarse una distacia dada, o impactar contra el otro velocista. Porque si se tienen que tocar yo me quedo sin sensores.

Responder
37 respuestas
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 19 años

...Lo de detectar al oponente lo decía porque me parece que había dos lineas y lo mismo el robot para por el lado y ni se entera...

Imagino que si los velocistas van por lineas diferentes será el juez/arbitro el que a ojo decida cuando un robot alcanza al otro... habría que preguntarlo... en ese caso es mucho mas complicado detectar al contrincante ya que requiere montar varios sensores para mirar al frente, izquierda y derecha.... ¿tu te atreverias a cambiar de carril para "pillar" al otro?... yo no... 😀

furri.

Responder
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

Respecto a los escaneos del libro la verdad es que está muy bien y te da una idea bastante completa de lo que es un PID y como se debe de implementar, solo añadir que en pseudocódigo ya ocupa 9 lineas, y eso sin implementar la función SetPWM que es la que tiene que tener en cuenta como actuar sobre la variable a controlar, imagina en C.

Saludos a todos!

A ver voy a intentar escribir un controlador PD, suficiente para controlar un seguidor, a ver si sale tan complicado. Dime en que me equivoco.

Tenemos 8 sensores, y para hallar la señal de error, usamos o hacemos este cálculo, http://www.webdearde.com/modules.php?na ... 2&start=10

para lo cual nos creamos una función, obtener_error(); que nos devuelve el valor del error leído por los sensores, leyendo los sensores uno a uno, y hallando el error medio, de la manera que ahí se indica.

El regulador no sería el siguiente, tomamos el set point ahí indicado como 0.

Variables declaradas inicializadas a 0

while(1)
{
error_sensor= obtener_error();

media_error= error_sensor - error_sensor_old;
salida= error_sensor*Kp + media_error*Kr;

corregir_error(salida);
error_sensor_old= error_sensor;
}

corregir_error() sería una función que simplemente suma el valor salida a nuestro valor asignado de pwm para el set point.

La parte difícil es hallar las K, que para ello se realiza toda la teoría, pero que aquí se realiza de manera experimental siguiendo los pasos indicados.

Decidme que es lo que no funciona aquí, o como lo haríais.

Estoy calculando en el caso de una señal de error continuo, habría que verlo en discreto.

Responder
fj_sanchez
Respuestas: 1083
(@fj_sanchez)
Ardero
Registrado: hace 19 años

while(1)
{
error_sensor= obtener_error();

media_error= error_sensor - error_sensor_old;
salida= error_sensor*Kp + media_error*Kr;

corregir_error(salida);
error_sensor_old= error_sensor;
}

corregir_error() sería una función que simplemente suma el valor salida a nuestro valor asignado de pwm para el set point.

La parte difícil es hallar las K, que para ello se realiza toda la teoría, pero que aquí se realiza de manera experimental siguiendo los pasos indicados.

Decidme que es lo que no funciona aquí, o como lo haríais.

Estoy calculando en el caso de una señal de error continuo, habría que verlo en discreto.

Bueno, principalmente la aproximación de t=1 a mi no me gusta... llámame tiquismiquis si quieres, pero creo que si tenemos a nuestra disposición timers deberían de usarse y usar una derivada mucho más exacta. Luego estamos hablando de regular un motor por PWM, muy bien, pero controlar la dirección de una tracción diferencial sería un poco más difícil. Si es Ackerman no es tan difícil.

Para calcular las K hay varios métodos simples que dan muy buenos resultados, yo lo que haré será simular primero para hallar una aproximación de las Ks, y partiendo de esa aproximación usar el método de prueba y error hasta que obtenga buenos resultados.

También hay que tener en cuenta la velocidad de sampling quetenemos... aquí nada es continuo, todo es discreto 😉

Saludos!

Responder
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

Un servo de dirección lo controlas por una señal pwm, y la señal salida es la que se adapta al error de entrada, es el mismo caso que el pwm del motor. Cada uno tendrá sus Ks.

Tengamos en cuenta que la velocidad la podemos hacer constante (no hay pendientes), dando valores fijos de pwm en situaciones detectables por el hard (curva o recta, tener línea o no).

A mi la aproximación a uno si me parece buena, ya que el programa se ejecuta de forma periódica, y en cada paso restamos el error presente con el anterior, en cierto modo es independiente del tiempo para un valor de K.

Esto anterior no lo he probado, pero es más o menos la idea que tengo de hacerlo. Y al final si me han salido 4 líneas...

Respecto a simular, ya me dirás de donde sacas el modelo de la planta.

Puede que como decís este muy equivocado, y necesite hacer mucho más. Pero como mínimo creo que podríais darme una explicación de que es lo que hago mal, y decidme donde me equivoco. Creo que lo mínimo es una crítica constructiva, siempre mejor que la burla (no me refiero a tí).

Responder
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 19 años

El problema que le veo a un control Pd con 8 sensores es que el cambio de leer por ejemplo con el sensor 5 al sensor 6 puede deberse a un desplazamiento de 1mm o uno de 20mm por lo que el cálculo de la velocidad de este cambio está sujeta a un error bastante apañado y bueno... de alguna forma hay que redondear.... media, t=1...

Responder
Página 7 / 8
Compartir: