Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Modelar y controlar el brazo de un manipulador con robótica y Simscape

Ejecute un flujo de trabajo de pick-and-place con el robot ABB YuMi, que muestra cómo diseñar algoritmos de robótica en Simulink® y, luego, simule la acción en un entorno de prueba con Simscape™. El ejemplo también muestra cómo modelar un sistema con diferentes niveles de fiabilidad para centrarse más en el diseño del algoritmo asociado.

Los elementos de diseño de este ejemplo se dividen en tres secciones para centrarse más fácilmente en los distintos aspectos del diseño del modelo:

  1. Crear un planificador de tareas y trayectorias para pick-and-place mediante la dinámica simplificada del sistema del manipulador:

  2. Añadir la dinámica principal del manipulador y diseñar un controlador

  3. Comprobar el flujo de trabajo completo en el modelo de Simscape del robot y el entorno

Objetivos de alto nivel

En el ejemplo Crear una trayectoria para un robot ABB YuMi de manera interactiva, se diseñó una secuencia de waypoints de robot y se reprodujo empleando una trayectoria continua. En este ejemplo, los modelos de Simulink convierten estos waypoints en un flujo de trabajo de pick-and-place completo y repetible. El modelo tiene estos dos elementos principales:

La planificación de tareas y generación de trayectorias define cómo el robot se desplaza a través de los estados. Esto incluye el estado de configuración del robot en cualquier momento, cuál es la posición objetivo, si la pinza debe estar abierta o cerrada, y la trayectoria actual que se envía al robot.

La dinámica del sistema modela el comportamiento del robot. Esto incluye cómo el robot se mueve dados un conjunto de trayectorias de referencia y un comando booleano para la pinza (abierta o cerrada). La dinámica del sistema se puede modelar con diferentes niveles de fiabilidad, en función del objetivo del modelo en general.

En este ejemplo, durante el diseño del planificador de tareas, el objetivo es garantizar que el planificador se comporta correctamente suponiendo que el robot se encuentra bajo un control del movimiento estable. En este caso, es conveniente utilizar un modelo simple que simule rápidamente, por lo que la dinámica del sistema se modela mediante el bloque Joint Space Motion Model. Este bloque simula el movimiento del manipulador dadas las trayectorias de referencia en el espacio articular con un controlador estable con parámetros de respuesta predefinidos. Una vez que se complete la planificación de tareas, el enfoque del modelo se centra en el diseño del controlador y la comprobación del sistema, lo que requiere modelos de dinámica del sistema más complejos.

Definir un robot y un entorno

Cargue un modelo del robot ABB YuMi. El robot es un manipulador industrial con dos brazos. En este ejemplo se utiliza solo un brazo.

robot = loadrobot("abbYumi",Gravity=[0 0 -9.81]);

Cree una visualización para reproducir trayectorias simuladas.

iviz = interactiveRigidBodyTree(robot);
ax = gca;

Para añadir un entorno, cree un conjunto de objetos de colisión con una función helper de ejemplo.

exampleHelperSetupWorkspace(ax);

Inicializar parámetros de simulación compartidos

En este ejemplo, se utiliza un conjunto de configuraciones predefinidas, configSequence, como estados del robot. Estas configuraciones, que se definieron inicialmente en Crear una trayectoria para un robot ABB YuMi de manera interactiva, se almacenan en un archivo MAT asociado.

load abbSavedConfigs.mat configSequence

En la simulación, el estado inicial del robot debe estar definido e incluir la posición, la velocidad y la aceleración de cada articulación.

% Define initial state
q0 = configSequence(:,1); % Position
dq0 = zeros(size(q0)); % Velocity
ddq0 = zeros(size(q0)); % Acceleration

Crear un planificador de tareas y trayectorias

Cargue el primer modelo, que se centra en la planificación de tareas y generación de trayectorias.

open_system("modelWithSimplifiedSystemDynamics.slx");

Dinámica simplificada del sistema

Si nos centramos en la planificación, la dinámica del sistema se modela mediante el bloque Joint Space Motion Model. Este modelo de movimiento asume que el robot puede alcanzar configuraciones específicas mediante un control estable y preciso. Más adelante, el ejemplo detalla un modelado más preciso de la dinámica del sistema.

La pinza se modela como una entrada de comando booleano simple como 0 o 1 (abierta o cerrada) y una salida que indica si la pinza ha llegado a la posición indicada según los comandos. Por lo general, los robots tratan el comando para pinzas de manera independiente del resto de entradas de configuración.

Planificación de tareas

Las tareas del robot pasan por ocho estados:

El planificador se implementa mediante un bloque MATLAB Function, commandLogic. El planificador avanza por los estados cuando se alcanza el estado de la pinza y todas las articulaciones del manipulador han alcanzado sus posiciones objetivo dentro de un umbral predefinido. Cada tarea es una entrada para el bloque Trapezoidal Velocity Profile Trajectory que genera una trayectoria sin obstáculos entre cada waypoint.

Simular el modelo

El modelo de Simulink proporcionado almacena variables relevantes para el ejemplo en el área de trabajo del modelo. Haga clic en Load Default Parameters para reinicializar las variables si es necesario. Para obtener más información, consulte Model Workspaces (Simulink).

Ejecute el modelo llamando a sim.

Utilice la visualización interactiva para reproducir el movimiento. El modelo se simula por unos segundos más para garantizar que el ciclo se repite según lo esperado después del primer movimiento. Este modelo no simula interacciones del entorno, de manera que el robot no agarra objetos en esta simulación.

simout = sim("modelWithSimplifiedSystemDynamics.slx");

% Visualize the motion using the interactiveRigidBodyTree object.
iviz.ShowMarker = false;
iviz.showFigure;
rateCtrlObj = rateControl(length(simout.tout)/(max(simout.tout)));
for i = 1:length(simout.tout)
    iviz.Configuration = simout.yout{1}.Values.Data(i,:);
    waitfor(rateCtrlObj);
end

Añadir la dinámica principal del manipulador y diseñar un controlador

Ahora que se ha diseñado y comprobado el planificador, añada un controlador al robot con dos elementos.

  • Un modelo de dinámica del manipulador más complejo que acepta pares motor de articulaciones y comandos de pinzas.

  • Un controlador del espacio articular que devuelve pares motor de articulaciones dados los estados del manipulador deseados y actuales.

Abra el siguiente modelo proporcionado con el controlador añadido.

open_system("modelWithControllerAndBasicRobotDynamics.slx");

Dinámica del manipulador

En el diseño de un controlador, la dinámica del manipulador tiene que representar las posiciones de las articulaciones del manipulador dadas las entradas de par motor. Esto se logra dentro del subsistema Manipulator Dynamics con un bloque Forward Dynamics para convertir pares motor de articulaciones en aceleración de las articulaciones dado el estado actual y, luego, integrando dos veces para obtener la configuración de la articulación completa. Los integradores se inicializan en q0 y dq0, la posición y la velocidad inicial de la articulación.

Además, el subsistema de control de la pinza anula los pares motor de control de la articulación para los actuadores de la pinza con 10 N de fuerza que se aplican para cerrar o abrir la pinza.

Observe que el segundo integrador está saturado.

Mientras que los manipuladores con controladores de posición diseñados correctamente no alcanzarán los límites de las articulaciones, añadir fuerzas de lazo abierto desde la acción de la pinza significa que los límites de las articulaciones son necesarios para garantizar una respuesta realista. Para un modelo más preciso, la saturación de la articulación puede conectarse a la velocidad para restablecer la integración. Sin embargo, para este modelo, este nivel de precisión es suficiente.

Sensor de pinza

Este modelo también añade un sensor de pinza más detallado para comprobar cuándo se ha abierto o cerrado la pinza en realidad. El sensor de la pinza extrae los dos últimos valores de la configuración de la articulación (los valores que se corresponden con la posición de la pinza) y los compara con la posición planeada de la pinza, dada por el comando closeGripper, en el bloque MATLAB Function Gripper Logic. Gripper Status devuelve 1 cuando la posición de las articulaciones de la pinza coincide con el estado deseado dado por el comando closeGripper. Cuando la pinza aún no ha alcanzado el estado, Gripper Status devuelve cero. Esto coincide con el comportamiento de Gripper Model en el modelo simplificado anterior.

Controlador del espacio articular

Este modelo también añade un controlador de par motor calculado que implementa un enfoque basado en modelos en el control de las articulaciones. Para obtener más información, consulte Crear un controlador de par motor calculado con bloques de robótica del manipulador en el ejemplo Perform Safe Trajectory Tracking Control Using Robotics Manipulator Blocks. Este modelo utiliza el mismo controlador, pero con ABB YuMi como entrada de rigidBodyTree en lugar de Rethink Sawyer.

Simular el modelo

Simule y visualice los resultados con el nuevo modelo.

simout = sim("modelWithControllerAndBasicRobotDynamics.slx");

% Visualize the motion using the interactiveRigidBodyTree
iviz.ShowMarker = false;
iviz.showFigure;
rateCtrlObj = rateControl(length(simout.tout)/(max(simout.tout)));
for i = 1:length(simout.tout)
    iviz.Configuration = simout.yout{1}.Values.Data(i,:);
    waitfor(rateCtrlObj);
end

Comprobar el flujo de trabajo completo en el modelo de Simscape del robot y el entorno

Ahora que se han diseñado el planificador de tareas y el controlador, añada modelos de robot y entorno más complejos. Utilice Simscape Multibody™ para crear modelos de fiabilidad alta de sistemas físicos. En esta aplicación, Simscape añade dinámicas con límites de articulación integrados y modelado de contactos. En este último paso se añade precisión a la simulación a costa de la complejidad de modelado y la velocidad de simulación. Simscape también proporciona una visualización integrada, Mechanics Explorer, que se puede ver durante y después de la simulación.

Cargue el modelo final proporcionado, que tiene la misma vista superior.

open_system("modelWithSimscapeRobotAndEnvironmentDynamics.slx");

Planta de Simscape para el robot y el entorno

La principal diferencia con el modelo anterior es la planta. La dinámica principal del manipulador del modelo anterior se ha reemplazado por un modelo de Simscape para el robot y el entorno:

Dinámica del manipulador y del entorno

El manipulador y el entorno se construyeron con Simscape Multibody. Para crear el modelo de robot, se llamó a smimport en el archivo URDF del robot con las mallas proporcionadas. Luego, se accionaron las articulaciones con pares motor de articulación mediante la vinculación a través de multiplexores y etiquetas GoTo, y se equiparon con sensores que devuelven la posición, la velocidad y la aceleración de las articulaciones.

Los objetos, o widgets, se recogen en esta simulación, por lo que se debe definir su tamaño.

widgetDimensions = [0.02 0.02 0.07];

Modelos de contacto

El contacto en este modelo se divide en dos categorías:

  • El contacto entre la pinza y el widget.

  • El contacto entre el widget y el entorno.

En ambos casos, se utiliza proxy de contacto en lugar de contacto directo entre superficies. El uso de proxy de contacto acelera el modelado para mejorar el rendimiento. Para el contacto pinza-widget, los contactos de la pinza se han modelado con dos rectángulos, mientras que se usan ocho esferas para modelar la interfaz del widget. De forma similar, el contacto widget-entorno utiliza esferas en las cuatro esquinas del widget que están en contacto con los rectángulos que representan el entorno.

Defina los parámetros para que los modelos de contacto estén más cerca de sus estados predeterminados.

% Contact parameters
stiffness = 1e4;
damping = 30;
transition_region_width = 1e-4;
static_friction_coef = 1;
kinetic_friction_coef = 1;
critical_velocity = 1;

Sensor y control de pinza

Se utiliza el mismo Gripper Control, pero el Gripper Sensor se modifica. Dado que esta pinza puede recoger objetos, el estado cerrado de la pinza se alcanza cuando el agarre es firme. Es posible que nunca se alcance un posición totalmente cerrada. Por lo tanto, se ha añadido lógica adicional que devuelve un valor, isGrippingObj, que es verdadero cuando la fuerza de reacción de la pinza derecha y la de la izquierda sobrepasan el valor umbral. El bloque MATLAB Function Gripper Logic acepta esta variable como una entrada.

Simular el modelo

Simule el robot. Debido a la alta complejidad, esto puede tardar varios minutos.

simout = sim("modelWithSimscapeRobotAndEnvironmentDynamics.slx");

Utilice Mechanics Explorer para visualizar el rendimiento durante y después de la simulación.

Extensibilidad

Este ejemplo se ha centrado en el diseño de un sistema de planificación y control para una aplicación de pick-and-place. Otras investigaciones pueden incluir el efecto del muestreo en el controlador, el impacto de contactos inesperados mediante Simscape Multibody o la extensión a un modelo multidominio, como detallar el comportamiento de los motores eléctricos que utiliza el robot.