4/5/2021 Inverse kinematics tutorial
Inverse kinematics tutorial
En este tutorial se explica cómo utilizar la funcionalidad cinemática de CoppeliaSim, al crear un manipulador redundante de 7 DoF.
Pero antes de eso, asegúrese de echar un vistazo a las diversas escenas de ejemplo relacionadas con IK y FK en escenas de
carpetas / cinemática.
Este tutorial se segmenta en 3 partes:
Construyendo el modelo de simulación simple de un manipulador redundante
Creación de una tarea cinemática inversa
Pruebas de la cinemática inversa
Modelo de simulación simple
Para este tutorial, vamos a construir un manipulador no dinámico, que sólo utiliza cinemática inversa sin utilizar ninguna funcionalidad
del motor de física. Los datos CAD de CoppeliaSim relacionados con este tutorial ([Link]) se encuentran en los
archivos cadFiles de la carpeta de instalación de CoppeliaSim. Una escena coppeliasim relacionada con este tutorial se puede
encontrar en escenas / tutoriales / InverseKinematics. Haga clic en [Barra de menús --> Archivo --> Importar --> Malla...] y, a
continuación, seleccione el archivo que desea importar. Consulte también la sección sobre cómo importar/exportarformas. Se abre
un cuadro de diálogo con varias opciones de importación. Haga clic en Importar. Se importó una sola forma simple y se encuentra en
el centro de la escena. La forma también aparece en la jerarquía de escenas en el lado izquierdo de la ventana principal.
Dependiendo de cómo se exportaron los datos CAD originales, los datos CAD importados podrían estar a una escala diferente,
ubicación diferente o incluso subdivididos en varias formas. En la figura siguiente se muestra la forma importada:
Como pueden ver, la operación de importación nos ha dejado con una sola forma, donde esperábamos varias formas. Esto significa
que tendremos que dividir el objeto manipulador nosotros mismos: seleccione el objeto (simplemente haga clic en él en la escena o
en la jerarquía de escenas) y, a continuación, haga clic en [Barra de menús --> Editar --> Agrupación/Fusión --> Dividir formas
seleccionadas]. Lo siguiente es lo que debe tener:
[Link] 1/8
4/5/2021 Inverse kinematics tutorial
La forma original se dividió en varias sub-formas (véase también la jerarquía de escenas). El algoritmo de división de formas funciona
agrupando todos los triángulos que están vinculados por aristas comunes. Dependiendo de cómo se creó o exportó la malla original,
no se puede realizar un procedimiento de división de este tipo. En ese caso tendrá que extraer manualmente formas en el modo de
edición de triángulos o en un editor externo.
A continuación, cambiaremos los colores de los diversos objetos para tener un aspecto visual agradable. Primero haga doble clic en
un icono de forma en la jerarquía de escenas. Se abre el cuadro de diálogo de propiedades de forma. Mientras se selecciona una
forma, haga clic en Ajustar color en el cuadro de diálogo: esto le permitirá ajustar los distintos componentes de color de la forma
seleccionada. Por ahora, simplemente ajuste el componente de color ambiente/difuso de sus formas. Para transferir el color de una
forma a otra forma, seleccione ambas formas y asegúrese de que la última forma seleccionada (indicada con un cuadro delimitador
blanco) es la que desea tomar el color y, a continuación, simplemente haga clic en el botón Aplicar a la selección en la sección
Colores del cuadro de diálogo de forma. Una vez que haya terminado de colorear, es posible que tenga la siguiente situación:
[Link] 2/8
4/5/2021 Inverse kinematics tutorial
En el siguiente paso, añadiremos las 7 articulaciones del manipulador. Una forma de hacerlo es agregar las articulaciones a la escena
y, a continuación, especificar su posición y orientación adecuadas (a través del cuadro de diálogo de posición y el cuadro de diálogo
de orientación). Sin embargo, esto no es posible, cuando no conoce las posiciones conjuntas exactas como en nuestro caso, por lo
que tendremos que extraerlas de las formas que tenemos:
Seleccione todas las formas importadas y haga clic en [Barra de menús --> Editar --> Reorientar cuadro delimitador --> con marco
de referencia del mundo]. Esta operación garantiza que nuestros cuadros delimitadores estén alineados con el marco de referencia
absoluto y, dada la configuración actual del manipulador, representa los cuadros delimitadores más pequeños. Haga clic en [Barra de
menús --> Agregar --> Conjunto --> Cambiar] para insertar una articulación revolute en la escena. La posición predeterminada está
en (0;0;0) y su orientación predeterminada es vertical, por lo que la junta está oculta por el cilindro base del manipulador. Mientras la
articulación sigue seleccionada, pulse Ctrl y seleccione el cilindro base y, a continuación, abra el cuadro de diálogo de posición en la
ficha posición y haga clic en aplicar a la selección. Esto acaba de colocar la articulación en las mismas coordenadas exactas que el
cilindro base (esta operación, sin embargo, sólo ajustó ligeramente la posición vertical de la articulación ya que ya estaba casi en
posición). Ahora repita el procedimiento para todas las demás articulaciones en el manipulador (recuerde que debe haber un total de
7). Todas las articulaciones están en posición ahora, sin embargo, algunas de ellas tienen la orientación equivocada. Seleccione todas
las articulaciones que deben alinearse con el eje Y del mundo y, a continuación, escriba (90,0,0) para los elementos Alfa, Beta y
Gamma en el cuadro de diálogo de orientacióny, a continuación, haga clic en el botón Aplicar a la selección. A continuación,
seleccione la articulación que debe alinearse con el eje X del mundo y, a continuación, escriba (0,90,0) para Alfa, Beta y
Gamma. Todas las articulaciones tienen la posición y orientación correctas ahora.
Ahora puede ajustar los tamaños de las juntas (compruebe los elementos Longitud y Diámetro) en el cuadro de diálogo de
propiedades de unión (que puede abrir haciendo doble clic en un icono de unión en la jerarquía de escenas). Asegúrese de que
todas las articulaciones estén claramente visibles. Esto es lo que usted debe tener:
El siguiente paso de este tutorial es agrupar formas que pertenecen a la misma entidad rígida. Seleccione las 5 formas que forman
parte del vínculo 1 (el cilindro base que se está vinculando 0) y, a continuación, haga clic en [Barra de menús --> Editar -->
Agrupación/Fusión --> Agrupar formas seleccionadas]. Una vez que las formas se agrupan en una forma compuesta, podría volver a
alinear su cuadro delimitador con el mundo, pero este paso no es necesario (y sólo tiene un efecto visual). Repita el mismo
procedimiento con todas las formas que lógicamente pertenecen juntas. En este tutorial no vamos a actuar los dedos de la pinza, y
así simplemente agruparlos rígidamente con el último enlace. Cuando todas las formas que están destinadas a agruparse compartan
los mismos atributos visuales, intente fusionarlos en su lugar: [Barra de menús --> Editar --> Agrupación/Fusión --> Combinar
formas seleccionadas].
En este punto puede cambiar el nombre de todos los objetos de la escena de la siguiente manera, al ir de base a punta:
redundantRobot redundantRob_joint1 - redundantRob_link1 - redundantRob_joint2, etc. Simplemente haga doble clic en el nombre
de un objeto en la jerarquía de escenas para editarlo.
Ahora podemos crear la cadena cinemática, pasando de una punta a una base: seleccionar redundantRob_link7 de objetos y, a
continuación, redundantRob_joint7 de objetos ctrl-select y hacer clic en [Barra de menús --> Editar --> Hacer el último elemento
primario de objeto seleccionado]. Como alternativa, puede arrastrar un objeto a otro de la jerarquía de escenas para lograr una
operación similar. A continuación, haga lo mismo para redundantRob_joint7 de objetos y redundantRob_link6 de objetos. Continúe de
[Link] 3/8
4/5/2021 Inverse kinematics tutorial
la misma manera hasta que se construya toda la cadena cinemática del manipulador. Esto es lo que debe tener (observe la estructura
de jerarquía de escenas):
Seleccione todas las uniones y, a continuación, en el cuadro de diálogo de unión, seleccione modo pasivoy, acontinuación, haga clic
en Aplicar a la selección. Mantenga las articulaciones seleccionadas y, a continuación, abra las propiedades comunes del objeto y,
en la sección Capas de visibilidad, deshabilite la capa 2 y habilite la capa 10 y, a continuación, haga clic en el botón Aplicar a
selección relacionado. Esto acaba de enviar todas las articulaciones a la capa de visibilidad 10, haciéndolos invisibles. Eche un
vistazo al cuadro de diálogo de selección de capas si desea activar/deshabilitar temporalmente algunas capas.
En CoppeliaSim, una tarea IK requiere especificar al menos los siguientes elementos:
una cadena cinemática descrita con un maniquí de punta y un objeto base.
un maniquí objetivo que el maniquí de la punta se verá limitado a seguir.
Ya tenemos el objeto base (objeto redundantRobot). Vamos a agregar un objeto ficticio,cambiarle el nombre a redundantRob_tip y
establecer su posición en (0.324,0,0.62) utilizando el cuadro de diálogo de coordenadas y transformación. A continuación, adjunte el
maniquí a redundantRob_link7 (seleccione redundantRob_tip y, a continuación, redundantRob_link7 y, a continuación, [Barra de
menús --> Editar --> Hacer el último elemento primario de objeto seleccionado]. ¡El maniquí de propinas está listo!
Ahora vamos a preparar el maniquí de destino: copie y pegue redundantRob_tip y cambie el nombre de la copia a
redundantRob_target. El maniquí objetivo está listo.
Ahora añadiremos una manera de manipular fácilmente el robot, sin tener que preocuparnos por romperlo cambiando los objetos
equivocados alrededor. Por lo tanto, lo definiremos como un modelo. En primer lugar, mueva redundantRob_tip y
redundantRob_target a la capa 11 para hacer que ambos maniquíes sean invisibles. A continuación, active mayúsculas y seleccione
todos los objetos visibles en la vista de escena, presione Ctrl y haga clic en el objeto redundanteRobot en la jerarquía de escenas
para eliminarlo de la selección y, a continuación, abra el cuadro de diálogo de propiedades comunes del objeto. Active el elemento
Seleccionar base de modelo en su lugar y, a continuación, el botón Aplicar a selección relacionado. Borre la selección con
<ESC>y, a continuación, seleccione redundantRobot. En el mismo cuadro de diálogo, compruebe el objeto es elemento base del
modelo y, a continuación, cierre los cuadros de diálogo. Observe cómo un cuadro delimitador estipado ahora abarca todo el
manipulador:
[Link] 4/8
4/5/2021 Inverse kinematics tutorial
Haga clic en cualquier objeto del manipulador y observe cómo el objeto base redundantRobot siempre se selecciona en su lugar.
A continuación, añadimos una esfera de manipulación que usaremos para manipular la posición/orientación de la pinza del robot.
Haga clic en [Barra de menús --> Agregar -> Forma primitiva --> Esfera] para abrir el cuadro de diálogo de forma primitiva, indique
0,05 para el tamaño X, tamaño Y y tamaño Z, luegodesactive el elemento Crear forma dinámica y respondible y haga clic en
Aceptar. Ajuste la posición de la esfera recién agregada para que sea la misma que redundantRob_target (mediante el cuadro de
diálogo de coordenadas y transformación). La esfera ahora aparece en la punta del manipulador. Cambie el nombre de la esfera a
redundantRob_manipSphere y, a continuación, haga que sea padre de redundantRob_target. Hacer redundantRobot padre de
rendundantRob_manipSphere: el maniquí objetivo y la esfera de manipulación ahora también forman parte del modelo robot.
Contraiga el árbol redundantRobot en la jerarquía de escenas. ¡El modelo de manipulador redundante está listo!
Configuración de la tarea cinemática inversa
La cinemática inversa se configura completamente mediante la llamada de un script a comandos api adecuados: la idea es crear un
modelo cinemático equivalente a través de las funciones proporcionadas por el complemento kinemático. El enfoque utiliza el
concepto y la terminología de los grupos IK y los elementos IK.
Seleccione object redundantRobot y, a continuación, [Menu bar --> Add --> Associated child script --> Non-threaded] para adjuntar
un script secundario a ese objeto. Haga doble clic en el icono de script que aparece junto al nombre del objeto y reemplace el
contenido del script por el código siguiente:
[Link] 5/8
4/5/2021 Inverse kinematics tutorial
[Link] 6/8
4/5/2021 Inverse kinematics tutorial
[Link] 7/8
4/5/2021 Inverse kinematics tutorial
El script anterior crea un modelo cinemático equivalente a partir del modelo CoppeliaSim, luego en cada paso de simulación, lee la
posición/orientación del destino CoppeliaSim, lo aplica al objetivo del modelo cinemático equivalente, ejecuta el solucionador IK y,
finalmente, lee los ángulos articulares del modelo cinemático equivalente y los aplica a las articulaciones del modelo CoppeliaSim.
Para manejar configuraciones y situaciones singulares donde el objetivo está fuera de su alcance, primero intentamos con un
solucionador no amortiguado, y si falla, volvemos a un solucionador amortiguado (con un solucionador amortiguado, cuando la
amortiguación es grande, la resolución se vuelve más estable pero la convergencia más lenta).
Ejecución de la simulación
¡Nuestra tarea cinemática inversa está lista! Vamos a probarlo. Ejecute la simulación y, a continuación, seleccione la esfera de
manipulación verde. A continuación, seleccione el botón de la barra de herramientas de traducción de objetos:
Ahora arrastre el objeto con el ratón: el manipulador debe seguir. Pruebe también el botón de la barra de herramientas de rotación
de objetos:
Intente también mantener pulsadas las teclas ctr o shift durante la manipulación. Vuelva al botón de la barra de herramientas de
traducción de objetos e intente arrastrar el objeto en la medida de lo posible y observe cómo la tarea cinemática inversa es bastante
robusta, gracias al componente amortiguado. Detenga la simulación y, a continuación, desactive el grupo IK amortiguado e inténtelo
de nuevo. Intente también deshabilitar las restricciones individuales en el elemento IK correspondiente y observe cómo se comporta
el manipulador durante la simulación.
Ejecute la simulación y copie y pegue unas cuantas veces el manipulador y cambie/gire las copias, cambiando también sus
configuraciones arrastrando sus esferas de manipulación. Observe cómo cada instancia manipuladora es totalmente funcional con
respecto a IK.
[Link] 8/8