exponenta event banner

показать

Показать модель робота на рисунке

Описание

пример

show(robot) отображает рамки тела модели робота на рисунке с предварительно заданной домашней конфигурацией. Оба Frames и Visuals отображаются автоматически.

show(robot,configuration) использует положения соединения, указанные в configuration чтобы показать кадры тела робота.

show(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой комбинации входных аргументов из предыдущих синтаксисов. Например, 'Frames','off' скрывает жесткие каркасы корпуса на рисунке.

ax = show(___) возвращает маркер перемещения осей, на котором выведен робот.

Примеры

свернуть все

Вы можете импортировать роботов, которые .stl файлы, связанные с файлом унифицированного формата описания робота (URDF) для описания визуальной геометрии робота. Для каждого жесткого тела задана отдельная визуальная геометрия. importrobot функция анализирует файл URDF, чтобы получить модель робота и визуальную геометрию. Функция предполагает, что визуальная геометрия и геометрия столкновения робота одинаковы и назначает визуальные геометрии как геометрии столкновения соответствующих тел.

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

Импорт модели робота в виде файла URDF. .stl в этом URDF должны быть правильно указаны расположения файлов. Добавление других .stl файлы для отдельных жестких тел, см. addVisual.

robot = importrobot('iiwa14.urdf');

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

show(robot,'visuals','on','collision','off');

Figure contains an axes. The axes contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

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

show(robot,'visuals','off','collision','on'); 

Figure contains an axes. The axes contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_6_coll_mesh, iiwa_link_7_coll_mesh.

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

Загрузить пример роботов как RigidBodyTree объекты.

load exampleRobots.mat

Создайте структуру для домашней конфигурации робота Puma. Структура имеет совместные наименования и позиции для каждого тела на модели робота.

config = homeConfiguration(puma1)
config=1×6 struct array with fields:
    JointName
    JointPosition

Показать домашнюю конфигурацию с помощью show. Нет необходимости указывать входные данные конфигурации.

show(puma1);

Измените конфигурацию и установите второе положение соединения в pi/2. Отображение результирующего изменения в конфигурации робота.

config(2).JointPosition = pi/2;
show(puma1,config);

Создайте случайные конфигурации и покажите их.

show(puma1,randomConfiguration(puma1));

Для создания робота используйте параметры Denavit-Hartenberg (DH) робота Puma560 ®. Каждое жесткое тело добавляется по одному, а преобразование «потомок-родитель» задается объектом соединения.

Параметры DH определяют геометрию робота в зависимости от того, как каждое жесткое тело прикреплено к его родительскому элементу. Для удобства настройте параметры Puma560 робота в матрице [1]. Робот Puma - последовательный цепной манипулятор. Параметры DH соответствуют предыдущей строке в матрице, соответствующей предыдущему присоединению соединения .

dhparams = [0   	pi/2	0   	0;
            0.4318	0       0       0
            0.0203	-pi/2	0.15005	0;
            0   	pi/2	0.4318	0;
            0       -pi/2	0   	0;
            0       0       0       0];

Создайте объект дерева жесткого тела для построения робота.

robot = rigidBodyTree;

Создайте первое жесткое тело и добавьте его к роботу. Для добавления жесткого тела:

  1. Создать rigidBody и присвойте ему уникальное имя.

  2. Создать rigidBodyJoint и присвойте ему уникальное имя.

  3. Использовать setFixedTransform задание преобразования тело-тело с использованием параметров DH. Последний элемент параметров DH, theta, игнорируется, поскольку угол зависит от положения соединения.

  4. Звонить addBody прикрепляют первое соединение корпуса к базовой раме робота.

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

Создайте и добавьте к роботу другие жесткие тела. Укажите предыдущее имя тела при вызове addBody чтобы прикрепить его. Каждое фиксированное преобразование относится к предыдущему координатному кадру соединения.

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

Убедитесь, что робот был правильно построен с помощью showdetails или show функция. showdetails перечисляет все тела в окне команд MATLAB ® .show отображает робота с заданной конфигурацией (по умолчанию домашняя). Звонки в axis изменить пределы оси и скрыть метки оси.

showdetails(robot)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1        body1         jnt1     revolute             base(0)   body2(2)  
   2        body2         jnt2     revolute            body1(1)   body3(3)  
   3        body3         jnt3     revolute            body2(2)   body4(4)  
   4        body4         jnt4     revolute            body3(3)   body5(5)  
   5        body5         jnt5     revolute            body4(4)   body6(6)  
   6        body6         jnt6     revolute            body5(5)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

Ссылки

[1] Корк, П. И. и Б. Армстронг-Хелуври. «Поиск консенсуса между параметрами модели, сообщенными для робота PUMA 560». Материалы Международной конференции IEEE по робототехнике и автоматизации 1994 года, IEEE Comput. Soc. Press, 1994, стр. 1608-13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

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

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

Загрузка предварительно настроенной модели робота в рабочее пространство с помощью loadrobot функция. Эта модель уже имеет сети столкновений, указанные для каждого тела. Выполните итерацию через все элементы жесткого тела и очистите существующие сети столкновения. Убедитесь, что существующие сетки исчезли.

robot = loadrobot('kukaIiwa7','DataFormat','column');

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,'Collisions','on','Visuals','off');

Добавить цилиндры столкновений

Итеративно добавьте цилиндр столкновения к каждому кузову. Пропустить некоторые тела для этой конкретной модели, так как они перекрываются и всегда сталкиваются с концевым эффектором (тело 10).

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,'Collisions','on','Visuals','off');

Проверка наличия коллизий

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

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config);
    if isColliding
        show(robot,config,'Collisions','on','Visuals','off');
        title('Collision Detected')
    else
        % Skip non-collisions.
    end
end

Входные аргументы

свернуть все

Модель робота, заданная как rigidBodyTree объект.

Конфигурация робота, заданная как вектор позиций соединения или структура с именами соединений и позициями для всех тел в модели робота. Создать конфигурацию можно с помощью homeConfiguration(robot), randomConfiguration(robot)или путем указания собственных позиций соединения в структуре. Использование векторной формы configuration, установите DataFormat для свойства robot к также "row" или "column" .

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Frames','off' скрывает жесткие каркасы корпуса на рисунке.

Родительский элемент осей, указанный как разделенная запятыми пара, состоящая из 'Parent' и Axes объект, в котором нарисовать робота. По умолчанию робот печатается в активных осях.

Опция сохранения графика робота, заданная как разделенная запятыми пара, состоящая из 'PreservePlot' и логический 1 (true) или 0 (false). При указании этого аргумента как true, функция не перезаписывает предыдущие графики, отображаемые вызовом show. Эта настройка функционирует аналогично hold on для стандартного рисунка MATLAB ®, но ограничивается рамками корпуса робота. При указании этого аргумента какfalseфункция перезаписывает предыдущие графики робота.

Примечание

Когда 'PreservePlot' значение равно true, 'FastUpdate' значение должно быть false.

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

Отображение основных кадров, указанных как разделенная запятыми пара, состоящая из 'Frames' и 'on' или 'off'. Эти рамки являются координатными рамками отдельных тел в дереве жестких тел.

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

Отображение визуальной геометрии, указанной как разделенная запятыми пара, состоящая из 'Visuals' и 'on' или 'off'. Отдельные визуальные геометрии также можно отключить, щелкнув их правой кнопкой мыши на рисунке.

Задание отдельных визуальных геометрий с помощью addVisual. Импорт модели робота URDF с помощью .stl для получения информации о сетках см. importrobot функция.

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

Отображение геометрии коллизий, заданной как разделенная запятыми пара, состоящая из 'Collisions' и 'on' или 'off'.

Добавление геометрии столкновений к отдельным жестким телам в модели робота с помощью addCollision функция. Импорт модели робота URDF с помощью .stl для получения информации о сетках см. importrobot функция.

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

Положение робота, указанное как разделенная запятыми пара, состоящая из 'Position' и четырехэлементный вектор вида [x y z yaw]. Элементы x, y и z задают положение в метрах, а угол рыскания в радианах.

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

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

Примечание

Когда 'FastUpdate' значение равно true, 'PreservePlot' значение должно быть false.

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

Выходные аргументы

свернуть все

Графический дескриптор осей, возвращаемый как Axes объект. Этот объект содержит свойства фигуры, на которую выведен робот.

Совет

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

  • Рамки тела: отдельные рамки тела отображаются как 3-осевая координатная рамка. Фиксированные кадры являются розовыми кадрами. Типы подвижных соединений отображаются в виде осей RGB. Можно щелкнуть рамку тела, чтобы увидеть ось движения. Призматические соединения показывают желтую стрелку в направлении оси движения, а соединения вращения - круговую стрелку вокруг оси вращения.

  • Визуальные сетки: отдельные визуальные геометрии задаются с помощью addVisual или с помощью importrobot импорт модели робота с помощью .stl указаны файлы. Щелкнув правой кнопкой мыши отдельные тела на рисунке, можно отключить их сетки или указать Visuals пара имя-значение, чтобы скрыть все визуальные геометрии.

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