Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Flujo de trabajo de picking y lugar mediante Stateflow para MATLAB

En este ejemplo se muestra cómo configurar un flujo de trabajo de picking y colocación de extremo a extremo para un manipulador robótico como KINOVA® Gen3.

Visión general

En este ejemplo se identifican y ordenan los objetos en dos tablas mediante un manipulador KINOVA Gen3. El ejemplo utiliza herramientas de cuatro cajas de herramientas:

  • se utiliza para modelar, simular y visualizar el manipulador, y para la comprobación de colisiones.Herramienta de herramientas del sistema de robótica™

  • y se utilizan para generar trayectorias optimizadas y libres de colisiones para que el manipulador las siga.Cuadro de herramientas de control predictivo del modelo™ Cuadro de herramientas de optimización™

  • se utiliza para programar las tareas de alto nivel en el ejemplo y paso de una tarea a otra.Stateflow®

Este ejemplo se basa en conceptos clave de dos ejemplos relacionados:

Gráfico Stateflow

En este ejemplo se utiliza un gráfico Stateflow para programar tareas en el ejemplo. Abra el gráfico para examinar el contenido y seguir las transiciones de estado durante la ejecución del gráfico.

edit exampleHelperFlowChartPickPlace.sfx

El gráfico dicta cómo interactúa el manipulador con los objetos o partes. Consta de pasos básicos de inicialización, seguidos de dos secciones principales:

  • Identifique las piezas y determine dónde colocarlas

  • Ejecutar flujo de trabajo de picking y lugar

Inicializar el robot y el entorno

En primer lugar, el gráfico crea un entorno compuesto por el manipulador Kinova Gen3, tres partes a clasificar, las tablas utilizadas para la clasificación y un obstáculo azul. A continuación, el robot se mueve a la posición de inicio.

Identifique las piezas y determine dónde colocarlas

En el primer paso de la fase de identificación, las piezas deben ser detectadas. La clase proporciona directamente las poses de objeto.commandDetectParts Reemplace esta clase por su propio algoritmo de detección de objetos basado en sus sensores u objetos.

A continuación, las piezas deben clasificarse. La clase clasifica las partes en dos tipos para determinar dónde colocarlas (tabla izquierda o derecha).commandClassifyParts Una vez más, puede reemplazar esta clase con cualquier método para clasificar piezas.

Ejecutar flujo de trabajo de picking y lugar

Una vez identificadas las piezas y asignadas sus destinos, el manipulador debe recorrer en iteración las piezas y moverlas a las tablas correspondientes.

Recoger el objeto

La fase de picking mueve el robot al objeto, lo recoge y se mueve a una posición segura, como se muestra en el siguiente diagrama:

La clase calcula la pose de agarre.CommandComputeGraspPose La clase calcula una posición de agarre del espacio de tareas para cada parte. Los pasos intermedios para acercarse y llegar hacia la pieza también se definen en relación con el objeto.

Este robot recoge objetos utilizando una pinza neumática simulada. Cuando la pinza está activada, añade la malla de colisión de la pieza a la representación del robot, que simula agarrarla.CommandActivateGripperrigidBodyTree La detección de colisiones incluye este objeto mientras está conectado. Luego, el robot se mueve a una posición retraída lejos de las otras partes.

Colocar el objeto

A continuación, el robot coloca el objeto en la tabla correspondiente.

Al igual que con el flujo de trabajo de picking, el enfoque de ubicación y las posiciones retraídas se calculan en relación con la posición de ubicación deseada conocida. La pinza se desactiva con , que elimina la pieza del robot.CommandActivateGripper

Mover el manipulador a una pose especificada

La mayor parte de la ejecución de la tarea consiste en instruir al robot para moverse entre diferentes poses especificadas. La función define un solucionador mediante un controlador predictivo de modelo no lineal (consulte ) que calcula una trayectoria de referencia optimizada viable y sin colisiones mediante el uso y la comprobación de colisiones se calcula para el manipulador y el entorno mediante métodos similares a .exampleHelperPlanExecuteTrajectoryPickPlaceNonlinear MPC (Model Predictive Control Toolbox)nlmpcmove (Model Predictive Control Toolbox)checkCollision. Compruebe si hay colisiones ambientales con manipuladores A continuación, la función auxiliar simula el movimiento del manipulador bajo control de par calculado a medida que realiza un seguimiento de la trayectoria de referencia utilizando el objeto y actualiza la visualización.jointSpaceMotionModel La función auxiliar se llama desde el gráfico Stateflow a través de , que define las entradas correctas.CommandMoveToTaskConfig

Este flujo de trabajo se examina en detalle en .Planifique y ejecute trayectorias libres de colisión utilizando el manipulador KINOVA Gen3 El controlador se utiliza para garantizar el movimiento libre de colisiones. Para trayectorias más sencillas en las que se sabe que los trayectos están libres de obstáculos, las trayectorias podrían ejecutarse utilizando herramientas de generación de trayectoria y simuladas utilizando los modelos de movimiento del manipulador. Ver.Planificar y ejecutar trayectorias de espacio de tareas y articulaciones utilizando el manipulador KINOVA Gen3

Programación de tareas en un gráfico de flujo de estado mediante un distribuidor de comandos

En este ejemplo se utiliza un gráfico Stateflow para dirigir el flujo de trabajo en MATLAB®. Para obtener más información sobre cómo crear inicios de flujo de estado, consulte .Create Stateflow Charts for Execution as MATLAB Objects (Stateflow)

El gráfico Stateflow dirige la ejecución de tareas en MATLAB mediante clases de comando sin que .exampleHelperDispatcherPickPlace Al distribuir una secuencia de comandos, puede evitar crear una gran pila de llamadas de función en el gráfico. Cuando el comando termina de ejecutarse, el distribuidor envía un para activar el gráfico y continuar con el siguiente paso de la ejecución de la tarea, consulte .evento de entradaExecute a Standalone Chart (Stateflow)

Ejecución de comandos

El distribuidor mantiene una cola de identificadores para ordenar clases como una propiedad. El gráfico Stateflow, , agrega comandos como o a esta cola siguiendo las transiciones de estado definidas en el gráfico.exampleHelperFlowChartPickPlaceActivateGripperDetectParts Mientras el distribuidor se está ejecutando, comprueba si hay nuevos comandos en la cola a una velocidad constante y los distribuye para su ejecución.

Definiciones de comandos

Los comandos son clases heredadas que describen operaciones distintas que el robot necesita ejecutar para completar el flujo de trabajo de picking y colocación.

Para agregar un comando personalizado, utilice cualquiera de los comandos proporcionados como plantilla. Como mínimo, un comando debe:

  • heredar de la clase handleexampleHelperCommandPickPlace

  • Incluya un método que implemente la funcionalidad necesaria, utilizando datos del distribuidor y enviándole datos (por ejemplo, si la detección de piezas se basa en la clasificación de nube de puntos, el distribuidor contendría la nube de puntos y el método del Comando analizaría la nube de puntos para determinar la ubicación de la pieza).doit()doit()CommandDetectParts

Ejecutar y visualizar la simulación

Esta simulación utiliza un manipulador KINOVA Gen3. Cargue el robot usando .loadrobot Especifique el formato de datos para obtener configuraciones de robots de vector de fila.'row'

robot = loadrobot('kinovaGen3','DataFormat','row');

Inicializar el distribuidor de comandos Pick and Place

Establezca la configuración inicial del robot. Cree el despachador dando el modelo del robot, la configuración inicial y el nombre del efector final.

currentRobotJConfig = homeConfiguration(robot); dispatcher = exampleHelperDispatcherPickPlace(robot,currentRobotJConfig, "EndEffector_Link");

Especifique las propiedades del dispater pick-and-place.

dispatcher.homeRobotTaskConfig = trvec2tform([0.4, 0, 0.6])*axang2tform([0 1 0 pi]); dispatcher.placingPose{1} = trvec2tform([[0.31 0.62 0.36]])*axang2tform([0 1 0 pi]); dispatcher.placingPose{2} = trvec2tform([[0.31 -0.62 0.36]])*axang2tform([0 1 0 pi]);

Ejecutar y visualizar la simulación

Conecte el distribuidor de comandos al gráfico Stateflow. Una vez iniciado, el gráfico Stateflow es responsable de pasar continuamente a través de los estados de detección de objetos, recogerlos y colocarlos en el área de ensayo correcta.

dispatcher.flowChart = exampleHelperFlowChartPickPlace('dispatcher', dispatcher); 

Utilice un cuadro de diálogo para iniciar la ejecución de la tarea de selección y colocación. Continúe ejecutando el distribuidor de comandos hasta que se haya producido un número fijo de ejecuciones de detección. Cuando se hayan completado las ejecuciones, elimine el objeto de distribuidor.

answer = questdlg('Do you want to start the pick-and-place job now?', ...          'Start job','Yes','No', 'No');  switch answer     case 'Yes'         while dispatcher.numDetectionRuns < 4              dispatcher.run;         end         delete(dispatcher);     case 'No'         delete(dispatcher); end 

Observar los Estados de Simulación

Durante la ejecución, los estados activos en cada punto en el tiempo se resaltan en azul en el gráfico Stateflow. Esto ayuda a realizar un seguimiento de lo que hace el robot y cuándo. Puede hacer clic en los subsistemas para ver los detalles del estado en acción.

Visualizar la acción de selección y lugar

La visualización muestra el robot en el área de trabajo a medida que mueve partes alrededor. El robot evita obstáculos en el medio ambiente (bola azul) y coloca objetos en función de su clasificación. El robot continúa trabajando hasta que se han colocado todas las piezas.

Copyright 2019 The MathWorks, Inc.