В этом примере показано, как настроить сквозной выбор и размещение рабочего процесса для роботизированного манипулятора, такого как Gen3 KINOVA ®.
Рабочий процесс выбора и размещения, реализованный в этом примере, может быть адаптирован к различным сценариям, планировщикам, платформам симуляции и опциям обнаружения объектов. Пример, показанный здесь, использует Model Predictive Control для планирования и управления и симулирует робота в MATLAB. Для других применений смотрите:
Этот пример сортирует обнаруженные объекты и помещает их на скамейки с помощью манипулятора Gen3 KINOVA. В примере используются инструменты из четырех тулбоксов:
Robotics System Toolbox™ используется для моделирования, моделирования и визуализации манипулятора и для проверки столкновения.
Model Predictive Control Toolbox™ и Optimization Toolbox™ используются для генерации оптимизированных, свободных от столкновения траекторий для следования манипулятору.
Stateflow ® используется для планирования задач высокого уровня в примере и шага от задачи к задаче.
Этот пример основан на ключевых концепциях из двух связанных примеров:
Планирование и выполнение траекторий Task - и Joint-Space Использование KINOVA Gen3 Manipulator показывает, как сгенерировать и симулировать интерполированные траектории соединений, чтобы перейти от начального к желаемому положению end-effector.
Планирование и выполнение траекторий без столкновений Использование KINOVA Gen3 Manipulator показывает, как планировать траектории робота без столкновений с замкнутым контуром в желаемое положение с концом с помощью нелинейного прогнозирующего управления моделью.
Этот пример использует диаграмму Stateflow, чтобы запланировать задачи в примере. Откройте график, чтобы изучить содержимое и следовать изменениям состояния во время выполнения графика.
edit exampleHelperFlowChartPickPlace.sfx
График диктует, как манипулятор взаимодействует с объектами или частями. Он состоит из основных шагов инициализации, за которыми следуют два основных раздела:
Идентифицируйте детали и определите, где их разместить
Выполните рабочий процесс комплектования и размещения
Во-первых, график создает окружение, состоящую из манипулятора Gen3 Kinova, трех частей, подлежащих сортировке, полок, используемых для сортировки, и синего препятствия. Далее робот переходит в исходное положение.
На первом этапе фазы идентификации части должны быть обнаружены. ПримерКомандная DetectParts
функция непосредственно задает положения объектов. Замените этот класс на свой собственный алгоритм обнаружения объектов, основанный на ваших датчиках или объектах.
Далее позиции должны быть классифицированы. ПримерКомандная ClassifyParts
Функция классифицирует детали в два типа, чтобы определить, где их разместить (верхняя или нижняя полка). Снова можно заменить эту функцию любым методом классификации деталей.
После идентификации деталей и назначения их адресатов манипулятор должен выполнить итерацию через детали и переместить их в соответствующие таблицы.
Фаза захвата перемещает робота к объекту, захватывает его и переходит в безопасное положение, как показано на следующей схеме:
ПримерКомандная ComputeGraspPose
функция вычисляет положение захвата. Класс вычисляет положение захвата пространства задач для каждой детали. Промежуточные шаги для приближения и достижения к части также заданы относительно объекта.
Этот робот забирает объекты с помощью моделируемого захвата. Когда захват активирован, exampleCommand ActivateGripper
добавляет mesh столкновения для детали в rigidBodyTree
представление робота, которое имитирует захват его. Обнаружение столкновения включает этот объект во время присоединения. Затем робот переходит в убранное положение от других частей.
Затем робот помещает объект на соответствующую полку.
Как и в случае рабочего процесса захвата, подход к размещению и убранные положения вычисляются относительно известного желаемого положения размещения. Захват деактивируется с помощью exampleCommand ActivateGripper
, который удаляет деталь из робота.
Большая часть выполнения задачи состоит из инструкции роботу перемещаться между различными заданными положениями. The exampleHelperPlanExecuteTrajectoryPickPlace
функция задает решатель с помощью нелинейного прогнозирующего контроллера модели (см. Nonlinear MPC (Model Predictive Control Toolbox)), который вычисляет допустимую, без столкновения оптимизированную эталонную траекторию с помощью nlmpcmove
(Model Predictive Control Toolbox) и checkCollision
. Препятствия представлены как сферы, чтобы гарантировать точное приближение ограничения якобиана в определении нелинейной модели прогнозирующего алгоритма управления (см. [1]). Функция helper затем моделирует движение манипулятора под управлением вычисляемым крутящим моментом, когда она отслеживает эталонную траекторию, используя jointSpaceMotionModel
объект и обновляет визуализацию. Функция helper вызывается из диаграммы Stateflow через exampleCommandMoveToTaskConfig
, который определяет правильные входы.
Этот рабочий процесс подробно рассматривается в разделе «Планирование и выполнение траекторий без столкновений» с использованием KINOVA Gen3 Manipulator. Контроллер используется для обеспечения свободного от столкновения движения. Для более простых траекторий, где пути, как известно, не имеют препятствий, траектории могут быть выполнены с помощью инструментов генерации траекторий и моделированы с помощью моделей движения манипулятора. Смотрите План и Выполнение Траекторий Пространства Задач и Соединений Используя KINOVA Gen3 Manipulator.
Этот пример использует диаграмму Stateflow, чтобы направить рабочий процесс в MATLAB ®. Для получения дополнительной информации о создании блок-схем состояний смотрите Создание диаграмм Stateflow для выполнения в качестве объектов MATLAB (Stateflow).
Диаграмма Stateflow управляет выполнением задачи в MATLAB с помощью командных функций. Когда команда заканчивает выполняться, она отправляет входу событие, чтобы пробудить график и перейти к следующему шагу выполнения задачи, см. «Выполнение автономной диаграммы (Stateflow)».
В этой симуляции используется манипулятор Gen3 KINOVA с захватом Robotiq. Загрузка модели робота из .mat
файл как rigidBodyTree
объект.
load('exampleHelperKINOVAGen3GripperColl.mat');
Установите начальное строение робота. Создайте координатор, который обрабатывает управление роботом, путем присвоения модели робота, начального строения и имени конечного эффектора.
currentRobotJConfig = homeConfiguration(robot);
coordinator = exampleHelperCoordinatorPickPlace(robot,currentRobotJConfig, "gripper");
Задайте домашнее строение и два положения для размещения объектов разных типов.
coordinator.HomeRobotTaskConfig = trvec2tform([0.4, 0, 0.6])*axang2tform([0 1 0 pi]); coordinator.PlacingPose{1} = trvec2tform([0.23 0.62 0.33])*axang2tform([0 1 0 pi]); coordinator.PlacingPose{2} = trvec2tform([0.23 -0.62 0.33])*axang2tform([0 1 0 pi]);
Соедините координатора с диаграммой Stateflow. После запуска диаграмма Stateflow отвечает за непрерывное прохождение состояний обнаружения объектов, их захват и размещение в правильной промежуточной области.
coordinator.FlowChart = exampleHelperFlowChartPickPlace('coordinator', coordinator);
Используйте диалоговое окно, чтобы начать выполнение задачи комплектования и размещения. Нажмите Да в диалоговом окне, чтобы начать симуляцию.
answer = questdlg('Do you want to start the pick-and-place job now?', ... 'Start job','Yes','No', 'No'); switch answer case 'Yes' % Trigger event to start Pick and Place in the Stateflow Chart coordinator.FlowChart.startPickPlace; case 'No' % End Pick and Place coordinator.FlowChart.endPickPlace; delete(coordinator.FlowChart); delete(coordinator); end
Диаграмма Stateflow будет завершена автоматически после 3 неудачных попыток обнаружения новых объектов. Чтобы завершить задачу выбора и размещения раньше времени, раскомментируйте и выполните следующие строки кода или нажмите Ctrl + C в командном окне.
% coordinator.FlowChart.endPickPlace; % delete(coordinator.FlowChart); % delete(coordinator);
Во время выполнения активные состояния в каждую точку времени подсвечиваются синим цветом на диаграмме Stateflow. Это помогает отслеживать, что и когда делает робот. Можно кликнуть подсистемы, чтобы увидеть детали состояния в действии.
В примере используются interactiveRigidBodyTree
для визуализации робота. Визуализация показывает робота в рабочей области, когда он перемещает части вокруг. Робот избегает препятствий в окружении (синий цилиндр) и помещает объекты на верхнюю или нижнюю полку на основе их классификации. Робот продолжает работать до тех пор, пока не будут размещены все детали.
[1] Schulman, J., et al. Планирование движения с последовательной выпуклой оптимизацией и проверкой выпуклого столкновения. Международный журнал исследований робототехники 33.9 (2014): 1251-1270.