Выполните рабочий процесс pick-and-place с помощью робота ABB YuMi, который демонстрирует, как проектировать алгоритмы робота в Simulink ®, а затем моделируйте действие в тестовом окружении с помощью Simscape™. Пример также показывает, как смоделировать систему с различными уровнями точности, чтобы сосредоточиться на лучшем особом внимании на связанном проекте алгоритма.
Элементы проекта этого примера разделены на три раздела, чтобы легче фокусироваться на различных аспектах проекта модели:
Создайте планировщик задач и траекторий для выбора и размещения с помощью динамики системы упрощенного манипулятора:
Добавьте динамику Core Manipulator и разработайте контроллер
Проверьте полный рабочий процесс на Simscape Модели робота и Окружения
В Интерактивно Создайте Траекторию для примера ABB YuMi Robot, последовательность точек пути робота была спроектирована и воспроизведена с помощью непрерывной траектории. В этом примере модели Simulink преобразуют эти путевые точки в полный и повторяемый рабочий процесс выбора и размещения. Модель имеет два ключевых элемента:
Планирование задач и генерация траектории фрагмента определяет, как робот проходит через состояния. Это включает состояние строения робота в любой момент, каково положение цели, должен ли захват быть открытым или закрытым, и текущую траекторию, отправляемую роботу.
Фрагмент динамики системы моделирует поведение робота. Это определяет, как робот перемещается, учитывая набор ссылки траекторий и логическую команду захвата (открытая или закрытая). Динамика системы может быть смоделирована с различными уровнями точности, в зависимости от цели общей модели.
В данном примере во время проекта планировщика задач цель состоит в том, чтобы убедиться, что планировщик ведет себя правильно при предположении, что робот находится под стабильным управлением движением. Для этого фрагмента модель, которая моделирует быстро желательную, поэтому динамика системы моделируется с помощью блока Joint Space Motion Model. Этот блок моделирует движение манипулятора, заданное для эталонных траекторий пространства соединений под стабильным контроллером с предопределенными параметрами отклика. Когда планирование задач завершено, особое внимание модели смещается к проектированию контроллера и верификации системы, что требует более сложных моделей динамики системы.
Загрузите модель робота ABB YuMi. Робот является промышленным манипулятором с двумя руками. Этот пример использует только одну руку.
robot = loadrobot('abbYumi','Gravity',[0 0 -9.81]);
Создайте визуализацию, чтобы воспроизвести моделируемые траектории.
iviz = interactiveRigidBodyTree(robot); ax = gca;
Добавьте окружение путем создания набора объектов столкновения с помощью функции helper в качестве примера.
exampleHelperSetupWorkspace(ax);
Этот пример использует набор предопределённых строений, configSequence
, как и состояния робота. Они хранятся в связанном файле MAT и были первоначально определены в Интерактивно Построить Траекторию для Робота ABB YuMi.
load abbSavedConfigs.mat configSequence
Для симуляции должно быть определено начальное состояние робота, включая положение, скорость и ускорение каждого соединения.
% Define initial state q0 = configSequence(:,1); % Position dq0 = zeros(size(q0)); % Velocity ddq0 = zeros(size(q0)); % Acceleration
Загрузите первую модель, которая фокусируется на разделе планирования задач и генерации траектории модели.
open_system('modelWithSimplifiedSystemDynamics.slx');
Чтобы сосредоточиться на фрагменте модели планирования, динамика системы моделируется с помощью блока Joint Space Motion Model. Эта модель движения предполагает, что робот может достичь заданных строений под стабильным, точным управлением. Позже в примере подробно описывается более точное моделирование динамики системы.
Захват моделируется как простой логический командный вход как 0
или 1
(открытый или закрытый) и выход, который указывает, достиг ли захват командного положения. Как правило, роботы обрабатывают команду захвата отдельно от других входов строения.
Серия задач, через которые робот проходит, состоит из восьми состояний:
Планировщик реализован с использованием блока MATLAB Function, commandLogic
. Планировщик совершенствует состояния, когда достигается состояние захвата, и все соединения манипулятора достигают своих целевых положений в пределах предопределенного порога. Каждая задача введена к Трапециевидному блоку Траектории Профиля Скорости, который производит гладкую траекторию между каждым waypoint.
Предоставленная модель Simulink хранит переменные, относящиеся к примеру, в Рабочем пространстве модели. Щелкните Загрузка параметров по умолчанию (Load Default Parameters), чтобы при необходимости повторно инициализировать переменные. Для получения дополнительной информации см. «Рабочие рабочие пространства модели» (Simulink).
Запустите модель, позвонив sim
.
Используйте интерактивную визуализацию, чтобы воспроизвести движение назад. Модель моделируется в течение нескольких дополнительных секунд, чтобы убедиться, что цикл закольцовывается должным образом после первого движения. Эта модель не моделирует никакого взаимодействия окружения, поэтому робот на самом деле не захватывает объекты в этой симуляции.
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
Теперь, когда планировщик разработан и проверен, добавьте контроллер для робота с двумя элементами
Более сложная модель динамики манипулятора, которая принимает моменты в соединениях и команды захвата
Контроллер пространства соединений, который возвращает моменты в соединениях, заданные желаемыми, и состояния манипулятора тока
Откройте следующую предоставленную модель с добавленным контроллером.
open_system('modelWithControllerAndBasicRobotDynamics.slx');
Для разработки контроллера динамика манипулятора должна представлять положения соединений манипулятора с учетом входов крутящего момента. Это достигается внутри подсистемы Manipulator Dynamics с помощью блока Forward Dynamics для преобразования крутящих моментов в соединениях в зависимости от текущего состояния, и затем дважды интегрируется, чтобы получить полное строение соединений. Интеграторы инициализируются таким образом q0
и dq0
, начальное положение соединения и скорость.
Кроме того, подсистема управления захватом переопределяет моменты управления соединениями с приводами захвата с 10 Н силы, которая прикладывается для закрытия или открытия захвата.
Обратите внимание, что второй интегратор насыщен.
В то время как манипуляторы под хорошо спроектированными контроллерами положения обычно не будут достигать пределов соединений, сложение сил разомкнутого контура от действия захвата означает, что пределы соединений требуются для обеспечения реалистичной реакции. Для более точной модели насыщение соединений может быть связано со скоростью, чтобы сбросить интегрирование, но для этой модели этот уровень точности достаточен.
Эта модель также добавляет более подробный датчик захвата, чтобы проверить, когда захват действительно был открыт или закрыт. Датчик захвата извлекает последние два значения строения соединения (значения, которые соответствуют положению захвата) и сравнивает их с намеченным положением захвата, заданным closeGripper
команда, в блоке MATLAB Function, Gripper Logic. Статус захвата возвращается 1, когда положения захватных соединений совпадают с желаемым состоянием, заданным командой closeGripper. Когда захват еще не достиг этих состояний, Gripper Status возвращает нуль. Это соответствует поведению модели Захвата в более ранней, упрощенной модели.
Эта модель также добавляет контроллер вычисленного крутящего момента, который реализует основанный на модели подход к управлению соединениями. Для получения дополнительной информации смотрите Build Computed Torque Controller Using Robotics Manipulator Blocks в примере Perform Safe Trajectory Tracking Control Using Robotics Manipulator Blocks. Эта модель использует тот же контроллер, но с ABB YuMi в качестве rigidBodyTree
вход, а не переосмысление Сойера.
Моделируйте и визуализируйте результаты с помощью новой модели.
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
Теперь, когда планировщик задач и контроллер были спроектированы, добавьте более сложные модели робота и окружения. Используйте Simscape Multibody™, который может создавать высокоточные модели физических систем. В этом приложении Simscape добавляет динамику со встроенными пределами соединений и контактным моделированием. Этот последний шаг добавляет точность симуляции за счет сложности моделирования и скорости симуляции. Simcape также предоставляет встроенную визуализацию Mechanics Explorer, которая может просматриваться во время и после симуляции.
Загрузите окончательную предоставленную модель, которая имеет тот же вид сверху.
open_system('modelWithSimscapeRobotAndEnvironmentDynamics.slx');
Этим основным отличием от предыдущей модели является модель объекта управления. Динамика основных манипуляторов из предыдущей модели была заменена на модель Simscape для робота и окружения:
Манипулятор и окружение создаются с помощью Simscape Multibody. Модель робота была создана по вызову smimport
на файле URDF робота с предоставленными сетками. Затем шарниры приводились в действие с моментами в соединениях путем связывания через муксы и метки GoTo и оснащались датчиками, которые возвращают положение, скорость и ускорение соединений.
Объекты или виджеты фактически взяты в этой симуляции, поэтому определите размер виджета.
widgetDimensions = [0.02 0.02 0.07];
Контакт в этой модели разделен на две категории:
Контакт между захватом и виджетом
Контакт между виджетом и средой
В обоих случаях контактные прокси используются вместо прямого контакта поверхности с поверхностью. Использование контактных прокси ускоряет моделирование для улучшения эффективности. Для контакта захват-виджет контакты захвата моделируются с помощью двух твердых частиц кирпича, в то время как восемь сферических контактов используются для моделирования интерфейса виджета. Точно так же контакт виджет-среда использует сферы в каждом из четырех углов виджета, которые контактируют с твердыми частицами кирпича, представляющими окружение.
Задайте параметры для моделей контактов, чтобы они были близки к своим состояниям по умолчанию.
% Contact parameters
stiffness = 1e4;
damping = 30;
transition_region_width = 1e-4;
static_friction_coef = 1;
kinetic_friction_coef = 1;
critical_velocity = 1;
Управление Захватом то же самое, но Датчик Захвата изменен. Поскольку этот захват может фактически захватывать объекты, состояние закрытого захвата достигается, когда захват является твердым. Фактическое закрытое положение никогда не может быть достигнуто. Поэтому добавлена дополнительная логика, которая возвращает значение, isGrippingObj
, что верно, когда и левая, и правая силы реакции захвата превышают порог значение. Блок Gripper Logic MATLAB Function принимает эту переменную как вход.
Симулируйте робота. Из-за высокой сложности это может занять несколько минут.
simout = sim('modelWithSimscapeRobotAndEnvironmentDynamics.slx');
Используйте Mechanics Explorer, чтобы визуализировать эффективность во время и после симуляции.
Этот пример был сфокусирован на проекте системы планирования и управления для приложения выбора и размещения. Дальнейшие исследования могут включать в себя эффект дискретизации на контроллере, влияние неожиданного контакта с использованием Simscape Multibody или расширение к многодоменной модели, такой как детализация поведения электродвигателей, которые использует робот.