1.urdf与xacro简单比较
"urdf" 是最初也是比较简单的机器人描述文件,它的结构简单明了,容易理解。但是这也导致当机器人模型变得复杂时,urdf的结构描述就变得冗长,无法简洁有效的描述机器人部件; "Xacro" 的出现在一定程度上有效地解决这种问题。在本质上,xacro与urdf是等价的,但xacro格式提供了一些更高级的方式来组织和编辑机器人描述。
2.urdf文件结构与xacro文件结构
urdf--主要部件
示例如下:定义个robot name, 将其他的部件都放在里面,然后针对每一个关键(joint ), 坐标外观(geometry), 材料(material)分别进行描述。 其中,每个child link是以parent link 为原点的三维坐标系位置(Origin), 若没有parent link的origin则是相对于本身原位置的转换。
<?xml version="<?xml version="1.0"?> <robot name="test_robot"> <link name="base_link" /> <link name="link2" /> <link name="link3" /> <link name="link4" /> <link name="base_link"> <visual> <geometry> <box size="0.25 .16 .05"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="blue"> <color rgba="0 0 .8 1"/> </material> </visual> </link> <joint name="joint1" type="continuous"> <parent link="base_link"/> <child link="link2"/> <origin xyz="0.3 0 0" rpy="1 0 0" /> </joint> <joint name="joint2" type="continuous"> <parent link="base_link"/> <child link="link3"/> <origin xyz="0 0.3 0" rpy="0 1 0" /> </joint> <joint name="joint3" type="continuous"> <parent link="base_link"/> <child link="link4"/> <origin xyz="0 0 0.3" rpy="0 0 1" /> </joint> </robot>
其他部件标签如: "Collision", "Axis joint", "Limit"暂略.
xacro--主要部件
-
定义宏属性: Constants
<xacro:property name="WIDTH" value="2.0"/> <xacro:property name="PI" value="3.14159265" /> 使用:${PI/2}
-
Macros: 小模块的定义,方便重用,以及可以使用参数来标识不同的部分
<xacro:macro name="default_link" params="prefix *origin"> <link name="${prefix}_link1" > <xacro:insert_block name="prigin" /> </link> </xacro:macro> <xacro:default_link prefix="my"> <origin xyz="0 0 0" rpy="0 0 0" /> </xacro:default_link>
-
include:很多模型已经定义好分成多个文件,我们可以用include格式将各个部件加进来,并且还可以加入urdf文件。
<xacro:include firename="${find packages}/urdf/***.xarco" /> <xacro:include firename="${find packages}/urdf/***.urdf" />
3.两种不同机器人描述文件的显示方式
urdf
<launch> <arg name="model" /> <arg name="gui" default="false" /> <param name="robot_description" textfile="$(find basic_3d_visualizer)/urdf/First01learn.urdf" /> <param name="use_gui" value="$(arg gui)"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find basic_3d_visualizer)/urdf/urdf_test.rviz" /> </launch>
xacro
<launch> <arg name="model" /> <arg name="gui" default="true" /> <param name="robot_description" command="$(find xacro)/xacro --inorder $(find basic_3d_visualizer)/urdf/First01learn.urdf" /> <param name="use_gui" value="$(arg gui)"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" /> </launch>