URDF-праймер

Что такое URDF?

URDF, или Unified Robotics Description Формата - XML- спецификация, используемый в научных кругах и промышленности для моделирования систем мультитела, таких как руки роботов-манипуляторов для производства сборочных линий и аниматронных роботов для парков развлечений. URDF особенно популярен у пользователей ROS (Robotics Operating System) - среды, предлагающей стандартную поддержку моделей URDF. Можно импортировать модели URDF в Simscape™ Multibody™ окружения, для примера, для симуляции, анализа и системы управления задач. Смотрите Humanoid Robot рекомендуемый пример для простого примера использования.

Модель человекоподобного робота URDF

Что находится в файле 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>. The <visual> элемент имеет дочерние элементы <geometry> и <material>. И <material> элемент имеет дочерний элемент <color>. Такие цепи дочерних элементов необходимы для определения свойств и поведения родительских элементов.

<robot>
	<link>
		<inertial>
			...
		</inertial>
		<visual>
			<geometry>
				...
			</geometry>
			<material>
				<color />
			</material>
		</visual>
	</link>
	...
</robot>

В сложение с дочерними элементами XML-элементы в модели URDF могут иметь атрибуты. Для примера, <robot>, <link>, и <joint> все элементы имеют атрибут <name>- строка, которая служит для идентификации элемента. The <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> Элементы 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> элемент может иметь несколько родительских элементов в графике связности модели. Только корневая ссылка, которая находится в источнике связности, может иметь ряд родительских узлов, отличных от единицы (нуль). В модели разрешено использование только одной корневой ссылки.

Кинематическая замкнутая цепь

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

Требуется для <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. The <parent> и <child> элементы соединений определяют, как ссылки соединяются друг с другом: link A соединяется с link B и link B соединяется с link C. link A не имеет родительской ссылки - то есть появляется в <joint> элементы только как дочерний элемент - и поэтому является корневой ссылкой.

The <inertial> элемент link A задает массу и моменты инерции (ixx, iyy, izz) ссылки. Продукты инерции (ixy, ixz, и iyz) не заданы и имеют значения , равные нулю URDF. The visual элемент link A определяет тип геометрии и цвет материала для использования в визуализации модели. Геометрия в этом случае является коробкой с шириной и толщиной 0.5 м и высота 0.1 м. The <origin> элементы ссылки <inertial> и <visual> задайте преобразования из системы координат ссылки в инерционную и визуальную системы координат. Подобные элементы применяются к link B и link C.

The type атрибут <joint> элементы определяют соединения как непрерывные - тип шарнирного соединения без пределов движения. The <origin> элемент задает местоположение соединения относительно опорной системы координат родительского элемента link. Для примера, <origin> элемент joint A смещает соединение 0.05 m вдоль -Z ось относительно источника link A опорная система координат. The axis элемент, вложенный в каждую joint элемент определяет ось вращения соединения как вектор Декартова [0, 1, 0], или +Y.

Рисунок показывает компоненты модели - ссылки и соединения - и различные системы координат, которые они содержат. R обозначает опорную систему координат ссылки, I - инерционную систему координат ссылки и V - визуальную систему координат ссылки. J обозначает опорную систему координат соединений - по определению удерживаемую совпадающую с опорной системой дочерней ссылки. Инерционная и визуальная системы координат смещены к центрам ссылок, а системы координат соединений - к их нижним ребрам.

Компоненты модели двухмаятника

Получение моделей URDF для импорта

Вы можете, но обычно не должны, вручную создать свои собственные файлы URDF. Для более сложных моделей может быть предпочтительнее получить файлы URDF из других источников. Производители и консультанты робототехники часто предоставляют модели URDF для своих робототехнических систем. CAD-приложения, такие как SolidWorks® и PTC® Creo™ поддерживают экспортеры URDF, которые преобразуют блоки CAD в модели URDF. Примите во внимание эти опции при работе со сложными моделями робототехники, которые может быть не просто создать вручную.

См. также

Похожие темы