xacro是为了解决在编写urdf文件过程中,出现的标签内容重复,但又不得不去写。一些值的计算有依赖的问题。为了和urdf文件区分,我们定义的模型文件名后缀为.xacro

从功能的角度来说,xacro提供了属性定义,数学运算,条件判断和宏定义等功能。

注意:必须在robot标签中加入xmlns:xacro="http://www.ros.org/wiki/xacro"属性!!

该文件中注释不能用中文!!!

http://wiki.ros.org/xacro

属性

属性的定义使用<xacro:property>标签完成,使用的时候用${属性名称}来调用该参数。

例如:

<!-- define -->
<xacro:property name="the_radius" value="2.1" />
<xacro:property name="the_length" value="4.5" /> <!-- use -->
<geometry type="cylinder" radius="${the_radius}" length="${the_length}" />

数学运算

在变量的大括号中可以使用基本的数学运算,可以使用Python数学模块中的函数和常量

包括,但不限于以下:

  1. pi:π
  2. sin:正弦函数
  3. cos:余弦函数
  4. tan:正切函数
  5. radians:角度值转弧度制

例如:

<xacro:property name="R" value="2" />
<xacro:property name="alpha" value="${30/180*pi}" />
<circle circumference="${2 * pi * R}" pos="${sin(alpha)} ${cos(alpha)}" />
<limit lower="${radians(-90)}" upper="${radians(90)}" effort="0" velocity="${radians(75)}" />

条件判断

语法:

<xacro:if value="<expression>">
<... some xml code here ...>
</xacro:if>
<xacro:unless value="<expression>">
<... some xml code here ...>
</xacro:unless>

表达式中的结果必须是0、1、true或false,否则将会出现错误。

<expression>中任何结果为布尔值的Python表达式都是可以的。

例子:

<xacro:property name="var" value="useit"/>
<xacro:if value="${var == 'useit'}"/>
<xacro:if value="${var.startswith('use') and var.endswith('it')}"/> <xacro:property name="allowed" value="${[1,2,3]}"/>
<xacro:if value="${1 in allowed}"/>

宏定义

宏定义使用xacro:macro来定义一个宏,参数用空格分割,参数可以用:=来添加默认值

语法:

<!-- define -->
<xacro:macro name="<name>" params="<params>">
<... some xml code here ...>
</xacro:macro>
<!-- use -->
<xacro:<name> <params>="" />

例子:

<xacro:macro name="ak_axis_x">
<axis xyz="1 0 0"/>
</xacro:macro> <xacro:macro name="ak_link" params="name type:=box">
<link name="${name}">
<visual>
<geometry>
<xacro:if value="${type == 'box'}">
<box size="1 2 3"/>
</xacro:if> <xacro:if value="${type == 'cylinder'}">
<cylinder length="1" radius="0.5"/>
</xacro:if> <xacro:if value="${type == 'sphere'}">
<sphere radius="1"/>
</xacro:if> </geometry>
</visual>
</link> </xacro:macro> <xacro:ak_axis_x />
<xacro:ak_link name="my_box" />
<xacro:ak_link name="my_cylinder" type="cylinder"/>

总结

标签 解释 属性
<xacro:property> 属性 namevalue
<xacro:if> 如果 value
<xacro:unless> 如果不 value
<xacro:macro> 宏定义 nameparams
  1. 数学运算的时候可以使用Python中Math里面的函数
  2. if判断的时候可以使用Python中所有能得到bool值的判断,比如in

转自:https://www.askeynil.com/2019/3f08735f.html

最新文章

  1. vs2010/2013项目的C++所在文件夹越来越大如何解决?
  2. STL的erase()陷阱-迭代器失效总结
  3. yii框架中保存第三方登录信息
  4. android 的生命周期自我理解
  5. 【HTML5 3】《html5 开发精要与实例讲解》 step2 -- 结构元素 (待续)
  6. Java_字符类(Character、String、StringBuffer)_char是基本数据类型,Character是其包装类型。
  7. C# - CSV file reader
  8. 记录-新建一个web应用的过程与曲折
  9. Spark性能调优之合理设置并行度
  10. python3爬虫之入门和正则表达式
  11. Linux中的端口占用问题
  12. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
  13. 【转载】Hadoop官方文档翻译——HDFS Architecture 2.7.3
  14. for each in for in 与for of
  15. Beta阶段敏捷冲刺二
  16. 简单了解一下php的迭代生成器yield
  17. 黄聪:微信小程序(应用号)资源汇总整理(转)
  18. ThinkPhp框架开发微信支付——刷卡支付
  19. Flexbox的布局
  20. SQLSERVER中KeyHashValue的作用(下)

热门文章

  1. (二) operator、explicit与implicit 操作符重载
  2. StringBuilder与String互转
  3. 查看oracle归档日志路径
  4. C# Winform中FpSpread表格控件设置固定的(冻结的)行或列
  5. Linux CentOS 7.X-关机、重启命令
  6. BUG | ValueError: Shape mismatch: The shape of labels (received (320,)) should equal the shape of logits except for the last dimension (received (64, 5)).
  7. SQL从零到迅速精通【表连接查询】
  8. 借助DBHelper实现学生管理案例分析
  9. tp5 git 常见命令
  10. JavaScript面向对象—深入ES6的class