• Generación de trayectorias

    PabloCastillo1734805/10/2021 at 05:27 0 comments

    Como paso final para la implementación del robot cuadrúpedo se generaron las trayectorias por medio del entorno Webots, entorno de código abierto para simular robots móviles. Se eligió este, en vez de MATLAB debido a que se reconoció que contaba con movimientos mayormente suaves para el desplazamiento del robot. De esta manera se reduce el golpeteo de las patas dentro del movimiento del cuadrúpedo. Tomando en cuenta esto, se seleccionó el gait (patrón de movimiento) a utilizar para el mismo, este se muestra en la siguiente figura:

    Se seleccionó el gait de trote debido a que el movimiento cruzado genera un mejor desplazamiento para el robot diseñado. El movimiento de las patas en forma de cruz proporciona mayor estabilidad para el modelo respectivo. Cabe mencionar, que en la mayoría de los demás gait, el robot no alcanzaba la estabilización deseada o presentaba dificultades en el tiempo de simulación.

    Para la generación de trayectorias, se utilizaron parámetros necesarios para garantizar la altura adecuada y el movimiento de avance respectivo para que las patas no generaran ningún impacto entre ellas. Estos parámetros son:

    • Altura:  

    • Avance sin colisión: 


    Con esto se asegura el movimiento del robot. En la siguiente imagen se muestra el robot dentro del entorno seleccionado:

    Para el giro del cuadrúpedo, dentro de una misma trayectoria, se optó por realizar el movimiento de dos de las cuatro patas del mismo lado. Esto para asegurar la estabilidad del robot y de esta forma asegurar que este se mantenga sobre el plano seleccionado sin volcarse. 

  • Visualización de la cinemática del robot

    PabloCastillo1734804/19/2021 at 05:24 0 comments

    Se utilizó como referencia lo que se pide en la sección 7.5.2 de la segunda edición del libro respectivo de la Toolbox de Peter Corke. Para ello se implementó una aplicación de Matlab que contiene los parámetros variables para cada una de las extremidades. En el caso de este robot son cuatro extremidades (patas) , cada una compuesta de tres juntas. A continuación se muestra la aplicación implementada.

    Para ello se definió la cinemática de las extremidades y de esta forma obtener los parámetros estándar de Denavit-Hartenberg de la misma. Al obtenerlos se definieron cada una de las extremidades por medio de variables de tipo SerialLink. Esto con el fin de implementar los movimientos deseados.  Para lograr el movimiento de las juntas para cada una de las extremidades fue necesario definir un vector de configuración inicial y que este fuera variando según el valor que el usuario requiera. En este caso cada una de las juntas tiene movimiento entre -90° y 90°. 

    Cada uno de los slider representa a una posición del vector de configuración variable (deseado). Siendo q1 la posición para la base, q2 para la herramienta y q3 para el efector final. 

  • Cinemática Inversa

    ram1778704/18/2021 at 09:58 0 comments

    Lo verdaderamente importante para controlar un robot es la cinemática inversa para saber, a partir de una pose deseada, la configuración necesaria para llegar a ella. Para esto, se parte del hecho que la cinemática diferencial es:

    Por lo que con un simple despeje logramos tener una fórmula para encontrar la configuración siguiente a partir del error entre la posición actual y la deseada y la inversa del jacobiano:

    Esto se convierte en un algoritmo iterativo en el cual se debe de recalcular el error y el jacobiano inverso hasta que se llegue a la posición deseada. Existen dos errores: el de posición y el de orientación. Para el primero únicamente se encuentra la cinemática directa tanto de la posición deseada como la posición actual y se restan los vectores de posición. Por el otro lado, para el error de orientación, se debe de utilizar cuaterniones. De las cinemáticas directas anteriores, también se extraen las matrices de rotación y se hace la conversión con:

    A partir de estos cuaterniones, se utiliza el hecho que cuando un cuaternión se multiplica por su inverso, la componente epsilon es igual a 0. Para encontrar la inversa de un cuaternión, únicamente se multiplica la componente epsilon por -1. Para la multiplicación entre cuaterniones, se utiliza:

    Para el jacobiano inverso, se necesita de una aproximación ya que la matriz no resulta ser cuadrada y, por ende, no tiene inversa directa. Luego de realizar pruebas con distintas configuraciones, se determinó que el más óptimo es el algoritmo de Levenberg-Marquardt. Este consiste en la ecuación:

    Con esto, se tiene el algoritmo iterativo para encontrar la configuración deseada. Este algoritmo se repetirá hasta que el error esté por debajo de un valor. Usualmente se tiene un valor distinto para la posición y otro un poco mayor para el de orientación. En nuestro caso, se utilizaron 1e-6 y 1e-5 respectivamente. 

    Aparte, en caso de intentar encontrar la cinemática inversa de una posición inalcanzable o una singularidad, se tiene un número máximo de iteraciones. Aquí se utilizó K = 100. En el código de Matlab, se tiene la opción de también regresar el historial si se desea.

  • Cinemática Diferencial

    ram1778704/17/2021 at 22:09 0 comments

    El problema de la cinemática diferencial consiste en encontrar la diferenciación de las posiciones, es decir, las velocidades (tanto lineales como angulares). Estas dos se contienen en los jacobianos de posición y orientación; estos se pueden "apilar" en forma de vector columna para generar la matriz del jacobiano completo. Es decir, se tiene lo siguiente:

    El procedimiento para calcular este jacobiano comienza calculando la cinemática directa (con las transformaciones de base). De esta se extrae la matriz de rotación resultante. Luego, se define un diferencial de posición con el que se trabajará. En nuestro caso se utilizó 0.01 aunque si se desea, se puede utilizar un valor más pequeño y se calcula el cambio en la cinemática directa debido a este con la siguiente fórmula:

    De aquí, se extraen las matrices de cambio en rotación y posición. Este último es directamente el jacobiano de posición, pero el primero no es el jacobiano de orientación, por lo que se debe realizar cálculos extra. Se necesita:

    Y se utiliza el hecho que:

    Y con la ayuda del Robotics Toolbox de Peter Corke, se usa la función vex(s) que convierte una matriz skew-simétrica a un vector. Esto es, en escencia, la función inversa de skew. Por lo que esta función nos regresa el jacobiano de orientación. Para cada ecuación en esta sección, los subíndices j corresponden a el número de junta. Por lo que este procedimiento se debe realizar para cada junta. Estos valores se van almacenando en una matriz de 6xj que depende de la cantidad de GDL del robot (3 en este caso):

  • Matrices de Denavit-Hartenberg

    ram1778704/17/2021 at 05:37 0 comments

    Para realizar la transformación de la base de nuestro robot hacia el efector final se utilizarán matrices de transformación. La cinemática directa completa para manipuladores seriales se define como:

    Para construir las matrices, se utilizará la convención de Denavit-Hartenberg. Esta nos dice que cada junta está unida por medio de un eslabón y una junta previa. Para cada junta, se tiene una matriz A que describe la traslación y rotación necesaria para ir de la junta N-1 a la junta N. Cada junta en esta convención, tiene asociado únicamente un grado de libertad. En este caso, únicamente se cuenta con 3 juntas revolutas por extremidad, por lo que el vector de configuración q de cada extremidad se definirá como:

    En donde todas sus componentes son ángulos en grados. Con esto en consideración, el teorema de Denavit-Hartenberg dice que la matriz de transformación entre {B} {E} está dada por:

    Estas matrices A sirven para definir de igual manera las matrices de transformación de base y herramienta. Entre cada extremidad, la única que varía es la transformación de base, por lo que estas se definirán primero:

    donde las funciones Rot Transl son generan matrices de rotación y translación homogéneas respectivamente en los ejes dados por los subíndices; y n es el número de extremidad entre 1 y 4. El número de extremidades junto con los respectivos marcos de referencia se muestran a continuación.

    Utilizando las mismas fórmulas y con los marcos de cada junta como se muestran a continuación, se llegan al conjunto de matrices:

    Cabe mencionar que la segunda y tercera junta, a pesar que la unión tiene un desfase en sus ejes Z locales, estos no se toman en consideración en las matrices. Y que, al no tener un efector final externo (como una garra, taladro, ventosa, etc.), no se necesita de una transformación de herramienta (o se puede utilizar una matriz identidad). 

    La multiplicación de las 3 matrices A encontradas anteriormente se define una extremidad. Y al todas ser iguales, lo único que cambia entre es la transformación de base. Evaluando numéricamente las matrices con ayuda de Matlab y la Robotics Toolbox de Peter Corke se obtienen la matriz de las extremidades de:

  • Esquemáticos y BOM

    ram1778703/15/2021 at 05:27 0 comments

    Se subieron el esquemático en formato PDF y listado de materiales de la placa en formato xlsx en la sección de archivos.

  • Selección de Componentes y Power Budget

    ram1778703/13/2021 at 22:02 1 comment

    Primero es necesario aclarar que todos los componentes, exceptuando algunos microcontroladores, se cotizaron en la página de La electrónica GT por lo que los nombres en el análisis son los utilizados en la página. También que el método de análisis utilizado fueron principalmente: eliminación por limitaciones o Trade Studies. Estos últimos son subjetivos por lo que esto puede no aplicar en todos los casos. Y por último, mencionar que aquí se presentarán principalmente los resultados, por lo que para más detalles, se puede ver los archivos Power Budget y Trade Studies. Estos incluyen detalles de criterios de selección en Trade Studies, propuestas para cada componente y explicaciones más a profundidad de la selección de algunos componentes.

    Componentes

    Microcontrolador:

    El primer componente seleccionado fue el microcontrolador. Los propuestos fueron:

    • Arduino UNO
    • PIC 16F887
    • Tiva C
    • Raspberry Pi 3b+

    Los criterios de selección fueron: disponibilidad, facilidad de programación, familiaridad, consumo de potencia, costo/unidad, peso y si este dispone de módulo SPI. (En el archivo se encuentra detalle de los rangos de cada criterio). El promedio ponderado resultó en la selección del PIC16F887.

    Driver:

    Luego se decidió que se utilizaría el driver PCA9685 ya que se ven limitadas las opciones de control de los 12 servomotores simultáneamente, aunque no imposible, se complica más de lo que debería.

    Alimentación:

    Luego se decidió por utilizar un convertidor AC de tomacorriente a 5V DC para alimentar directamente la placa. Esto básicamente ya que el resto de opciones se veían muy limitadas tomando en cuenta el posible gran consumo de los servos, por lo que algunas opciones no podían suplementar la corriente necesaria de manera segura.

    (Opción inalámbrica)

    A pesar de esto, se realizaron selección de componentes en caso que se desee hacer una versión inalámbrica. En caso, muy probable, que no se utilice una batería de 5V, se necesita un regulador que reduzca o amplifique este voltaje. También, ya que las baterías pueden variar su voltaje según su uso y los picos de consumo este es esencial. Los criterios de selección resultaron en la elección de un regulador LM2596T. Y la batería más práctica para la aplicación fue la batería GP alcalina 23A 12V.

    Comunicación:

    Se evaluó entre comunicación serial, BlueTooth y WiFi. Entre estas, terminó ganando la comunicación serial, por su simplicidad, familiaridad y precio. Aunque cabe mencionar que se puede implementar el BlueTooth de una manera muy similar únicamente creando una aplicación extra ya que el módulo se comunica de manera serial y la recepción de datos es muy similar.

    Servomotores:

    Para estos no se realizó el proceso de ver si el torque por los pesos superaba el torque máximo de los servos, sino el inverso: se calculó cuanto peso soportan los servos sobre el robot. Se explica más en el documento, pero en resumen, se midió la distancia del servo más alejado al centro del robot y a partir del momento máximo del motor, se calculó el peso máximo que se puede tener en el robot. Luego, se aproximó el peso de los componentes y la estructura del robot con factores de seguridad por la incertidumbre de los datos. Y se restaron estas cantidades para ver el margen de peso de los componentes extra (sensores, actuadores y baterías) en caso de necesitarlo para alguna aplicación. 

    Power Budget

    Para el power budget se investigaron las corrientes máximas de los componentes principales y se utilizaron estas. Se sumaron y dividieron entre la eficiencia del circuito aproximada para encontrar la corriente de entrada...

    Read more »

  • Análisis de esfuerzos

    PabloCastillo1734802/22/2021 at 05:28 0 comments

    Se realizó el análisis de esfuerzos para la estructura del robot a implementar por medio de Autodesk Inventor. La deflexión del sistema se presenta en azul como se muestra en la imagen. Esto indica que la deflexión para el robot es mínima (casi despreciable), por lo que indica que la deformación en las piezas será casi nula contemplando los componentes hasta ahora presentados. 

  • Justificación del diseño

    ram1778702/17/2021 at 07:43 0 comments

    Yuhai ZhongLo primero que se hizo fue seleccionar el tipo de robot que se estaría diseñando. Este podía ser un Quadruped o un Hexapod. Investigando sobre las diferencias entre los diferentes tipos de robots, se encontró el trabajo de Palivela Arun y Shivraj Yeole. En este se realiza esta comparación entre robots bípedos, cuadrúpedos y hexápodos. 

    La imagen anterior muestra la Tabla 1 de esta comparación. Esta muestra algunos parámetros de construcción para cada uno de ellos, como la cantidad de grados de libertad posibles, número de actuadores, sensores, etcétera. De aquí únicamente se tomarán en cuenta los cuadrúpedos y hexápodos ya que son las dos opciones planteadas. Las diferencia notoria entre estos dos es que los hexápodos necesitan de una mayor cantidad de actuadores y de sensores para poder realizar un control adecuado manteniendo la misma cantidad de grados de libertad.

    La Tabla 2 del mismo documento nos muestra puntos de comparación un poco más ambiguos (ya que utiliza escala de fácil a complejo), pero orientado a el diseño y programación del robot. Los puntos más importantes a notar son que los cuadrúpedos son más inestables y más difíciles de encontrar aplicaciones; pero en general, estos también son mucho menos complejos de programar y modelar ya que cuentan con menor cantidad de partes móviles que se deben sincronizar para mantener un movimiento fluido. Ya que el propósito de este proyecto es lograr modelar, diseñar y programar un robot, no es de mayor relevancia que sea complicado encontrar aplicaciones y, a pesar de que agregar dos piernas extra mejora la estabilidad, no significa que los cuadrúpedos no lo sean. Por lo que dejando estos aspectos de un lado, se seleccionó un cuadrúpedo porque este es más sencillo y menos complejo.

    Sabiendo que se trabajaría un cuadrúpedo, se encontraron distintos modelos de estos. Existen robots inspirados en: insectos, reptiles y más de una configuración de mamíferos. En la siguiente imagen se pueden ver las diferencias entre los mencionados.

    Investigando más sobre estos tipos de configuraciones, se encontró lo siguiente:

    Esta imagen es la Tabla 2 del trabajo de Yuhai Zhong, Runxiao Wang, Huashan Feng y más. Aquí se analizan y comparan distintos tipos de piernas para robots cuadrúpedos. En este análisis se concluye que los mamíferos tienen mayores velocidades de caminata y necesitan menor torque, mientras que los otros tienen mayor estabilidad y mayor rango de movimiento. Ya que no se busca diseñar un robot para una carrera, la velocidad no es un factor determinante. Y el problema del torque se puede solucionar utilizando tamaño de extremidades mínima. Por el otro lado, es beneficioso que tenga mayor estabilidad ya que se necesitará menor robustez del controlador, dando más holgura en los parámetros.

    Y, por último, a pesar de que es totalmente posible tener un robot con dos grados de libertad funcional, se decidió utilizar tres servomotores para cumplir con los tres grados de libertad mínimos para un cuadrúpedo (como se vio al principio) para que este tenga un movimiento fluido.