预计完成时间:10 分钟
Xacro 可以帮助你编写更有组织、更精简的 XML 文件。由于你是使用 XML 在 URDF 中描述机器人,因此 Xacro 能让这些文件更容易维护和复用。
例如,描述机器人与 Gazebo 集成的那一大段内容,就可以单独拆到一个文件里。下面来看具体做法。
把 robot.xacro 中所有的 <gazebo> 标签剪切出来,并粘贴到新的 robot.gazebo 文件中,结构如下:
复制并粘贴
<?xml version="1.0"?>
<robot>
<!-- Paste here -->
</robot>
最后,在机器人描述文件中把这个新文件包含进来。你还需要在 robot 标签中加入新的 Xacro 定义:
复制并粘贴
<?xml version="1.0" ?>
<robot name="robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find robot_description)/urdf/robot.gazebo" />
<!-- Link - chassis -->
...
</robot>
接下来,在 spawn.launch.py 文件中,把原来的 URDF 文件替换为新的 XACRO 文件。
将下面这几行:
# Load URDF File #
urdf_file = 'robot.urdf'
robot_desc_path = os.path.join(package_directory, "urdf", urdf_file)
替换为以下新内容:
# Load URDF File #
urdf_file = 'robot.xacro'
robot_desc_path = os.path.join(package_directory, "urdf", urdf_file)
这里唯一的变化,就是文件名从 robot.urdf 改成了 robot.xacro。
然后还需要在 setup.py 文件中再做一个修改:
把这一行:
(os.path.join('share', package_name, 'urdf'), glob('urdf/*.urdf')),
替换为这一行:
(os.path.join('share', package_name, 'urdf'), glob('urdf/*.*')),
这样一来,urdf 文件夹中的所有文件都会在编译时被复制到 install 目录中。
<!-- Link - chassis -->
<robot name="robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find robot_description)/urdf/robot.gazebo" />
<!-- Parameters -->
<xacro:property name="chassis_mass" value="10" />
<!-- Link - chassis -->
<link name="link_chassis">
<inertial>
<mass value="${chassis_mass}" />
如果你还想复用某个公共值,例如 half_chassis,就可以像下面这样写一个数学表达式:
<mass value="${1/2 * chassis_mass}" />
XACRO 还能做的事情远不止这些。你可以查看官方参考文档:https://wiki.ros.org/xacro。
现在你已经知道如何使用 XACRO 了,请把所有使用 PI 近似值的地方都改成数学表达式。
Xacro 已经把 pi 预先定义为一个全局变量。请把所有的 1.57(或 1.5707)都替换为基于 pi 的表达式。
Xacro 允许你在小数变量中保留任意精度的小数位数。
