URDF или Объединенный Формат Описания Робототехники, является спецификацией XML, используемой в академической среде и промышленности для моделирования систем мультител, такого как руки роботов-манипуляторов для производства сборочных конвейеров и аниматронных роботов для парков развлечений. URDF особенно популярен у пользователей ROS (Robotics Operating System) — среда, которая предлагает стандартную поддержку моделей URDF. Можно импортировать модели URDF в среду Simscape™ Multibody™, например, для симуляции, анализа и задач системы управления. Смотрите, что Гуманоидный Робот показал пример для простого варианта использования.
Гуманоидный робот модель URDF
Как другие типы XML-файлов, файлы URDF включают различные элементы XML, такие как <robot>
, <link>
, <joint>
, вложенный в иерархических структурах, известных как деревья XML. Например, <link>
и <joint>
элементами, как говорят, являются дочерние элементы <robot>
элемент и, взаимно, <robot>
элемент родительский элемент <link>
и <joint>
элементы.
<robot> <link> ... </link> <link> ... </link> <joint> ... </joint> </robot>
Дочерние элементы, такие как <link>
и <joint>
под <robot>
, может в свою очередь иметь дочерние собственные элементы. Например, <link>
элемент имеет дочерние элементы <inertial>
и <visual>
. <visual>
элемент имеет дочерние элементы <geometry>
и <material>
. И <material>
элемент имеет дочерний элемент <color>
. Такие цепи дочерних элементов важны, чтобы задать свойства и поведение родительских элементов.
<robot> <link> <inertial> ... </inertial> <visual> <geometry> ... </geometry> <material> <color /> </material> </visual> </link> ... </robot>
В дополнение к дочерним элементам элементы XML в модели URDF могут иметь атрибуты. Например, <robot>
, <link>
, и <joint>
элементы у всех есть атрибут <name>
— строка, которая служит, чтобы идентифицировать элемент. <color>
элемент имеет атрибут rgba
— числовой массив с красным, зеленым, синим цветом, и альфа (или непрозрачность) значения цвета ссылки. Приписывает, такие как они, помогают полностью задать элементы в модели.
<robot name = "linkage"> <link name = "root link"> <inertial> ... </inertial> <visual> <geometry> ... </geometry> <material> <color rgba = "1 0 0 1" /> </material> </visual> </link> ... </robot>
URDF соединяет подключение через соединения в иерархических структурах, мало чем отличающихся от сформированных вложенными элементами XML в файле URDF. <joint>
элементы осуществляют эти иерархии через <parent>
и <child>
элементы, которые идентифицируют одну ссылку как родительский элемент и другой как дочерний элемент. Родительские ссылки могут самостоятельно быть дочерними элементами — и дочерними родительскими элементами ссылок — других ссылок в модели.
<parent>
и <child>
Элементы joint
<robot name = "linkage"> <joint name = "joint A ... > <parent link = "link A" /> <child link = "link B" /> </joint> <joint name = "joint B ... > <parent link = "link A" /> <child link = "link C" /> </joint> <joint name = "joint C ... > <parent link = "link C" /> <child link = "link D" /> </joint> </robot>
Можно визуализировать связи между ссылками с помощью схематического, известного как connectivity graph. Рисунок показывает пример. Круги обозначают ссылки, и стрелы обозначают соединения. Корни стрелы идентифицируют родительские узлы и наконечники стрел дочерние узлы. График возможности соединения показывает топологию базовой модели — здесь простая древовидная кинематическая структура с двумя ветвями.
График возможности соединения древовидной кинематической структуры
Топология модели важна в URDF. График возможности соединения модели может принять форму только древовидной кинематической структуры — кинематическая цепь, перешел или без ветвей, который всегда открыт. Кинематические замкнутые цепи, каждый закрытая цепь, сформированная путем присоединения концов в противном случае открытой цепи, запрещены. Это ограничение влияет как <link>
элементы могут соединиться в модели URDF.
Ограничение переводит в следующее правило: никакой <link>
элемент может служить дочерним узлом больше чем в одном <joint>
элемент. Другими словами, никакой <link>
элемент может иметь больше чем один родительский элемент в графике возможности соединения модели. Только корневая ссылка, в начале координат графика возможности соединения, может иметь много родительских узлов, отличающихся от одного (нуль). Только одна корневая ссылка позволена в модели.
Кинематическая замкнутая цепь пример URDF
<robot name = "linkage"> <joint name = "joint A ... > <parent link = "link A" /> <child link = "link B" /> </joint> <joint name = "joint B ... > <parent link = "link A" /> <child link = "link C" /> </joint> <joint name = "joint C ... > <parent link = "link C" /> <child link = "link D" /> </joint> <joint name = "joint D ... > <parent link = "link B" /> <child link = "link D" /> </joint> </robot>
Код объявляет ссылку, link D
, как дочерний узел в двух <joint>
элементы, joint C
и joint D
. link D
элемент имеет два родительских элемента и формирует кинематическую замкнутую цепь. Модель нарушает правила связи URDF и недопустима. Рисунок показывает график возможности соединения модели.
График возможности соединения кинематической замкнутой цепи
Не все элементы и атрибуты, перечисленные в спецификации URDF, требуются. Некоторые, как <inertial>
под <link>
, являются дополнительными. Следующий код показывает различные элементы и атрибуты, что можно использовать с теми, которые являются дополнительным цветным зеленым.
Элементы и атрибуты, показанные как требуется в дополнительных элементах, так, только если дополнительные элементы используются. Значения по умолчанию дополнительных атрибутов показывают в круглых скобках и в курсивном шрифте. Обратите внимание на то, что этот код включен только как ссылка и что он не представляет допустимую модель URDF. Эллипсы (“...”) недопустимы в моделях URDF и используются просто, чтобы повредить длинные линии кода для простоты просмотра.
<robot name> <link name> <inertial> <origin xyz("0 0 0") rpy("0 0 0") /> <mass value /> <inertia ixx iyy izz ixy ixz iyz /> </inertial> <visual name> <origin xyz("0 0 0") rpy("0 0 0") /> <geometry> <box size /> <cylinder radius length /> <sphere radius /> <mesh filename scale("1") /> </geometry> <material name> <color rgba("0.5 0.5 0.5 1") /> <texture filename /> </material> </visual> <collision name> <origin xyz("0 0 0") rpy("0 0 0") /> <geometry> <box size /> <cylinder radius length /> <sphere radius /> <mesh filename scale("1") /> </geometry> </collision> </link> <joint name type> <origin xyz("0 0 0") rpy("0 0 0") /> <parent link /> <child link /> <axis xyz("1 0 0") /> <calibration rising /> <calibration falling /> <dynamics damping("0") friction("0") /> <limit† lower† upper† effort velocity /> <mimic joint multiplier("1") offset("0") /> <safety_controller soft_lower_limit("0") ... ... soft_upper_limit("0") k_position("0") k_velocity("0") /> </joint> </robot>
†Требуемый для <joint>
элементы type
prismatic
и revolute
только.
Как пример, создайте модель URDF двойного маятника. В вашем предпочтительном текстовом редакторе создайте файл с кодом, показанным ниже, и сохраните файл как double_pendulum.urdf
в удобной папке. Включайте расширение файла в имя файла. Отдельный пример показывает, как импортировать эту модель в среду Simscape Multibody (см. Импорт Простая Модель URDF).
<robot name = "linkage"> <!-- links section -->> <link name = "link A"> <inertial> <origin xyz = "0 0 0" /> <mass value = "0.5" /> <inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" /> </inertial> <visual> <origin xyz = "0 0 0" /> <geometry> <box size = "0.5 0.5 0.1" /> </geometry> <material name = "gray A"> <color rgba = "0.1 0.1 0.1 1" /> </material> </visual> </link> <link name = "link B"> <inertial> <origin xyz = "0 0 -0.5" /> <mass value = "0.5" /> <inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" /> </inertial> <visual> <origin xyz = "0 0 -0.5" /> <geometry> <cylinder radius = "0.05" length = "1" /> </geometry> <material name = "gray B"> <color rgba = "0.3 0.3 0.3 1" /> </material> </visual> </link> <link name = "link C"> <inertial> <origin xyz = "0 0 -0.5" /> <mass value = "0.5" /> <inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" /> </inertial> <visual> <origin xyz = "0 0 -0.5" /> <geometry> <cylinder radius = "0.05" length = "1" /> </geometry> <material name = "gray C"> <color rgba = "0.5 0.5 0.5 1" /> </material> </visual> </link> <!-- joints section -->> <joint name = "joint A" type = "continuous"> <parent link = "link A" /> <child link = "link B" /> <origin xyz = "0 0 -0.05" /> <axis xyz = "0 1 0" /> </joint> <joint name = "joint B" type = "continuous"> <parent link = "link B" /> <child link = "link C" /> <origin xyz = "0 0 -1" /> <axis xyz = "0 1 0" /> <dynamics damping ="0.002" /> </joint> </robot>
Код задает модель мультитела под названием linkage
. Модель содержит три ссылки, названные link A
, link B
и link C
, то подключение через два соединения, названные joint A
и joint B
. <parent>
и <child>
элементы соединений идентифицируют, как ссылки соединяются друг с другом: link A
подключения к link B
и link B
подключения к link C
. link A
не имеет никакой родительской ссылки — то есть, это появляется в <joint>
элементами как дочерний элемент только — и является поэтому корневая ссылка.
<inertial>
элемент link A
задает массу и моменты инерции (ixx
, iyy
, izz
) из ссылки. Продукты инерции (ixy
, ixz
, и iyz
) не заданы и имеют значение, равное нулю URDF. visual
элемент link A
задает тип геометрии и существенный цвет для использования в визуализации модели. Геометрия в этом случае является полем с шириной и толщиной 0.5
m и высота 0.1
m. <origin>
элементы ссылки <inertial>
и <visual>
задайте преобразования от системы координат ссылки до инерционных и визуальных систем координат. Подобные элементы применяются к link B
и link C
.
type
атрибут <joint>
элементы задают соединения как непрерывные — тип шарнирного соединения без пределов движения. <origin>
элемент задает местоположение соединения относительно системы координат элемента родительской ссылки. Например, <origin>
элемент joint A
возмещает объединенный 0.05
m вдоль -Z
ось относительно источника link A
система координат. axis
элемент вкладывается в каждом joint
элемент задает вращательную ось соединения как Декартов векторный [0, 1, 0]
, или +Y
.
Рисунок показывает компоненты модели — ссылки и соединения — и различных систем координат, которые они содержат. R обозначает систему координат ссылки, я ссылка инерционная система координат, и V ссылка визуальная система координат. J обозначает объединенную систему координат — по определению сохраненный совпадающим системой координат дочерней ссылки. Инерционные и визуальные системы координат возмещены к центрам ссылок и объединенных систем координат к их более низким ребрам.
Компоненты модели двойного маятника
Вы можете, но обычно не имеете к, вручную создаете свои собственные файлы URDF. Для более сложных моделей может быть предпочтительно получить файлы URDF из других источников. Производители робототехники и консультанты часто предоставляют модели URDF для своих автоматизированных систем. Приложения CAD, такие как SolidWorks® и PTC® Creo™ поддерживают средства экспорта URDF, которые преобразуют ваши блоки CAD в модели URDF. Рассмотрите эти возможности при работе с комплексными моделями робототехники, которые не могут быть просты создать вручную.