XML хорош тем, что позволяет описать почти всё, что угодно. В ROS он используется для описания роботов (URDF, SDF), и чем больше робот, тем больше текста содержит файл, который и создавать бывает не просто, а изменять параметры ещё сложнее. Xacro (XML Macros) является языком макрорасширений для работы с XML. Он позволяет определять как отдельные параметры, так и целые блоки, которые будут преобразованы в текст и вставлены в заданном месте. Если вы знакомы с макросами в C/C++, с Xmacro тоже легко разберётесь.
Самый простой способ использования Xacro - задание свойств, т.е. определение констант и переменных. Для этого нужно указать имя и значение свойства с помощью следующей конструкции
<xacro:property name="имя_параметра" value="значение_параметра" />
После этого в тексте XML файла вы можете обратиться к данному параметру, используя его имя:
${имя_параметра}
Xacro подставит на это место текстовое значение параметра. Поскольку это текст, вполне допустимо использовать его как часть строки, например, префикса: "${параметр}_окончание". В случае числовых переменных можно использовать арифметические выражения типа ${параметр1*параметр2+параметр3}, ${sin(параметр4)} и т.п. Начиная с версии ROS Jade для обработки выражений в фигурных скобках используется python, так что можно применять любые арифметические и булевы конструкции, синтаксически допустимые в данном языке. Логические выражения могут быть полезны в условных конструкциях типа
<xacro:if value="${ условие }">
< ...xml код... >
</xacro:if>
или
<xacro:unless value="${ условие }">
< ...xml код... >
</xacro:unless>
В макросы Xacro можно вставлять команды, используемые в rospack. Обратите внимание, что в этом случае скобки не фигурные, а круглые.
<тэг value="$ (find пакет)" />
<тэг value="$ (arg переменная)" />
Длинное описание в Xacro можно разбить на логические блоки и сохранить в отдельные файлы. Чтобы добавить такой файл, используется команда
<xacro:include filename="путь/файл.xacro" />
Наконец, в Xacro можно создавать большие фрагменты текста, содержимое которых зависит от задаваемых параметров (т.е. те самые макросы). Делается это с помощью конструкции
<xacro:macro name="имя_макроса" params="параметр1 параметр2">
< ...xml код, ключающий параметр1 и параметр2... >
</xacro:macro>
Вставить макрос в файл можно в следующем виде
<xacro:имя_макроса параметр1="значение1" параметр2="значение2" />
В качестве примера рассмотрим следующий игрушечный файл test.xacro, который, в сущности, не описывает ничего, а лишь показывает, как использовать данный макроязык.
Особенностью Xacro является необходимость указания параметра для xml:xacro. С помощью name можно также определить пространство имён. При объединении нескольких файлов это позволит избежать конфликтов между макросами.
Первая половина данного файла определяет свойство radius и макрос my_macro, а вторая описывает пример их использования. Сгенерировать, например, XML файл можно с помощью команды
rosrun xacro xacro test.xacro > test.xml
P.S. руководство, пример с URDF.
Комментариев нет:
Отправить комментарий