Краткая информация URDF

Что такое URDF?

URDF или Объединенный Формат Описания Робототехники, является спецификацией XML, используемой в академии и промышленности к образцовым системам мультитела, таким как автоматизированные руки манипулятора для производства сборочных конвейеров и аниматронных роботов для парков развлечений. URDF особенно популярен у пользователей ROS или Операционной системы Робототехники — среда, которая предлагает стандартную поддержку моделей URDF. Можно импортировать модели URDF в среду Simscape™ Multibody™, например, для симуляции, анализа и задач системы управления. Смотрите, что Гуманоидный Робот показал пример для простого варианта использования.

Гуманоидный робот модель URDF

Что находится в файле URDF?

Как другие типы XML-файлов, файлы URDF включают различные элементы XML, такие как <robot>, <link>, <joint>, вложенный в иерархических структурах, известных как деревья XML. Например, <link> и элементы <joint>, как говорят, являются дочерними элементами элемента <robot> и, взаимно, элемент <robot> родительский элемент элементов <joint> и <link>.

<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>

Иерархии XML и кинематические деревья

URDF соединяет подключение через соединения в иерархических структурах, мало чем отличающихся от сформированных вложенными элементами XML в файле URDF. элементы <joint> осуществляют эти иерархии через <parent> и элементы <child>, которые идентифицируют одну ссылку как родительский элемент и другой как дочерний элемент. Родительские ссылки могут самостоятельно быть дочерними элементами — и дочерними родительскими элементами ссылок — других ссылок в модели.

<parent> и элементы соединения <child>

<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

Не все элементы и атрибуты, перечисленные в спецификации 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>

†Required для элементов <joint> type prismatic и revolute только.

Создайте простую модель URDF

Как пример, создайте модель 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>

О модели URDF

Код задает модель мультитела под названием 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 из других источников. Производители робототехники и консультанты часто предоставляют модели URDF для своих автоматизированных систем. Приложения CAD, такие как SolidWorks® и PTC® Creo™ поддерживают средства экспорта URDF, которые преобразовывают ваши блоки CAD в модели URDF. Рассмотрите эти возможности при работе с комплексными моделями робототехники, которые не могут быть просты создать вручную.

Смотрите также

Похожие темы