В этом примере показано, как установить сквозной выбор и рабочий процесс места для автоматизированного манипулятора как KINOVA® Gen3.
Этот пример виды обнаружил объекты на полки с помощью манипулятора КИНОВОЙ Gen3. Пример использует инструменты от четырех тулбоксов:
Robotics System Toolbox™ используется к модели, симулируйте и визуализируйте манипулятор, и для проверки столкновения.
Model Predictive Control Toolbox™ и Optimization Toolbox™ используются к сгенерированным оптимизированным, траекториям без коллизий для манипулятора, чтобы следовать.
Stateflow® используется, чтобы запланировать высокоуровневые задачи в примере и шаге от задачи до задачи.
Этот пример основывается на ключевых концепциях из двух связанных примеров:
Запланируйте и Выполните Задачу - и использование Объединенных пространственных траекторий, которое показывает Манипулятор КИНОВОЙ Gen3, как сгенерировать и симулировать интерполированные объединенные траектории, чтобы переместиться от начальной буквы до желаемого положения исполнительного элемента конца.
Запланируйте и Выполните использование Траекторий Без коллизий, которое показывает Манипулятор КИНОВОЙ Gen3, как запланировать траектории робота без коллизий с обратной связью на желаемое положение исполнительного элемента конца с помощью нелинейного прогнозирующего управления модели.
Этот пример использует диаграмму Stateflow, чтобы запланировать задачи в примере. Откройте график, чтобы исследовать содержимое и следовать за изменениями состояния во время выполнения графика.
edit exampleHelperFlowChartPickPlace.sfx
График диктует, как манипулятор взаимодействует с объектами или частями. Это состоит из основных шагов инициализации, выполненных двумя основными разделами:
Идентифицируйте части и определите, куда разместить их
Выполните рабочий процесс Pick-Place
Во-первых, график создает среду, состоящую из манипулятора Киновой Gen3, три части, которые будут отсортированы, полки, используемые в сортировке и синем препятствии. Затем робот перемещается в исходное положение.
В первом шаге идентификационной фазы должны быть обнаружены части. exampleCommandDetectParts
функция непосредственно дает объектные положения. Замените этот класс на свой собственный алгоритм обнаружения объектов на основе ваших датчиков или объектов.
Затем части должны быть классифицированы. exampleCommandClassifyParts
функция классифицирует части в два типа, чтобы определить, куда разместить их (верхняя часть или нижняя полка). Снова, можно заменить эту функцию на любой метод для классификации частей.
Если части идентифицированы, и их места назначения были присвоены, манипулятор должен выполнить итерации через части и перейти их на соответствующие таблицы.
Фаза выбора перемещает робота в объект, берет его и перемещается в безопасное положение, как показано в следующей схеме:
exampleCommandComputeGraspPose
функция вычисляет положение схватывания. Класс вычисляет цепкое положение пробела задачи для каждой части. Промежуточные шаги для приближения и достижения к части также заданы относительно объекта.
Этот робот берет объекты с помощью симулированного пневматического механизма захвата. Когда механизм захвата активируется, exampleCommandActivateGripper
добавляет mesh столкновения для части на rigidBodyTree
представление робота, который симулирует захват его. Обнаружение столкновений включает этот объект, в то время как это присоединяется. Затем робот перемещается в положение, от которого отрекаются, далеко от других частей.
Робот затем кладет объект на соответствующую полку.
Как с рабочим процессом выбора, подходом размещения и отрекся от положений, вычисляются относительно известного желаемого положения размещения. Механизм захвата деактивирован с помощью exampleCommandActivateGripper
, который удаляет часть из робота.
Большая часть выполнения задачи состоит из того, чтобы давать команду роботу переместиться между различными заданными положениями. exampleHelperPlanExecuteTrajectoryPickPlace
функция задает решатель с помощью нелинейного прогнозирующего контроллера модели (см. Нелинейный MPC (Model Predictive Control Toolbox)), который вычисляет выполнимую, оптимизированную ссылочную траекторию без коллизий с помощью nlmpcmove
и checkCollision
. Проверка столкновения вычисляется для манипулятора и методов использования среды, подобных, чтобы Проверять на Экологические Столкновения с Манипуляторами. Препятствия представлены как сферы, чтобы гарантировать точное приближение ограничительного якобиана в определении нелинейного прогнозирующего алгоритма управления модели (см. [1]). Функция помощника затем симулирует движение манипулятора под управлением вычисленного крутящего момента, когда это отслеживает ссылочную траекторию с помощью jointSpaceMotionModel
объект и обновления визуализация. Функция помощника вызвана от диаграммы Stateflow через exampleCommandMoveToTaskConfig
, который задает правильные входные параметры.
Этот рабочий процесс исследован подробно в Плане, и Выполните использование Траекторий Без коллизий Манипулятор КИНОВОЙ Gen3. Контроллер используется, чтобы гарантировать движение без коллизий. Для более простых траекторий, где пути, как известно, без препятствий, траектории могли быть выполнены с помощью инструментов генерации траектории и симулировали использование моделей движения манипулятора. См. План и Выполните Задачу - и использование Объединенных пространственных траекторий Манипулятор КИНОВОЙ Gen3.
Этот пример использует диаграмму Stateflow, чтобы направить рабочий процесс в MATLAB®. Для большего количества информации о создании потока состояния запускается, смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB (Stateflow).
Диаграмма Stateflow направляет выполнение задачи в MATLAB при помощи функций команды. Когда команда закончила выполняться, она отправляет входное событие, чтобы разбудить график и перейти к следующему шагу выполнения задачи, видеть, Выполняют Автономную диаграмму (Stateflow).
Эта симуляция использует манипулятор КИНОВОЙ Gen3 с механизмом захвата Robotiq.
load('exampleHelperKINOVAGen3RobotiqGripper.mat');
Установите начальную настройку робота. Создайте координатора путем предоставления модели робота, начальной настройки и имени исполнительного элемента конца.
currentRobotJConfig = homeConfiguration(robot);
coordinator = exampleHelperCoordinatorPickPlace(robot,currentRobotJConfig, "gripper");
Задайте pick-place свойства.
coordinator.HomeRobotTaskConfig = trvec2tform([0.4, 0, 0.6])*axang2tform([0 1 0 pi]); coordinator.PlacingPose{1} = trvec2tform([[-0.2 0.55 0.46]])*axang2tform([1 0 0 -pi/2]); coordinator.PlacingPose{2} = trvec2tform([[-0.2 0.55 0.63]])*axang2tform([1 0 0 -pi/2]);
Соедините Координатора с диаграммой Stateflow. После того, как запущенный, диаграмма Stateflow ответственна за то, что постоянно прошла состояния обнаружения объектов, собирания их и размещения их в правильном районе сосредоточения войск.
coordinator.FlowChart = exampleHelperFlowChartPickPlace('coordinator', coordinator);
Используйте диалоговое окно, чтобы запустить pick-place выполнение задачи.
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 неудачных попыток обнаружить новые объекты. Чтобы закончить pick-place задачу преждевременно, не прокомментируйте и выполните следующие строки кода или нажмите Ctrl+C в командном окне.
% coordinator.FlowChart.endPickPlace; % delete(coordinator.FlowChart); % delete(coordinator);
Во время выполнения активные состояния в каждом моменте времени подсвечены в синем в диаграмме Stateflow. Это помогает отслеживанию того, что робот делает и когда. Можно щелкнуть через подсистемы, чтобы видеть детали состояния в действии.
Пример использует interactiveRigidBodyTree++
для визуализации робота. Визуализация показывает робота в рабочей области, когда это перемещает части. Робот избегает препятствий в среде (синий цилиндр) и помещает объекты в верхнюю часть или нижнюю полку на основе их классификации. Робот продолжает работать, пока все части не были помещены.
[1] Шульман, J., и др. "Движение, планирующее с последовательной выпуклой оптимизацией и выпуклой проверкой столкновения". Международный журнал Исследования Робототехники 33.9 (2014): 1251-1270.