Запланируйте путь с помощью RRT для манипуляторов
планирует путь между заданным запуском и целевыми настройками с помощью манипулятора, быстро исследуя случайные деревья (RRT) планировщик path
= plan(rrt
,startConfig
,goalConfig
)rrt
.
планирует путь между заданным запуском и целевой областью как path
= plan(rrt
,startConfig
,goalRegion
)workspaceGoalRegion
объект
Используйте manipulatorRRT
возразите, чтобы запланировать путь модель робота дерева твердого тела в среде с препятствиями. Визуализируйте запланированный путь с интерполированными состояниями.
Загрузите модель робота в рабочую область. Используйте LBR KUKA рука манипулятора iiwa©.
robot = loadrobot("kukaIiwa14","DataFormat","row");
Сгенерируйте среду для робота. Создайте объекты столкновения и задайте их положения относительно основы робота. Визуализируйте среду.
env = {collisionBox(0.5, 0.5, 0.05) collisionSphere(0.3)};
env{1}.Pose(3, end) = -0.05;
env{2}.Pose(1:3, end) = [0.1 0.2 0.8];
show(robot);
hold on
show(env{1})
show(env{2})
Создайте планировщика RRT для модели робота.
rrt = manipulatorRRT(robot,env);
Задайте запуск и целевую настройку.
startConfig = [0.08 -0.65 0.05 0.02 0.04 0.49 0.04]; goalConfig = [2.97 -1.05 0.05 0.02 0.04 0.49 0.04];
Запланируйте путь. Из-за случайности алгоритма RRT, набор rng
отберите для воспроизводимости.
rng(0) path = plan(rrt,startConfig,goalConfig);
Визуализируйте путь. Чтобы добавить больше промежуточных состояний, интерполируйте путь. По умолчанию, interpolate
возразите, что функция использует значение ValidationDistance
свойство определить количество промежуточных состояний. for
цикл показывает каждый 20-й элемент интерполированного пути.
interpPath = interpolate(rrt,path); clf for i = 1:20:size(interpPath,1) show(robot,interpPath(i,:)); hold on end show(env{1}) show(env{2}) hold off
Задайте целевую область в своей рабочей области и запланируйте путь в тех границах. workspaceGoalRegion
объект задает границы на XYZ-позиционной и Эйлеровой ориентации ZYX исполнительного элемента конца робота. manipulatorRRT
возразите планирует путь на основе той целевой области и выборок случайные положения в границах.
Загрузите существующую модель робота как rigidBodyTree
объект.
robot = loadrobot("kinovaGen3", "DataFormat", "row"); ax = show(robot);
Создайте планировщика пути
Создайте планировщика пути к быстро исследующему случайному дереву (RRT) для робота. Этот пример использует пустую среду, но этот рабочий процесс также работает хорошо с нарушенными средами. Можно добавить, что столкновение возражает против среды как collisionBox
или collisionMesh
объект.
planner = manipulatorRRT(robot,{});
Задайте целевую область
Создайте область цели рабочей области с помощью имени корпуса исполнительного элемента конца робота.
Задайте целевые параметры области для своей рабочей области. Целевая область включает ссылочное положение, XYZ-позиционные границы и пределы ориентации на Углах Эйлера ZYX. Этот пример задает границы на XY-плоскости в метрах и позволяет вращение вокруг оси Z в радианах.
goalRegion = workspaceGoalRegion(robot.BodyNames{end}); goalRegion.ReferencePose = trvec2tform([0.5 0.5 0.2]); goalRegion.Bounds(1, :) = [-0.2 0.2]; % X Bounds goalRegion.Bounds(2, :) = [-0.2 0.2]; % Y Bounds goalRegion.Bounds(4, :) = [-pi/2 pi/2]; % Rotation about the Z-axis
Можно также применить фиксированное смещение ко всем положениям, произведенным в области. Это смещение может составлять схватывание инструментов или изменений размерностей в вашей рабочей области. В данном примере примените фиксированное преобразование, которое помещает исполнительный элемент конца на 5 см выше рабочей области.
goalRegion.EndEffectorOffsetPose = trvec2tform([0 0 0.05]);
hold on
show(goalRegion);
Запланируйте путь к целевой области
Запланируйте путь к целевой области от домашней настройки робота. Из-за случайности в алгоритме RRT, этот пример устанавливает rng
отберите, чтобы гарантировать повторяемые результаты.
rng(0) path = plan(planner,homeConfiguration(robot),goalRegion);
Покажите робота, выполняющего путь. Чтобы визуализировать более реалистический путь, интерполируйте точки между настройками пути.
interpConfigurations = interpolate(planner,path,5); for i = 1 : size(interpConfigurations) show(robot,interpConfigurations(i,:),"PreservePlot",false); set(ax,'ZLim',[-0.05 0.75],'YLim',[-0.05 1],'XLim',[-0.05 1],... 'CameraViewAngle',5) drawnow end hold off
Настройте положение исполнительного элемента конца
Заметьте, что манипулятор приближается к рабочей области от нижней части. Чтобы инвертировать ориентацию конечного положения, добавьте pi
вращение к Оси Y для ссылочного положения.
goalRegion.EndEffectorOffsetPose = ... goalRegion.EndEffectorOffsetPose*eul2tform([0 pi 0],"ZYX");
Повторно запланируйте путь и визуализируйте движение робота снова. Робот теперь приближается от верхней части.
hold on show(goalRegion); path = plan(planner,homeConfiguration(robot),goalRegion); interpConfigurations = interpolate(planner,path,5); for i = 1 : size(interpConfigurations) show(robot, interpConfigurations(i, :),"PreservePlot",false); set(ax,'ZLim',[-0.05 0.75],'YLim',[-0.05 1],'XLim',[-0.05 1]) drawnow; end hold off
rrt
— Манипулятор планировщик RRTmanipulatorRRT
объектМанипулятор планировщик RRT в виде manipulatorRRT
объект. Этот планировщик для определенной модели робота дерева твердого тела, сохраненной как rigidBodyTree
объект.
startConfig
— Начальная настройка роботаНачальная настройка робота в виде n - вектор элемента из объединенных положений для rigidBodyTree
объект сохранил в планировщике RRT rrt
. n является количеством нефиксированных соединений в модели робота.
Типы данных: double
goalConfig
— Желаемая настройка роботаЖелаемая настройка робота в виде n - вектор элемента из объединенных положений для rigidBodyTree
объект сохранил в планировщике RRT rrt
. n является количеством нефиксированных соединений в модели робота.
Типы данных: double
goalRegion
— Область цели рабочей областиworkspaceGoalRegion
объектОбласть цели рабочей области в виде workspaceGoalRegion
объект.
workspaceGoalRegion
объект задает границы на положении исполнительного элемента конца и sample
объектная функция возвращает случайные положения, чтобы добавить к дереву RRT. Установите свойство WorkspaceGoalRegionBias изменить вероятность выборки состояния в целевой области.
path
— Запланированный путь на объединенном пробелеЗапланированный путь на объединенном пробеле, возвращенном как r-by-n матрица объединенных настроек, где r является количеством настроек в пути и n, является количеством нефиксированных соединений в rigidBodyTree
модель робота.
Типы данных: double
solnInfo
— Информация о решении от планировщикаИнформация о решении от планировщика, возвращенного как структура с этими полями:
IsPathFound
— Логическое указание, если путь был найден
ExitFlag
— Целое число, указывающее, почему отключенный планировщик:
1 — Целевая настройка достигнута
2 — Максимальное количество итераций достигнуто
Типы данных: struct
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.