欢迎光临散文网 会员登陆 & 注册

6.5 URDF优化_xacro

2023-11-07 10:13 作者:猛狮集训营  | 我要投稿

6.5 URDF优化_xacro

场景

前面 URDF 文件构建机器人模型的过程中,存在若干问题。

问题1:在设计关节的位置时,需要按照一定的规则计算,规则是固定的,但是在 URDF 中依赖于人工计算,存在不便,容易计算失误,且当某些参数发生改变时,还需要重新计算。 问题2:URDF中的部分内容是高度重复的,比如车轮的设计实现,不同轮子只是部分参数不同,形状、颜色、翻转量都是一致的,在实际应用中,构建复杂的机器人模型时,更是易于出现高度重复的设计,按照一般的编程思想涉及到重复代码应该考虑封装、复用,但是在之前的URDF文件中并没有相关操作。 ......

如果在一般编程语言中遇到类似问题,我们可以通过变量结合函数解决。对应的,在 ROS 中也给出了类似编程的优化方案,该方案称之为:Xacro。

概念

Xacro 是 XML Macros 的缩写,Xacro 是一种 XML 宏语言,是可编程的 XML。

Xacro 可以声明变量,可以通过数学运算求解;可以使用流程控制控制执行顺序;还可以通过宏封装、复用功能,从而提高代码复用率以及程序的安全性。

作用

较之于纯粹的 URDF 实现,可以编写更安全、精简、易读性更强的机器人模型文件,且可以提高编写效率。

6.5.1 xacro_快速体验

1.需求

使用xacro优化6.4.4 URDF练习中的小车底盘实现,需要使用变量封装车辆参数,并使用 xacro 宏封装轮子重复的代码并调用宏创建四个轮子(注意: 在此,演示 xacro 的基本使用,不必要生成合法的 URDF )。

2.实现

功能包cpp06_urdf的urdf/xacro目录下,新建xacro文件demo01_helloworld.urdf.xacro,并编辑文件,输入如下内容:

终端下进入当前文件所述目录,输入如下指令:

xacro demo01_helloworld.urdf.xacro

终端将会输出如下内容:

6.5.2 xacro_使用语法

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

1.变量与算数运算

变量用于封装 URDF 中的一些字段,比如: PAI 值,小车的尺寸,轮子半径 ....,变量的基本使用语法包括变量定义、变量调用、变量运算等。

1.1变量定义

1.2变量调用

1.3变量运算

2.宏

类似于函数实现,提高代码复用率,优化代码结构,提高安全性。宏的基本使用语法包括宏的定义与调用。

2.1宏定义

语法格式:

2.2宏调用

3.文件包含

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

6.5.3 xacro_练习

1.需求

使用xacro创建一个四轮机器人模型,该模型底盘可以参考6.4.4 URDF练习中的实现,并且在底盘之上添加了相机与激光雷达。相机与激光雷达的尺寸参数、安装位置可自定义。

2.实现分析

需求中的机器人模型是由底盘、摄像头和雷达三部分组成的,那么可以将每一部分都封装进一个xacro文件,最后再通过xacro文件包含组织成一个完整的机器人模型。

3.实现

功能包cpp06_urdf的urdf/xacro目录下,新建多个xacro文件,分别为:

  • car.urdf.xacro:用于包含不同机器人部件对应的xacro文件;

  • car_base.urdf.xacro:描述机器人底盘的xacro文件;

  • car_camera.urdf.xacro:描述摄像头的xacro文件;

  • car_laser.urdf.xacro:描述雷达的xacro文件。

编辑car.urdf.xacro文件,输入如下内容:<robot name="car" xmlns:xacro="http://wiki.ros.org/xacro">    <xacro:include filename="car_base.urdf.xacro"/>    <xacro:include filename="car_camera.urdf.xacro"/>    <xacro:include filename="car_laser.urdf.xacro"/> </robot>

编辑car_base.urdf.xacro文件,输入如下内容:

编辑car_camera.urdf.xacro文件,输入如下内容:

ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/xacro/car.urdf.xacro

命令执行后,rviz2 中可以显示与需求类似的机器人模型。

B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践

更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站

6.5 URDF优化_xacro的评论 (共 条)

分享到微博请遵守国家法律