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

xacro 语法总结的更多相关文章

  1. ROS中URDF的学习以及与Xacro的比较

    1.urdf与Xacro简单比较 "URDF" 是最初也是比较简单的机器人描述文件,它的结构简单明了,容易理解.但是这也导致当机器人模型变得复杂时,urdf的结构描述就变得冗长,无 ...

  2. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  4. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  5. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  6. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  7. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  8. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  9. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

随机推荐

  1. 【C#】String| StringBuilder 字符

    原文链接:https://www.cnblogs.com/huameitang/p/10528646.html 字符串是用于表示文本的字符的有序集合. String对象是对象的有序集合 System. ...

  2. SQL Server 2005 - 让 SELECT 查詢結果额外增加递增序号

    /* 方法一*/SELECT 序號= (SELECT COUNT(客戶編號) FROM 客戶 AS LiMing                 WHERE LiMing.客戶編號<= Chan ...

  3. c++ stringstream 实现字符串与int之间的转换

    #include <iostream> #include <sstream> using namespace std; int main() { //string转int st ...

  4. 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...

  5. mapreduce—shuffle图解

  6. openpyxl模块的读写使用及mongodb概念

    今日内容概要 openpyxl模块 MongoDB数据库 今日内容详细 openpyxl模块 # 下载 pip3 install openpyxl # 使用 '''openpyxl内部读写也是分离的 ...

  7. numpy最后一部分及pandas初识

    今日内容概要 numpy剩余的知识点 pandas模块 今日内容详细 二元函数 加 add 减 sub 乘 mul 除 div 平方 power 数学统计方法 sum 求和 cumsum 累计求和 m ...

  8. [源码解析] TensorFlow 分布式环境(1) --- 总体架构

    [源码解析] TensorFlow 分布式环境(1) --- 总体架构 目录 [源码解析] TensorFlow 分布式环境(1) --- 总体架构 1. 总体架构 1.1 集群角度 1.1.1 概念 ...

  9. SourceTree代码变更和FoxMail邮件管理(效率小计俩)

    代码变更溯源 工作时,我们经常会想要查看一个类文件的变更历史,最常见的场景是:"卧槽,谁改了我的代码" 新版本的Xcode溯源自我感觉相当难用,所以这里我们介绍一个工具 Sourc ...

  10. 一篇文章扒掉“桥梁Handler”的底裤

    Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了.我这么说,大家不知道是否认同,如果认同,还希望能给一个关注哈. 什么是Handler? Han ...