简介

xacro 提供了可编程接口,类似于计算机语言,包括变量声明调用、函数声明与调用等语法实现。在使用 xacro 生成 urdf 时,根标签robot中必须包含命名空间声明:xmlns:xacro="http://wiki.ros.org/xacro"

属性与算数运算

用于封装 URDF 中的一些字段,比如: PAI 值,小车的尺寸,轮子半径 ....

属性定义

<xacro:property name="xxxx" value="yyyy" />

属性调用

${属性名称}

算数运算

${数学表达式}

属性示例

urdf编写

<cylinder radius="0.1" length="0.08" />

xacro编写

<xacro:property name="base_link_length" value="0.08"/>
<xacro:property name="earth_space" value="0.015"/>
<cylinder radius="${base_link_radius}" length="${base_link_length}" />

类似于函数实现,提高代码复用率,优化代码结构,提高安全性

宏定义

<xacro:macro name="宏名称" params="参数列表(多参数之间使用空格分隔)">
    .....
    参数调用格式: ${参数名}
</xacro:macro>

宏调用

<xacro:宏名称 参数1=xxx 参数2=xxx/>

宏示例

urdf编写

<parent link="base_link" />
<child link="left_wheel" />

xacro编写

<xacro:macro name="add_wheels" params="name flag">
         .....
        <parent link="base_link" />
        <child link="${name}_wheel" />
        .....
</xacro:macro>
    <xacro:add_wheels name="left" flag="1" />
    <xacro:add_wheels name="right" flag="-1" />

文件包含

机器人由多部件组成,不同部件可能封装为单独的 xacro 文件,最后再将不同的文件集成,组合为完整机器人,可以使用文件包含实现

代码编写

<robot name="xxx" xmlns:xacro="http://wiki.ros.org/xacro">
      <xacro:include filename="my_base.xacro" />
      <xacro:include filename="my_camera.xacro" />
      <xacro:include filename="my_laser.xacro" />
      ....
</robot>
最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏