interactiveRigidBodyTree

Взаимодействуйте с моделями робота дерева твердого тела

Описание

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

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

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

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

Создание

Синтаксис

Описание

пример

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

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

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

Свойства

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

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

Можно установить это свойство, когда вы создаете объект. После того, как вы создадите объект, это свойство только для чтения.

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

Можно установить это свойство, когда вы создаете объект. После того, как вы создадите объект, это свойство только для чтения.

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

Пример: "r_foot"

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [1 4]

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

Видимость интерактивного маркера на рисунке в виде логического 1 TRUE) или 0 или (false). Установите ShowMarker к false скрыть интерактивный маркер на рисунке.

Типы данных: логический

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

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

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

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

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

Пример: [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");

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

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;

Сохраните текущую настройку робота в StoredConfigurations свойство.

addConfiguration(viztree)

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

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

viztree.MarkerBodyName = "r_hand";

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

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;

Сохраните текущую настройку.

addConfiguration(viztree)

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

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

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

Примените эти ограничения к интерактивному объекту дерева твердого тела как массив ячеек. Правая нога на получившемся рисунке меняет положение.

viztree.Constraints = {fixedWaist raiseRightLeg};                               

Заметьте изменение в положении правой ноги. Сохраните эту настройку также.

addConfiguration(viztree)

Воспроизведите настройки

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

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

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

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

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

robot = loadrobot('abbIrb120'); 

Визуализируйте робота и сохраните настройки

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

iRBT = interactiveRigidBodyTree(robot); 

В интерактивном режиме добавьте настройки

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

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

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

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

load("wayPts.mat");

Сгенерируйте сглаженную траекторию Используя Вейпойнтов

Используйте cubicpolytraj функция, чтобы сгенерировать сглаженную траекторию между waypoints. Задайте моменты времени, которые соответствуют каждому waypoint. Задайте временной вектор для генерации траектории. cubicpolyTraj функция генерирует настройку в течение каждого такта в timevector 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     

Ограничения

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

Советы

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

Введенный в R2020a