En clases anteriores habíamos revisado cómo obtener el modelo cinemático de un robot tipo un ciclo es
decir relacionar la posición de interés en el eje de coordenadas x con respecto a las velocidades globales
del robot es decir la velocidad lineal y la velocidad angular.
Para ello necesitamos calcular en primer lugar las velocidades lineales de los actuadores.
Como podemos observar aquí la velocidad lineal de la derecha y la velocidad lineal de la izquierda.
Para esto nosotros vamos a utilizar Arduino y vamos a ver cómo calcular estas velocidades globales.
En primer lugar vamos a armar el siguiente circuito.
Anteriormente habíamos revisado que vamos a utilizar un motor el cual tiene acoplado un sensor de tipo
magnético el cual me va a permitir obtener la velocidad de cada uno de los motores.
Entonces acá tenemos la conexión acá podemos ver la distribución de pines de este tipo de Incoder que
estamos utilizando y acá vamos a utilizar también una batería de tres celdas que aproximadamente me
arroja unos 11.1 voltios y como pueden ver adicionalmente acabamos de utilizar un módulo de Bluetooth
para comunicarnos de manera inalámbrica con el computador y para la parte de potencia podemos ver acá
que vamos a utilizar un módulo puente HL2 98 y como nuestro controlador tenemos acá el Arduino Nano
entonces tenemos que armar este circuito y luego nos vamos a programar en Arduino.
Al finalizar vamos a tener algo similar a esto es el robot que vamos a estar utilizando para realizar
nuestras pruebas.
En primer lugar vamos a cargar la librería la cual me va a permitir activar las interrupciones especiales
que tiene Arduino.
Esto debido a que ya vamos a utilizar dos motores por lo tanto necesitamos cuatro interrupciones para
leer los dos encuadres que tenemos conectados en los motores.
Luego acá podemos ver esto ya lo habíamos visto es la parte de Comunicación Serial en nuestro caso vamos
a estar enviando dos datos por el puerto serial separados por una coma.
Acá tenemos las variables para el motor derecho como acá tenemos la asignación de pines tanto del Incoder
como del módulo de potencia para el control de los motores.
Acá tenemos el contador para calcular las revoluciones por minuto.
Acá en cambio tenemos ya la distribución de pines para el motor izquierdo tenemos nuestro tiempo de
muestreo que tenemos aquí como lo pueden ver acá tenemos ya las variables que me van a permitir obtener
la velocidad lineal y angular.
Y bueno acá estas variables de aquí la vamos a utilizar porque vamos a aplicar un filtro recursivo a
quien arruino para suavizar la señal y evitar el ruido.
Acá tenemos como podemos observar tenemos ya los voltajes que vamos a aplicar a los motores en este
caso vamos a trabajar solamente con un control en lazo abierto ya en la siguiente clase vamos a implementar
un controlador peude para compensar la dinámica de nuestro de nuestro robot entonces tenemos aquí las
variables de doble beberme que vamos a aplicar y también vamos a calcular la velocidad lineal de la
llanta derecha y de la llanta izquierda como la habíamos mencionado aquí o en estos valores que tenemos
aquí.
Este de aquí es una constante que me va a permitir realizar el filtro.
Entonces eso ya lo vamos a estar revisando cuando apliquemos el filtro las PPR que ya habíamos calculado
y acá tenemos estas constantes que ven aquí van a ser el resultado de obtenerla mediante las variables
que nosotros tengamos el robot.
Para ello vamos a visitar la siguiente mi página web y vamos a encontrar más detalle cómo calcular esto
entonces en la clase anterior habíamos revisado cómo calcular la velocidad angular en revoluciones por
minuto y aquí teníamos la fórmula.
Luego acá más abajo podemos observar las fórmulas que se utilizan para calcular la velocidad angular
en radianes y luego calcular la velocidad lineal en metros por segundo como podemos observar acá tenemos
la fórmula entonces debemos unir todas estas fórmulas y vamos a obtener un valor constante para no realizar
todo todo este proceso de multiplicaciones y divisiones para mejorar el algoritmo.
En Arduino y sea mucho más más rápido entonces para no hacer todo este cálculo vamos a sacar una constante.
Entonces en primer lugar tendríamos como constante este valor de 60.
También está esta era que las revoluciones del Incoder también es una constante y acá podemos ver que
también tenemos dos piques una constante y este 60 también.
Pero como vemos acá si lo ubicamos acá ya se eliminaría con este 60.
Y bueno acá tendríamos también otra constante que vendría a ser el radio de la llanta.
Entonces estas constantes ya ya las tenemos entonces no vamos a hacer todas esas multiplicaciones y
vamos a unir desde aquí y llegar a esta fórmula de acá.
Entonces si reemplazamos todo eso vamos a ver que lo único que va a ir variando va a ser en este caso
el tiempo y también va a ir variando este valor de n minúscula porque va a ir contando los pulsos que
va generando en un determinado tiempo entonces solo esos dos valores van a ir cambiando los demás se
mantendría como una constante entonces vamos a realizar las multiplicaciones y divisiones respectivas
para encontrar ese valor.
Entonces ese valor que he encontrado es el siguiente acá tenemos este valor el valor es de cero punto
cero 63 uno bueno en este caso también tengo otra constante Bueno eso puede ir variando dependiendo
de nuestro robot y en ese caso ya lo vamos a lo vamos a ver más abajo para tener en claro estos valores
constantes y otra de las constantes que vamos a necesitar es la distancia entre las llantas.
Entonces las medidas que vamos a necesitar de nuestro robot van a ser la distancia entre las ruedas
como pueden ver acá.
Acá tenemos la distancia tenemos esta distancia que va de la rueda derecha hacia la izquierda como pueden
ver ahí la medida es de 20.5 centímetros pero ojo como estamos trabajando con unidades en metros debemos
convertir esas a esas unidades.
Entonces el valor sería cero punto 205 como podemos observar acá.
Otra de las de los valores que necesitamos saber de nuestro robot es es la radio de la llanta entonces
vamos a proceder a medir y como pueden observar aquí tenemos un valor de 6 punto 7 centímetros entonces
también debemos convertirlo a metros que sería un valor de cero punto cero sesenta y siete.
Entonces esos valores también están ingresados aquí en esta constante.
Listo entonces una vez aclarado eso vamos a continuar aquí vamos a la configuración tenemos la configuración
del puerto serial a 9600 baudios vamos a configurar los pines que son de entrada y de salida y también
vamos a inicializar en cero para comenzar con el motor totalmente apagado entonces acá tenemos ya la
interrupción que ya habíamos visto y adicionalmente acá vemos un cambio que es el uso de la librería
que les había mencionado al comienzo para utilizarlos las interrupciones que tienen Arduino unas interrupciones
especiales acá tenemos el tiempo de muestreo que va a ser de 100 milisegundos y acá podemos ver ya la
parte de recepción de datos como lo habíamos visto y lo vamos a almacenar aquí en la variable de voltaje
de la llanta derecha y de la llanta izquierda.
Luego acá tenemos una función que vamos a estar llamando y se va a ejecutar cada 100 milisegundos el
que me va a permitir calcular las velocidades que habíamos visto entonces acá tenemos ya esta función
y podemos ver aquí calculamos la velocidad de la llanta derecha y de la llanta izquierda esto es la
velocidad lineal de cada una de las llantas y como pueden observar aquí tenemos el valor de la constante
por los valores que había mencionado que van a cambiar que era el contador y también el tiempo entonces
eso va a ir variando los demás se mantiene como una constante y luego cayó lo habíamos visto todo esto
también y acá como podemos observar tenemos ya la fórmula con la cual podemos calcular la velocidad
lineal y la velocidad angular.
Esto ya lo habíamos visto en el modelamiento que era la velocidad de la llanta derecha más la velocidad
de la llanta izquierda dividido parados y acá podemos observar en cambio la velocidad angular que es
igual a la velocidad de la llanta derecha menos la izquierda dividido para la distancia entre las ruedas.
Algo adicional que hay que mencionar es que tienen unas operaciones adicionales esto de aquí es un filtro
todo lo que necesitamos saber de esto también lo voy a dejar en mi página web.
Ahí está la descripción de cómo se puede utilizar este filtro y su funcionamiento entonces vamos a ver
brevemente cómo aplicar este filtro.
Bueno aquí podemos observar la descripción de este tipo de filtro como vemos un filtro pasa bajos que
van a permitir atenuar el ruido presente en las señales.
Entonces acá tenemos su fórmula.
Como ven es muy sencilla de aplicar y acá podemos ver la implementación cómo se va suavizando la señal.
Medidas como pueden ver aquí lo que debemos saber es que este valor de Alfa es un factor de suavizado
entre 0 y 1 mientras más cerca esté de uno el suavizado será muy poco.
Pero mientras nos acercamos a cero como pueden ver existe un pequeño retardo en la señal.
Entonces ese valor hay que tomar dependiendo de nuestras consideraciones yo he tomado un valor de 0.7.
Ustedes podrían variarlo no habría ningún problema dependiendo cómo se comporte su motores con los que
han conseguido entonces acá estamos aplicando el filtro y luego acá como podemos observar estamos calculando
el valor absoluto del voltaje de la llanta derecha y de la llanta izquierda.
Esto debido a que nosotros vamos a ingresar tanto valores negativos como positivos pero el doble de
arruino simplemente puede variar de 0 a 2:55.
Otra de las cosas que vamos a estar viendo que el motor no va a girar a un problema determinado debido
a que no vence todavía la inercia el motor.
Aquí comparamos si el voltaje es mayor o menor y vamos a invertir los pines con los cuales controlamos
el sentido del giro del motor tanto para la llanta derecha como la llanta izquierda como podemos ver
aquí.
Luego vamos a aplicar aquí como pueden ver las señales de doble B.M. tanto de la llanta izquierda como
la derecha.
Luego acá simplemente vamos a imprimir para ver qué velocidad estamos obteniendo y esto ya lo habíamos
revisado también ya lo habíamos visto y también lo habíamos visto y como pueden ver acá acá hay un cambio.
Aquí vamos a revisar que tenemos ya otro Ohm otra función en Cooder y en este caso como ven difiere
con los valores que tenemos acá.
Esto debido a que estamos utilizando ya los otros pines siguientes para obtener la lectura de los códigos
entonces ya habíamos revisado cómo obtener este valor y también estos valores que tenemos aquí con la
tabla que habíamos revisado anteriormente.
Entonces lo podemos hacer de la siguiente manera podríamos utilizar incluso otros otros pines dependiendo
por ejemplo si tienen otro robot en el cual por ejemplo tenemos el robot omnidireccional que tiene tres
ruedas tendríamos que aumentar otro.
Otra función en Cooder entonces listo ya hemos revisado toda la parte de programación lo vamos a cargar
al Arduino y vamos a observar los resultados.
Entonces como pueden ver acá ya tenemos el robot y vamos a enviar los valores de doble B.M. hacia nuestro
motor.
Vamos a probar con valores primero de 30 vamos a poner un valor de 30 para ambos motores y como pueden
observar el motor no gira apenas emite un sonido pero no está girando porque no vence la inercia no
es suficiente la señal de voltaje para que los motores comiencen a girar.
Entonces vamos a probar como 50 como pueden observar nada no sucede nada entonces el problema que tenemos
en la parte de control en lazo abierto no vamos a poder regular la velocidad de una manera estable entonces
vamos a probar con ochenta coma ochenta y pueden ver que ahí ya empieza a girar nuestro robot y bueno
en este caso estamos mandando a velocidades positivas y como pueden ver ahí tenemos el cálculo de la
velocidad lineal y la velocidad angular.
En este caso nosotros solamente estamos considerando un control en lazo abierto por ello acá vemos que
este valor va variando porque puede que estos dos motores sean del mismo fabricante pero tal vez no
tengan las mismas características entonces puede ir variando este valor.
Entonces vamos a mandarle el tope que sería 2:55 perdón.
Aquí he puesto 2:25 2:55 y pueden ver que esa es la mayor velocidad que podemos obtener entonces acá
tenemos una velocidad de cero punto tres metros sobre segundos y acá tenemos también como pueden ver
está apareciendo una velocidad angular.
Entonces lo que vamos a hacer ahora es invertir el giro vamos a enviar unas velocidades negativas y
vamos a ver que obtenemos la velocidad negativa.
Tenemos aquí la velocidad lineal de menos 0.28 luego vamos a enviar 2:55 a la una llanta y menos 2:55
a la otra llanta y vamos a observar que ahí tendríamos velocidad angular como pueden observar tenemos
acá la velocidad angular de 2 punto 8 radianes sobre segundos esa sería la velocidad que tenemos vamos
a cambiar el sentido de rotación.
Vamos a enviar este valor y cómo pueden ver ahí tenemos en cambio un valor negativo y ahora lo que vamos
a hacer es mandar otra vez los valores de 50 y como pueden observar en este caso solamente está girando
este motor de acá y el de acá no gira entonces es el pequeño inconveniente que vamos a tener entonces
aquí esto lo vamos a solucionar ya en la siguiente clase implementando un control en lazo cerrado.