-
Detalle sobre la generación y ejecución de trayectorias
05/01/2021 at 18:28 • 0 commentsSe estableció una rutina que permitió que el robot avanzara en una dirección establecida. Ya que el diseño del robot es simétrico, se pudo utilizar la misma rutina para los distintos movimientos descritos, únicamente modificando qué motor era el responsable de realizar qué movimiento. El gait escogido fue el creep, en el cuál se mantienen tres patas en contacto con el suelo; buscando mantener el centro de gravedad dentro del triángulo que forman.
Es importante que, al momento que se desee, se deben de mover los 4 motores de la base (los cuáles permiten la rotación de las patas) hacia atrás, y luego, devolver las patas a su posición neutral, siguiendo un patrón de movimiento, de forma que se mantenga la estabilidad del cuadrúpedo. Debido a que, nuestro segundo grado de libertad de la pata no funcionaba como rodilla, no se pudo utilizar completamente el gait mencionado, por lo que se realizaron modificaciones para su funcionamiento en el robot.Para las trayectorias, se obtuvieron empíricamente por medio del simulador diseñado, descrito en logs anteriores. El proceso se realizó haciendo uso de los sliders de la simulación para seguir el gait escogido y posteriormente las configuraciones encontradas fueron probadas en el controlador implementado en Webots. Las patas solo eran elevadas 15° para poder mantener una buena estabilidad y en el caso de que hubieran perturbaciones externas y el robot se desbalanceara, la caída no afectara su funcionamiento. En un principio, el movimiento de los cuatro motores para avanzar se realizaba con el mismo valor de ángulo, sin embargo, al hacer esto, después de cierto tiempo, el robot comenzaba a desviarse de una trayectoria recta. Por lo tanto, por medio de un proceso iterativo, se modificaron los valores que tomarían cada uno de los motores, lo cuál al final redujo hasta la mitad el valor de desviación. Finalmente, como se explicó anteriormente, los diferentes movimientos establecidos son redundantes, ya que utilizan el mismo patrón de movimiento. Los valores de ángulo asignado a los motores eran los que establecían qué movimiento se realizaría; estos valores eran de igual magnitud, pero eran asignados a diferentes motores para cada movimiento.
La ejecución de las trayectorias se realizó dentro de un controlador en lenguaje C, y en este, se definieron 4 arrays, los cuáles cada uno contenían las configuraciones necesarias para realizar un movimiento específico. Posteriormente, en el ciclo infinito, se revisó qué tecla fue oprimida para así, activar una bandera que generara el movimiento deseado. Al estar la bandera activada, esta habilitaba un contador, el cuál iba a recorrer el array y le asignaba a los motores la configuración requerida. Finalmente, al terminar la asignación, la bandera se apagaba para poder a realizar otro movimiento.
Algunos de los problemas encontrados para la simulación dentro de Webots fue la asignación de las propiedades físicas del robot; esto para que el entorno comprendiera dónde y cómo debía de actuar tanto la geometría del robot como las juntas rotacionales para apegarse al funcionamiento en la vida real. Esto ya que la gran cantidad de nodos que se debían emplear no dejaban en claro específicamente dónde asignar tales propiedades. Dentro del controlador del robot, el parámetro de TIME_STEP fue modificado, ya que no es posible emplear delays. Esto se hizo para que la asignación de cada configuración se realizara de forma secuencial, lo cual hizo que la simulación se realizara de forma lenta.
-
Video del funcionamiento completo del robot
05/01/2021 at 16:41 • 0 commentsAquí se presenta el funcionamiento del robot, el cual se realizó en la plataforma Webots. El robot era controlado por medio de las teclas 'w', 'a', 's' y 'd', las cuales hacían que el robot avanzara, se moviera a la izquierda, retrocediera y se moviera a la derecha respectivamente. Para demostrar el correcto diseño de estos movimientos se formó un cuadrado con el movimiento del robot, lo cual se presenta en el vídeo a continuación:
-
Visualización de la cinemática del robot
04/12/2021 at 03:49 • 0 commentsPara esta sección se desarrolló una interfaz gráfica de usuario en MATLAB, haciendo uso de la herramienta de App Designer. En esta interfaz, el usuario, a través de sliders, podría modificar los parámetros q1 y q2 de cada pata y ver este cambio reflejado en otra pantalla, la cual presenta un diagrama del robot. Esto se consiguió por medio del uso de la Robotics Toolbox de Peter Corke, en la cual se usaron principalmente su función SerialLink y su función plot(). Cabe resaltar que se restringieron los valores que podían tomar los sliders de q1 y q2 a un rango de -90° a 90° y de 0° a 90°, respectivamente. Esta GUI se encuentra en la carpeta Cuadrupedo_17075_17092.rar en la sección de Archivos, bajo el nombre de Simulacion_Cuadrupedo_17075_17092.mlappinstall, y una foto ejemplo de la GUI diseñada se presenta a continuación:
-
Rutinas de cinemática directa, diferencial y cinemática inversa
04/12/2021 at 03:48 • 0 commentsPara calcular la cinemática directa, diferencial e inversa de las patas, se desarrollaron tres diferentes códigos de MATLAB, los cuales se encuentran en la carpeta Cuadrupedo_17075_17092.rar de la sección de Archivos. Las rutinas fueron basadas en funciones creadas durante los laboratorios, y los nombres de estas se presentan a continuación:
- CuadrupedoFK ( q, numero_de_pata ) ----> Rutina correspondiente a la cinemática directa
- CuadrupeodJ ( q, numero_de_pata ) ----> Rutina correspondiente a la cinemática diferencial
- CuadrupedoIK (T, q0, completa_o_posicional, numero_de_pata ) ----> Rutina correspondiente a la cinemática inversa
Cada una de estas rutinas contiene el parámetro numero_de_pata, el cual permite elegir para que pata se quiere calcular la cinemática correspondiente, realizando la transformación de base correspondiente. Cabe resaltar que la cinemática directa es post-multiplicada por una transformación de herramienta para tomar en cuenta la forma extraña de la pata. Esta operación ya fue realizada en la respuesta obtenida de la rutina.
En la cinemática inversa se seleccionó el algoritmo de Levenberg-Marquadt con un lambda cuadrado igual a 0.001. Se escogió este método debido a su buena robustez con respecto a singularidades, además de presentar una convergencia lo suficientemente rápida. El parámetro de lambda fue escogido con la guía presentada en clase, en la cual se indicaba que este debía ser lo suficientemente pequeño pero mayor a cero.
-
Matrices de parámetros de DH y transformaciones de base
04/08/2021 at 03:33 • 0 commentsLa definición de los parámetros de la matriz de Denavit-Hartenberg se establece con el diseño físico de una pata del robot. Para ello, se considera la pata como un manipulador serial de 2 grados de libertad, con juntas de rotación. Orientando el eje +x hacia adelante del robot y el eje +z hacia arriba, se utilizó el assembly de Inventor 2019 para realizar las mediciones:
En la imagen anterior, se muestran las mediciones en conjunto con la dirección de los ejes en cada punto. Hay que notar que, solamente se tienen 2 motores (2 parámetros), pero, se desplazó el sistema de coordenadas al final de la pata, trabajando esas transformaciones como transformación de efector final (ya que nos interesa saber en dónde se ubica la punta de la pata). Estos datos generan la siguiente tabla de parámetros DH:
Siendo una matriz con un vector de configuración q de dos dimensiones. Esta matriz es útil para las 4 patas del robot; solamente se debe de tener en cuenta que, para las patas opuestas (lado derecho en este caso), un movimiento hacia adelante requiere el mismo ángulo theta, pero con signo opuesto.Con los mismos datos de Inventor, se obtiene la siguiente matriz de transformación de efector final:
Para la transformación de base, se midió el tamaño de la base respecto al eje del primer motor:
Además, el punto donde se rota se encuentra arriba de la base, por lo que se debe de considerar esta elevación para la transformación:
Además, el sistema de coordenadas de las patas se encentra rotado 45° (en distintas direcciones); esto para que la configuración inicial sea con las cuatro patas apuntando a los extremos de la base, y no a los lados. Con lo anterior, es posible obtener las matrices de transformación de base:
Esta matriz se repite para las 4 patas, siendo variable únicamente el signo de los valores (en dependencia del lado en el que se encuentren).
-
Power Budget y Selección de Fuente de Alimentación
03/13/2021 at 22:20 • 1 commentPara la selección de la fuente de alimentación (establecida como alámbrica en la selección de componentes) se realizó una sumatoria de las corrientes que exige cada componente eléctrico en el robot.
Las corrientes de los motores fueron encontradas en distintos datasheets (como por ejemplo la Datasheet de Open Circuit o los datos brindados por Proto Supplies ), así como una pequeña verificación física con uno de estos motores:
La corriente de 118.5mA se obtuvo al hacerle resistencia al giro del motor; sin embargo, al tener un rango máximo de 200mA, al pasarlos el multímetro no mostró medida, por lo que se tomaron los valores de 225mA en cada uno. Lo anterior se realizó con la idea de diseñar con sobre dimensionamiento. Con lo anterior se generó la siguiente tabla:
Por lo que la alimentación adecuada debe de poder brindar un total de 2.2A. Al momento de realizar el cálculo, ya se contaba con una fuente de 9V de 1A (Adaptador AC-DC de 9V a 1A, de la tienda "La Electrónica"), por lo que, para reducir costos, se utilizará dicha fuente para la alimentación del Arduino UNO, y posiblemente, la alimentación de al menos dos motores. Con esto, se tiene que se requiere de una fuente de alimentación de 1.5A a 5V, por lo que se hará la compra de la fuente AC-DC TMC Variable (3-12V) de 2A de la misma tienda que la fuente anterior. Con esto se cumplen los requisitos de alimentación del robot.
-
Bill Of Materials (BOM)
03/13/2021 at 22:19 • 0 commentsEl BOM se encuentra en la sección de archivos. En este se presenta el listado de componentes electrónicos a utilizar, con sus respectivos precios, y el cálculo del valor total del proyecto, el cual fue de USD 60.55. Estos precios fueron obtenidos de Mouser Electronics y Sparkfun.
-
Esquemáticos
03/13/2021 at 22:18 • 0 commentsLos esquemáticos se encuentran en la sección de archivos. En estos se presentan las conexiones que se realizaran entre el controlador escogido (Arduino Uno) y los actuadores (Servos SG90).
-
Selección de Componentes (Trade Study)
03/13/2021 at 22:14 • 0 commentsEn esta sección se presenta la selección de ciertos componentes de relevancia para el proyecto. Estos componentes son: el microcontrolador a utilizar, los servos a utilizar, la fuente de alimentación a utilizar y el tipo de conexión a utilizar. Todo esto fue realizado por medio de la herramienta Trade Study. Las valoraciones van de 0 a 10, siendo 0 malo y 10 excelente.
1. Microcontrolador
Las opciones consideradas en esta sección fueron un Arduino UNO, una Tiva C y un PIC16F887, y estas fueron escogidas debido a factores como disponibilidad inmediata y familiaridad con el componente. El criterio de facilidad de programación evaluaba que tan sencillo es realizar las rutinas necesarias para la aplicación del proyecto, tomando en cuenta el lenguaje de programación utilizado y el IDE. Cabe resaltar que la Tiva C tiene una valoración más baja que el Arduino debido a que se asumió que esta sería programada en Code Composer y no en Energia. Por otra parte, el criterio de librerías disponibles evaluaba la facilidad de encontrar librerías que nos permitiría implementar funciones necesarias para la aplicación del proyecto. Por otra parte, se evaluaron los canales PWM disponibles y el voltaje de trabajo de los controladores, aspectos de gran importancia para el proyecto, ya que los servos trabajan con 5V y se utilizaran un total de 8 de estos, por lo que el controlador a seleccionar debía cumplir con los aspectos descritos anteriormente, sin necesidad de componentes externos. Finalmente, se evaluó el tamaño que tendrían estos ya que debían caber en el robot, el cual ya había sido diseñado con antelación. Cabe resaltar que el tamaño del PIC se tomó como el componente y su respectiva galleta.
2. Servo
Las opciones consideradas en esta sección fueron un SG90 de 180°, un SG90 de 360° y un S3003, y estas fueron escogidas debido a disponibilidad inmediata. La mayoría de criterios descritos en la tabla son auto explicativos; sin embargo, se quiere hacer énfasis en los que se consideran los más importantes: Peso, Tamaño, Consumo de Corriente y Torque Suministrado. El peso y el tamaño son criterios de gran peso en el estudio debido a que estos tienen que cumplir con el diseño mecánico realizado anteriormente, además de entrar en el rango de pesos extras que se tomaron en cuenta en el cálculo del torque necesario. Por otra parte, se busca que el servo seleccionado cumpla con proveer con facilidad el torque necesitado, además de mantener su consumo de corriente al mínimo, por lo que los criterios siguientes que se les da un mayor peso son el consumo de corriente y el torque suministrado.
3. Fuente de Alimentación
Las opciones consideradas en esta sección fueron un adaptador AC-DC y el uso de baterías, las cuales fueron escogidas debido a su disponibilidad inmediata, ya que se quería comprobar si un adaptador AC-DC que se tenía disponible era una opción válida como fuente de alimentación. La mayoría de criterios son auto explicativos; sin embargo, se quiere hacer énfasis en los que se consideran los más importantes: Entrega de Corriente, Peso, Tiempo de Operación y Facilidad de Conexión. La entrega de corriente y el tiempo de operación son criterios de gran peso en el estudio ya que se busca que la fuente de alimentación pueda operar sin problema al Arduino y los 8 servos, además de tener un tiempo de operación de como mínimo 30 minutos. Por otra parte, el peso y la facilidad de conexión toman en cuenta que la fuente ente en el rango de pesos extras que se tomaron en cuenta en el cálculo del torque necesario, además de que la conexión al Arduino y a los servos sea fácil, respectivamente.
4. Tipo de Conexión
Las opciones consideradas en esta sección fueron una conexión inalámbrica y una conexión alámbrica, las cuales fueron escogidas debido a su disponibilidad inmediata, ya que se quería comprobar si un módulo ESP8266 ya disponible sería un opción acertada para enviarle comandos al Arduino. La mayoría de criterios son auto explicativos; sin embargo, se quiere hacer énfasis en los que se consideran los más importantes: Facilidad de Programación y Necesidad de Componentes Extra Para Funcionamiento. Estos dos criterios son de gran peso para el análisis debido a que se quiere enfocar el proyecto más en los conceptos vistos en clase que en la programación extra para uno de estos módulos, además de evitar que el presupuesto que se tiene para el proyecto se pase debido a la necesidad de componentes extras para operar de manera correcta el módulo, tal como una fuente de alimentación solo para este.
-
Validación de la selección de los motores
02/20/2021 at 22:49 • 0 commentsPara este proyecto se utilizarán los servo motores Micro Servo SG90 1.6kg de torque. Estos motores pueden proveer un torque máximo de 1.6 kg-cm. Para esperar una operación suave de los motores en la aplicación, el torque que soporten debe estar entre 1/5 y 1/3 de la carga máxima. Este rango es de 0.32 a 0.53 kg-cm. Para encontrar el torque del motor, se requieren los valores de cargas y el radio entre ellos y el eje del motor; esto empleando la expresión:
Donde tau es el torque, F es la carga y r es el radio perpendicular entre la fuerza y el pivote.
Los motores que soportarán mayor torque son los de las articulaciones de las cuatro paras (los que rotan en el eje horizontal), ya que, además de tener como carga su propio peso, se tiene la reacción del suelo con la pata, la cuál se relaciona con el peso total de la base del robot. Por ello, se utilizó el software de Autodesk Inventor para encontrar el centro de masa del robot; esto con el objetivo de encontrar el radio del torque que la pata genera.
Con la imagen anterior, se encuentra el radio de torque del centro de masa, el cuál es de 1.64 cm. Una pata pesa, con todo y motor, 0.038 kilogramos. Con esto se puede encontrar el torque que genera el propio peso de la pata en el motor, la cual es de 0.062 kg-cm.
Ahora se mide la distancia entre el punto de contacto de la pata con el suelo, ya que es en ese lugar donde se genera la fuerza de apoyo.
Este radio es de 5.01 cm. Cada pata debe de soportar 1/4 del peso de la base, el cuál se compone de:
- Base de acrílico: de 36.0 gramos.
- Arduino UNO: de 26.0 gramos.
- Servo motores de la base: de 10.0 gramos cada uno (40.0 gramos en total).
- Protoboard pequeño: de 15.0 gramos.
- Miscelánea* (carga posible de cables u otros): 25 gramos (esta carga para cada pata).
Con lo anterior, la base tiene 0.117 kg, correspondiendo 0.0543 kg a cada pata. Esto hace que el torque producido por la reacción sea de 0.271 kg-cm. En total, el torque que el motor crítico debe de soportar es de 0.33 kg-cm, el cuál está en el rango de operación óptimo, validando la selección de los motores.
*La carga de miscelánea es sólamente una carga adicional para que se tenga holgura en el cálculo y no sea un dato exacto.