ROS之xacro语法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

`前文提到的URDF的语法在编写xml文件时存在着代码复用的问题,高度重复的工作给人一种重复造轮子的感觉,为了提高开发的效率,ROS给出了类似与编程的优化方案称之为–Xacro

一、Xacro是什么?

Xacro 是 XML Macros 的缩写,Xacro 是一种 XML 宏语言,是可编程的 XML。Xacro可以声明变量,可以通过数学运算求解,使用流程控制 控制执行的顺序,还可以通过类似函数的实现,封装固定的逻辑将逻辑中的可变数据以参数的方式传入,提高代码的复用性和安全性。

二、语法详解

1.属性与算数运算

使用xacro生成urdf时,根标签robot中必须包含命名空间声明xmlns:xacro = "http://wiki.ros.org/xacro"

<robot name = "xxx" xmlns:xacro="http://wiki.ros.org/xacro">
	
</robot>
<robot name = "xxx" xmlns:xacro="http://wiki.ros.org/xacro">
	<!--封装URDF中的一些常量,例如机器人底盘的长宽高,PI值等等,可以理解成键值对-->
	<xacro:property name = "名称" value = "">
	<!--属性和运算调用-->
	<link name = "my_link">
		<visual>
			<gemometry>
				<!--属性调用-->
				<cylinder radius = "${名称}">
				<!--或者数学表达式-->
				<cylinder radius = "${名称 / 2}">
			</geometry>
		</visual>
	</link>


<!--
	1属性调用:${名称}
	2算数运算:${数学表达式}
-->	
</robot>

2.宏定义

<!--
1:定义格式
<xacro:macro name = "宏名称" params = "参数(多参数之间用空格隔开)">
	...
	参数调用格式:${}   
</xacro:macro>

2:调用格式:
<xacro:宏名称 参数1 =  参数2 = ... />
-->


<robot name = "xxx" xmlns:xacro="http://wiki.ros.org/xacro">
	<xacro:property name = "wheel_radius" value = "0.02">
	<xacro:property name = "wheel_width" value = "0.1">
	<xacro:macro name = "plus_wheel" params = "name dir">
		<link name = "${name}_wheel">
			<visual>
				<geometry>
					<cylinder radius = "${wheel_radius}" length = "${wheel_width}" />
				</geometry>
			</visual>
		</link>
		<!--假设有个底盘“base”-->
		<joint name = "${name}_wheel2_base" type = "continous">
			<parent link = "base" />
			<child  link = "${name}_wheel" />
			<origin xyz = "0 ${flag} * 1 0" />
			<axis   xyz = "0 1 0" />
			
		</joint>
	</xacro:macro>
	<xacro:plus_wheel name = "left"  flag = "1" />
	<xacro:plus_wheel name = "right" flag = "-1" />

</robot>

3.文件包含

多部件可以封装成不同的xacro文件,最后可以将不同的文件集成,组合成完整的模型。

<robot name = "xxx" xmlns:xacro="http://wiki.ros.org/xacro">
	<xacro:include filename = "chassis.xacro" />
	<xacro:include filename = "camera.xacro" />
	<xacro:include filename = "gimbal.xacro" />
	<!--上面文件的模型各自已经在对应的.xacro文件里完成-->
</robot>

三、启动

主要有两种启动方式

  • 将xacro文件转换成urdf文件rosrun xacro xacro xxx.xacro,然后再再整合到laucnh文件里
<launch>
	<param name = "robot_description" textfile = "$(find 功能包名称)/xxx/xxx/xxx.urdf">
</launch>
  • launch文件里直接加载xacro——推荐
<launch>
	<param name = "robot_description" command = "${find 功能包名称}/xx/xx/xx.xacro">
</launch>

总结

这是本人学习ROS 过程关于Xacro语法的一点点小总结,有错误欢迎指正。同时详细的可以参考官网ROS中xacro

猜你喜欢

转载自blog.csdn.net/weixin_45811857/article/details/124371959