xacro 语法总结
xacro
是为了解决在编写urdf
文件过程中,出现的标签内容重复,但又不得不去写。一些值的计算有依赖的问题。为了和urdf
文件区分,我们定义的模型文件名后缀为.xacro
。从功能的角度来说,
xacro
提供了属性定义,数学运算,条件判断和宏定义等功能。注意:必须在robot标签中加入
xmlns:xacro="http://www.ros.org/wiki/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数学模块中的函数和常量
包括,但不限于以下:
pi
:πsin
:正弦函数cos
:余弦函数tan
:正切函数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> |
属性 | name 、value |
<xacro:if> |
如果 | value |
<xacro:unless> |
如果不 | value |
<xacro:macro> |
宏定义 | name 、params |
- 数学运算的时候可以使用Python中Math里面的函数
- if判断的时候可以使用Python中所有能得到bool值的判断,比如
in
转自:https://www.askeynil.com/2019/3f08735f.html
xacro 语法总结的更多相关文章
- ROS中URDF的学习以及与Xacro的比较
1.urdf与Xacro简单比较 "URDF" 是最初也是比较简单的机器人描述文件,它的结构简单明了,容易理解.但是这也导致当机器人模型变得复杂时,urdf的结构描述就变得冗长,无 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- C#语法糖大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
随机推荐
- navicat12.0.24安装注意事项
关闭防火墙并断网,或者不要改变安装路径,或者换一个注册机 链接:https://pan.baidu.com/s/1AvEuD6TWGOCisSctF7pcbg 提取码:o4wp
- go 中 sort 如何排序,源码解读
sort 包源码解读 前言 如何使用 基本数据类型切片的排序 自定义 Less 排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源 ...
- Qt:QWebEngineView
0.说明 QWebEngineView提供一个用于展示和编辑网页内容的Widget,QWebEngineView本质是一个Widget. 一个Web View通过load( QUrl )方法加载一个U ...
- 2022java蓝桥杯算法训练
1.印章: 代码: 1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] arg ...
- php常见的危险函数
代码执行的危险函数 eval() 把字符串作为php代码执行 早期php一句话木马都用这个 <?php @eval($_POST['shell']);?> assert() 检查一个断言是 ...
- 13、mysql锁
mysql锁 事务的隔离性是通过锁来实现的.为保证数据的一致性,需要锁对并发事务操作进行控制.同时锁机制也为实现MySQL的各个隔离级别提供了保证. mysql并发事务访问相同的记录会出现什么问题(在 ...
- jsplumbWithVue实现流程编排
最近业务需求,通过拖拽,实现流程编排,包括编排元素中的各种属性,刚开始拿到这个需求,一头雾水啊,找度娘渡了好久,FQ翻了很久,各种博客CSDN搜索,最终技术选型还是定在了jsplumb,这要感谢@萌级 ...
- 《Unity shader入门精要》复习<第13章 关于NDC坐标和深度/法线纹理>
分为三个地方讲解. NDC(Normalize Device Coordinates)归一化的设备坐标 NDC坐标是世界空间坐标通过MVP变换之后再进行归一化得到的坐标.只需要再一步变换就能得到屏幕空 ...
- Java基础——StringBuilder
/* StringBuilder作用: String 在new一个新的对象以及进行字符串拼接时,会在常量池创建拼接之前的两个字符串对象,拼接完成后会造成内存浪费,时间浪费 StringBuilder ...
- Python编写简易木马程序(转载乌云)
Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...