exponenta event banner

interactiveRigidBodyTree

Взаимодействие с моделями роботов дерева жестких тел

Описание

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

Чтобы вычислить новые конфигурации с помощью обратной кинематики, щелкните и перетащите интерактивный маркер на рисунке. Маркер поддерживает перетаскивание центрального маркера, линейное движение вдоль определенных осей и поворот вокруг каждой оси. Можно изменить конечный эффектор, щелкнув правой кнопкой мыши другое тело и выбрав Задать тело как тело маркера.

Для сохранения текущей конфигурации модели робота используйте addConfiguration объектная функция. Свойство StoredConfiguration содержит сохраненные конфигурации.

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

Создание

Описание

пример

viztree = interactiveRigidBodyTree(robot) создает интерактивный объект дерева жесткого тела и связанную фигуру для указанной модели робота. robot аргумент задает RigidBodyTree собственность. Для взаимодействия с моделью щелкните и перетащите интерактивный маркер на рисунке.

viztree = interactiveRigidBodyTree(robot,'Frames','off') отключает оси каркаса, отображаемые для каждого соединения в модели робота.

viztree = interactiveRigidBodyTree(___,Name,Value) задает свойства, используя один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Заключите каждое имя свойства в кавычки. Например, 'RigidBodyTree',robot создает интерактивный объект дерева жесткого тела с указанной моделью робота.

Свойства

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

Модель робота дерева жесткого тела, заданная как rigidBodyTree объект. Модель робота определяет геометрию жестких тел и соединяющих их соединений. Для доступа к предоставленным моделям роботов используйте loadrobot функция. Чтобы импортировать модели из файлов URDF или модели Simscape™ Multibody™, используйте importrobot функция.

Это свойство можно задать при создании объекта. После создания объекта это свойство доступно только для чтения.

Решатель обратной кинематики, указанный как generalizedInverseKinematics Системный объект. По умолчанию решатель использует алгоритм Левенберга-Марквардта с максимальным числом итераций 2. Увеличение максимального числа итераций может уменьшить частоту кадров на рисунке.

Это свойство можно задать при создании объекта. После создания объекта это свойство доступно только для чтения.

Имя жесткого тела, связанного с интерактивным маркером, указанное как строковый скалярный или символьный вектор. По умолчанию для этого свойства задано тело с самым высоким индексом в RigidBodyTree собственность. Чтобы изменить это свойство с помощью фигуры, щелкните правой кнопкой мыши жесткое тело и выберите Задать тело как тело маркера (Set body as marker body).

Пример: "r_foot"

Типы данных: char | string

Это свойство доступно только для чтения.

Текущая поза интерактивного маркера, заданная как однородная матрица преобразования 4 на 4.

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

Это свойство доступно только для чтения.

Текущая поза жесткого тела, связанного с интерактивным маркером, заданная как однородная матрица преобразования 4 на 4.

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

Ограничения в решателе обратной кинематики, задаваемые как массив ячеек одного или нескольких объектов ограничений:

По умолчанию решатель обратной кинематики уважает только пределы соединения свойства BodyBodyTree. Чтобы добавить или удалить ограничения для модели робота, используйте addConstraint и removeConstraints функции объекта соответственно. Кроме того, свойству можно назначить новый массив ячеек объектов ограничения.

Пример: {constraintAiming("head","ReferenceBody","right_hand")}

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

Веса по ориентации и положению целевой позы, указанные соответственно как двухэлементный вектор, [orientation position].

Чтобы увеличить приоритет для соответствия требуемой ориентации или положению, увеличьте соответствующее значение веса.

Пример: [1 4]

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

Видимость интерактивного маркера на рисунке, заданная как логическая 1 (true) или 0 или ( false). Набор ShowMarker кому false скрытие интерактивного маркера на рисунке.

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

Тип элемента управления для интерактивного маркера, указанный как "InverseKinematics" или "JointControl". По умолчанию на рисунке вычисляются все конфигурации соединений робота с помощью обратной кинематики с конечным эффектором, установленным в значение свойства MarureBodyName. Для управления положением конкретного соединения на выбранном жестком теле задайте для этого свойства значение "JointControl".

Типы данных: char | string

Относительная шкала интерактивного маркера, заданная как положительное положительное вещественное число. Чтобы увеличить или уменьшить размер маркера на рисунке, настройте это свойство.

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

Текущая конфигурация модели робота дерева жесткого тела, заданная как вектор n-элемента. n - количество нефиксированных соединений в свойстве BodyTree.

Пример: [1 pi 0 0.5 3.156]'

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

Сохраненные конфигурации роботов, заданные как матрица n-by-p. Каждый столбец матрицы представляет собой сохраненную конфигурацию робота. n - количество нефиксированных соединений в RigidBodyTree собственность. p - количество сохраненных конфигураций роботов. Чтобы добавить или удалить сохраненные конфигурации, используйте addConfiguration или removeConfigurations функции объекта соответственно.

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

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

addConfigurationСохранить текущую конфигурацию
addConstraintДобавление ограничения обратной кинематики
removeConfigurationsУдалить конфигурации из StoredConfigurations собственность
removeConstraintsУдаление ограничений обратной кинематики
showFigureПоказать интерактивную фигуру дерева жесткого тела

Примеры

свернуть все

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

Загрузить модель робота

Используйте loadrobot функция доступа к предоставленным моделям роботов в качестве rigidBodyTree объекты.

robot = loadrobot("atlas");

Визуализация роботов и сохранение конфигураций

Создайте интерактивный объект дерева и связанную с ним фигуру, указав загруженную модель робота и ее левую руку в качестве конечного эффектора.

viztree = interactiveRigidBodyTree(robot,"MarkerBodyName","l_hand");

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Щелкните и перетащите интерактивный маркер, чтобы изменить конфигурацию робота. Можно щелкнуть и перетащить любую ось для линейного перемещения, повернуть тело вокруг оси с помощью красных, зеленых и синих окружностей и перетащить центр интерактивного маркера, чтобы разместить его в 3-D пространстве.

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

Программно установите текущую конфигурацию. Назначьте вектор длины, равный числу нефиксированных соединений в RigidBodyTree в Configuration собственность.

currConfig = homeConfiguration(viztree.RigidBodyTree);
currConfig(1:10) = [ 0.2201 -0.1319 0.2278 -0.3415 0.4996 ...
                     0.0747 0.0377 0.0718 -0.8117 -0.0427]';
viztree.Configuration = currConfig;

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Сохранить текущую конфигурацию робота в StoredConfigurations собственность.

addConfiguration(viztree)

Чтобы переключить конечный эффектор на другое жесткое тело, щелкните правой кнопкой мыши требуемое тело на рисунке и выберите Задать тело как тело маркера (Set body as marker body). Этот процесс используется для выбора правой рамки.

Можно также установить MarkerBodyName к определенному имени тела.

viztree.MarkerBodyName = "r_hand";

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Переместите правую руку в новое положение. Настройте конфигурацию программно. Маркер перемещается в новое положение концевого эффектора.

currConfig(1:18) = [-0.1350 -0.1498 -0.0167 -0.3415 0.4996 0.0747
                     0.0377 0.0718 -0.8117 -0.0427 0 0.4349 
                    -0.5738 0.0563 -0.0095 0.0518 0.8762 -0.0895]';
                
viztree.Configuration = currConfig;

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Сохраните текущую конфигурацию.

addConfiguration(viztree)

Добавить ограничения

По умолчанию модель робота учитывает только пределы соединения rigidBodyJoint объекты, связанные с RigidBodyTree собственность. Чтобы добавить ограничения, создайте объекты Robot Constraint и укажите их как массив ячеек в Constraints собственность. Список роботизированных зависимостей см. в разделе Обратная кинематика. Укажите цель позы для таза, чтобы сохранить ее в исходном положении. Укажите цель положения правой ноги, которая должна быть поднята спереди и выше ее текущего положения.

fixedWaist = constraintPoseTarget("pelvis");
raiseRightLeg = constraintPositionTarget("r_foot","TargetPosition",[1 0 0.5]);

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

viztree.Constraints = {fixedWaist raiseRightLeg};                               

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Обратите внимание на изменение положения правой опоры. Сохраните и эту конфигурацию.

addConfiguration(viztree)

Воспроизведение конфигураций

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

for i = 1:size(viztree.StoredConfigurations,2)
    viztree.Configuration = viztree.StoredConfigurations(:,i);
    pause(0.5)
end

Figure Interactive Visualization contains an axes. The axes contains 179 objects of type patch, line, surface. This object represents pelvis.

Используйте interactiveRigidBodyTree объект для визуализации модели робота и интерактивного создания ППМ и использования их для создания гладкой траектории с использованием cubicpolytraj. Дополнительные сведения см. в разделе interactiveRigidBodyTree объект и cubicpolytraj function.

Загрузить модель робота

Используйте loadrobot функция доступа к предоставленным моделям роботов в качестве rigidBodyTree объекты.

robot = loadrobot('abbIrb120'); 

Визуализация роботов и сохранение конфигураций

Создание интерактивного древовидного объекта с помощью interactiveRigidBodyTree функция. По умолчанию для интерактивного маркера задано тело с самым высоким индексом в RigidBodyTree собственность. Чтобы изменить это свойство с помощью фигуры, щелкните правой кнопкой мыши жесткое тело и выберите Задать тело как тело маркера (Set body as marker body). В качестве альтернативы, MarkerBodyName для свойства interactiveRigidBodyTree можно задать с помощью пар имя-значение.

iRBT = interactiveRigidBodyTree(robot); 

Figure Interactive Visualization contains an axes. The axes contains 34 objects of type patch, line, surface. This object represents base_link.

Интерактивное добавление конфигураций

Щелкните и перетащите интерактивный маркер, чтобы изменить конфигурацию робота. Можно щелкнуть и перетащить любую ось для линейного перемещения, повернуть тело вокруг оси с помощью красных, зеленых и синих окружностей и перетащить центр интерактивного маркера, чтобы разместить его в 3-D пространстве.

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

Когда робот находится в требуемой конфигурации, используйте addConfiguration объектная функция для добавления конфигурации к StoredConfiguration свойства объекта.

В этом примере 6 ППМ создаются с использованием интерактивного маркера и addConfiguration объектная функция. Они сохраняются в wayPoints.mat. Доступ к сохраненным конфигурациям можно получить с помощью iRBT.StoredConfigurations.

load("wayPts.mat");

Создание гладкой траектории с помощью ППМ

Используйте cubicpolytraj для создания плавной траектории между ППМ. Определите моменты времени, соответствующие каждому ППМ. Определите вектор времени для формирования траектории. cubicpolyTraj функция генерирует конфигурацию для каждого шага времени в векторе времени tvec.

iRBT.StoredConfigurations = wayPts ;          % Waypoints 
tpts = [0 2 4 6 8 10];                        % Time Points 
tvec = 0:0.1:10;                              % Time Vector 
[q,qd,qdd,pp] = cubicpolytraj(iRBT.StoredConfigurations,tpts,tvec); 

Визуализация движения робота на траектории

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

r = rateControl(10);
iRBT.ShowMarker = false;  % Hide the marker 


showFigure(iRBT)

for i = 1:size(q',1)
    iRBT.Configuration = q(:,i);
    waitfor(r);
end     

Figure Interactive Visualization contains an axes. The axes contains 24 objects of type patch, line. This object represents base_link.

Ограничения

  • Если interactiveRigidBodyTree объект удаляется, пока фигура все еще открыта, интерактивность фигуры отключена и заголовок фигуры обновляется.

Совет

  • Чтобы максимально повысить производительность при визуализации сложных моделей роботов со сложными сетками, включите аппаратно ускоренную OpenGL. По умолчанию MATLAB ® использует OpenGL с аппаратным ускорением, если его поддерживает графическое оборудование. Дополнительные сведения см. в разделеopengl функция.

Представлен в R2020a