exponenta event banner

manipulatorRRT

Планирование движения для дерева жесткого тела с использованием двунаправленного RRT

Описание

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

Двунаправленный планировщик RRT создает два дерева с корневыми узлами в указанных конфигурациях начала и цели. Для расширения каждого дерева планировщик создает случайную конфигурацию и, если она допустима, делает шаг от ближайшего узла на основе свойства MaxConniceDistance. После каждого внутреннего абонента плановик пытается соединить два дерева с помощью нового внутреннего абонента и ближайшего узла на противоположном дереве. Недопустимые конфигурации или подключения, которые сталкиваются с средой, не добавляются в дерево.

В случае поиска с использованием greedier включение свойства EnableStartHeuristic отключает ограничение для MaxConnectionDistance свойство при соединении между двумя деревьями.

Image showing the extension of the two branching trees from start and end goal. When the EnableConnectHeurist is true, the connection steps are not limited by the max connection distance.

Установка EnableConnectHueristic свойство для false ограничивает протяженность при соединении между двумя деревьями значением MaxConnectionDistance собственность.

Image showing the extension of the two branching trees from start and end goal. When the EnableConnectHeurist is false, the connection steps are limited by the max connection distance.

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

Чтобы спланировать путь между конфигурацией начала и цели, используйте plan объектная функция. После планирования можно выполнить интерполяцию состояний вдоль траектории с помощью interpolate объектная функция. Чтобы попытаться укоротить контур путем обрезки кромок, используйте команду shorten объектная функция.

Чтобы указать область для выборки концевых эффекторных позиций рядом с конфигурацией цели, создайте workspaceGoalRegion и укажите его как goalRegion входные данные для plan объектная функция. Чтобы изменить вероятность выборки дополнительных конфигураций целей, укажите свойство рабочей области GoalRegionBias.

Дополнительные сведения о сложности вычислений см. в разделе Сложность планирования.

Создание

Описание

пример

rrt = manipulatorRRT(robotRBT,{}) создает двунаправленный планировщик RRT для указанного rigidBodyTree модель робота. Пустой массив ячеек указывает на отсутствие препятствий в среде.

rrt = manipulatorRRT(robotRBT,collisionObjects) создает планировщик для модели робота с объектами столкновения, размещенными в среде. Плановик проверяет наличие конфликтов с этими объектами.

Свойства

развернуть все

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

Если EnableConnectheuristic свойство имеет значение trueобъект игнорирует это расстояние при соединении двух деревьев во время этапа соединения.

Типы данных: double

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

Типы данных: double

Максимальное количество сгенерированных случайных конфигураций, указанное как положительное целое число.

Типы данных: double

Непосредственно присоединять деревья во время фазы соединения плановика, указанной как логическая 1 (true) или 0 (false). Установка для этого свойства значения true приводит к игнорированию объектом MaxConnectionDistance свойство при попытке соединения двух деревьев.

Типы данных: logical

Вероятность выборки состояния цели из области цели рабочей области, заданной как положительное значение в диапазоне [0,1). Смещение определяет вероятность добавления дополнительных состояний цели в дерево из workspaceGoalRegion объект. Если это значение равно нулю, workspaceGoalRegion объект по-прежнему является образцом одной цели для плановика.

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

Зависимость

Необходимо использовать goalRegion при вызове plan объектная функция.

Типы данных: double

Функции объекта

planПланирование пути с использованием RRT для манипуляторов
interpolateИнтерполяция состояний по пути от RRT
shortenОбрезка кромок для укорочения траектории от RRT

Примеры

свернуть все

Используйте manipulatorRRT объект для планирования траектории для модели робота дерева жесткого тела в среде с препятствиями. Визуализация запланированного пути с интерполированными состояниями.

Загрузка модели робота в рабочее пространство. Используйте манипулятор KUKA LBR 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-положения и ориентации Euler ZYX концевого эффектора робота. manipulatorRRT объект планирует путь на основе этой области цели и выполняет выборку случайных поз в пределах границ.

Загрузка существующей модели робота в качестве rigidBodyTree объект.

robot = loadrobot("kinovaGen3", "DataFormat", "row");
ax = show(robot);

Figure contains an axes. The axes contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

Создание планировщика путей

Создайте быстро исследуемый планировщик пути случайного дерева (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);

Figure contains an axes. The axes contains 35 objects of type line, patch. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

План Путь к Цели Регион

Запланируйте путь к области цели из домашней конфигурации робота. Из-за случайности в алгоритме 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

Figure contains an axes. The axes contains 35 objects of type line, patch. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

Настройка положения концевого эффектора

Обратите внимание, что рука робота подходит к рабочему пространству снизу. Чтобы развернуть ориентацию конечного положения, добавьте 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

Figure contains an axes. The axes contains 45 objects of type line, patch. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

Совет

Сложность планирования

  • При планировании движения между узлами в дереве генерируется и проверяется набор конфигураций. Это время вычисления плановика пропорционально количеству сгенерированных конфигураций. Количество конфигураций между узлами определяется соотношением свойств MaxConniceDistance и ValidationDistance. Чтобы увеличить время планирования, рассмотрите возможность увеличения расстояния проверки или уменьшения максимального расстояния соединения.

  • Проверка каждой конфигурации имеет сложность O (mn + m2), где m - количество тел столкновения в rigidBodyTree object и n - количество объектов-коллизий в worldObjects. Использование большого количества сетей для представления робота или среды увеличивает время проверки каждой конфигурации.

Бесконечные пределы соединения

  • Если ваш rigidBodyTree модель робота имеет пределы соединения, которые имеют бесконечный диапазон (например, поворотное соединение с пределами [-Inf Inf]), manipulatorRRT объект использует пределы [-1e10 1e10] для выполнения равномерной случайной выборки в пределах соединения.

Ссылки

[1] Куффнер, Дж. Дж., и С. М. ЛаВалле. «RRT-Connect: эффективный подход к планированию пути с одним запросом». В трудах 2000 ICRA. Конференция тысячелетия. Международная конференция IEEE по робототехнике и автоматизации. Материалы симпозиумов (Cat. № 00CH37065), 2:995–1001. Сан-Франциско, Калифорния, США: IEEE, 2000. https://doi:10.1109/ROBOT.2000.844730.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2020b