Рабочий процесс Pick-Place с помощью Stateflow в MATLAB

В этом примере показано, как установить сквозной выбор и рабочий процесс места для автоматизированного манипулятора как KINOVA® Gen3.

Панорама

Этот пример идентифицирует и объекты видов на две таблицы с помощью манипулятора КИНОВОЙ Gen3. Пример использует инструменты от четырех тулбоксов:

  • Robotics System Toolbox™ используется к модели, симулируйте и визуализируйте манипулятор, и для проверки столкновения.

  • Model Predictive Control Toolbox™ и Optimization Toolbox™ используются к сгенерированным оптимизированным, траекториям без коллизий для манипулятора, чтобы следовать.

  • Stateflow® используется, чтобы запланировать высокоуровневые задачи в примере и шаге от задачи до задачи.

Этот пример основывается на ключевых концепциях из двух связанных примеров:

Диаграмма Stateflow

Этот пример использует диаграмму Stateflow, чтобы запланировать задачи в примере. Откройте график, чтобы исследовать содержимое и следовать за изменениями состояния во время выполнения графика.

edit exampleHelperFlowChartPickPlace.sfx

График диктует, как манипулятор взаимодействует с объектами или частями. Это состоит из основных шагов инициализации, выполненных двумя основными разделами:

  • Идентифицируйте части и определите, куда разместить их

  • Выполните рабочий процесс Pick-Place

Инициализируйте робота и среду

Во-первых, график создает среду, состоящую из манипулятора Киновой Gen3, три части, которые будут отсортированы, таблицы, используемые в сортировке и синем препятствии. Затем робот перемещается в исходное положение.

Идентифицируйте части и определите, куда разместить их

В первом шаге идентификационной фазы должны быть обнаружены части. commandDetectParts класс непосредственно дает объектные положения. Замените этот класс на свой собственный алгоритм обнаружения объектов на основе ваших датчиков или объектов.

Затем части должны быть классифицированы. commandClassifyParts класс классифицирует части в два типа, чтобы определить, куда разместить их (левая или правая таблица). Снова, можно заменить этот класс на любой метод для классификации частей.

Выполните рабочий процесс Pick-Place

Если части идентифицированы, и их места назначения были присвоены, манипулятор должен выполнить итерации через части и перейти их на соответствующие таблицы.

Возьмите Объект

Фаза выбора перемещает робота в объект, берет его и перемещается в безопасное положение, как показано в следующей схеме:

CommandComputeGraspPose класс вычисляет положение схватывания. Класс вычисляет цепкое положение пробела задачи для каждой части. Промежуточные шаги для приближения и достижения к части также заданы относительно объекта.

Этот робот берет объекты с помощью симулированного пневматического механизма захвата. Когда механизм захвата активируется, CommandActivateGripper добавляет mesh столкновения для части на rigidBodyTree представление робота, который симулирует захват его. Обнаружение столкновений включает этот объект, в то время как это присоединяется. Затем робот перемещается в положение, от которого отрекаются, далеко от других частей.

Поместите объект

Робот затем помещает объект в соответствующую таблицу.

Как с рабочим процессом выбора, подходом размещения и отрекся от положений, вычисляются относительно известного желаемого положения размещения. Механизм захвата деактивирован с помощью CommandActivateGripper, который удаляет часть из робота.

Перемещение манипулятора к заданному положению

Большая часть выполнения задачи состоит из того, чтобы давать команду роботу переместиться между различными заданными положениями. exampleHelperPlanExecuteTrajectoryPickPlace функция задает решатель с помощью нелинейного прогнозирующего контроллера модели (см. Нелинейный MPC (Model Predictive Control Toolbox)), который вычисляет выполнимую, оптимизированную ссылочную траекторию без коллизий с помощью nlmpcmove и checkCollision. Проверка столкновения вычисляется для манипулятора и методов использования среды, подобных, чтобы Проверять на Экологические Столкновения с Манипуляторами. Функция помощника затем симулирует движение манипулятора под управлением вычисленного крутящего момента, когда это отслеживает ссылочную траекторию с помощью jointSpaceMotionModel объект и обновления визуализация. Функция помощника вызвана от диаграммы Stateflow через CommandMoveToTaskConfig, который задает правильные входные параметры.

Этот рабочий процесс исследован подробно в Плане, и Выполните использование Траекторий Без коллизий Манипулятор КИНОВОЙ Gen3. Контроллер используется, чтобы гарантировать движение без коллизий. Для более простых траекторий, где пути, как известно, без препятствий, траектории могли быть выполнены с помощью инструментов генерации траектории и симулировали использование моделей движения манипулятора. См. План и Выполните Задачу - и использование Объединенных пространственных траекторий Манипулятор КИНОВОЙ Gen3.

Планирование задач в диаграмме Stateflow с помощью Диспетчера Команды

Этот пример использует диаграмму Stateflow, чтобы направить рабочий процесс в MATLAB®. Для большего количества информации о создании потока состояния запускается, смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB (Stateflow).

Диаграмма Stateflow направляет выполнение задачи в MATLAB при помощи классов команды, которые диспетчеризируются exampleHelperDispatcherPickPlace. Путем диспетчеризации последовательности команд можно постараться не создавать большой стек вызовов функции в графике. Когда команда закончила выполняться, диспетчер отправляет входное событие, чтобы разбудить график и перейти к следующему шагу выполнения задачи, видеть, Выполняют Автономный График (Stateflow).

Выполнение команд

Диспетчер обеспечивает очередь указателей на классы команды как свойство. Диаграмма Stateflow, exampleHelperFlowChartPickPlace, добавляют команды, такие как ActivateGripper или DetectParts этой очереди после изменений состояния, заданных в графике. Пока диспетчер запускается, это проверяет на новые команды в очереди на постоянном уровне и диспетчеризирует их для выполнения.

Определения команды

Команды являются наследованными классами, которые описывают отличные операции, которые должен выполнить робот для того, чтобы завершить pick-place рабочий процесс.

Чтобы добавить пользовательскую команду, используйте любую из обеспеченных команд как шаблон. В минимуме команда должна:

  • наследуйте от класса Handle exampleHelperCommandPickPlace

  • Включайте doit() метод, который реализует необходимую функциональность, с помощью данных от диспетчера и передавая данные обратно в него (например, если бы обнаружение части использует классификацию облаков точек, диспетчер содержал бы облако точек и doit() метод CommandDetectParts Команда анализировала бы облако точек, чтобы определить расположение детали).

Запустите и визуализируйте симуляцию

Эта симуляция использует манипулятор КИНОВОЙ Gen3. Загрузите робота с помощью loadrobot. Задайте формат данных как 'row' получить настройки робота вектора-строки.

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

Инициализируйте диспетчера команды выбора и места

Установите начальную настройку робота. Создайте диспетчера путем предоставления модели робота, начальной настройки и имени исполнительного элемента конца.

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

Задайте pick-place dispater свойства.

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]);

Запустите и визуализируйте симуляцию

Соедините Диспетчера Команды с диаграммой Stateflow. После того, как запущенный, диаграмма Stateflow ответственна за то, что постоянно прошла состояния обнаружения объектов, собирания их и размещения их в правильном районе сосредоточения войск.

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

Используйте диалоговое окно, чтобы запустить pick-place выполнение задачи. Продолжите запускать диспетчера команды, пока постоянное число запусков обнаружения не произошло. Когда запуски завершатся, удалите объект диспетчера.

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

Наблюдайте состояния симуляции

Во время выполнения активные состояния в каждом моменте времени подсвечены в синем в диаграмме Stateflow. Это помогает отслеживанию того, что робот делает и когда. Можно щелкнуть через подсистемы, чтобы видеть детали состояния в действии.

Визуализируйте действие Pick-Place

Визуализация показывает робота в рабочей области, когда это перемещает части. Робот избегает препятствий в среде (синий шар) и помещает объекты на основе их классификации. Робот продолжает работать, пока все части не были помещены.

Copyright 2019 The MathWorks, Inc.

Для просмотра документации необходимо авторизоваться на сайте