ROS总结(二)用xacro简化urdf
包含其他xacro文件
<xacro:include filename="$(find mybot_description)/urdf/benebot.gazebo.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/laser.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/camera.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/layer.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/VLP-16.urdf.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/sonar.xacro"/>
属性标签方便后面修改
<xacro:property name="M_PI" value="3.1415926535897931" />
<xacro:property name="M_PI_2" value="1.570796327" />
<xacro:property name="DEG_TO_RAD" value="0.017453293" />
宏标签:调用时完善宏名称和参数列表
<xacro:macro name="cylinder_inertia" params="m r h">
<inertia ixx="${m*(r*r+h*h)/12}" ixy = "0" ixz = "0"
iyy="${m*(r*r+h*h)/12}" iyz = "0"
izz="${m*(r*r+r*r)/12}" />
</xacro:macro>
在link标签中直接调用宏完成惯性参数的计算
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="${base_mass}"/>
<cylinder_inertia m="${base_mass}" r="${base_radius}" h="${base_height}" />
</inertial>
其他调用xacro的模块:超声、激光、camera等
<sonar pos="front_left" xyz="${base_radius*0.707} ${base_radius*-0.707} ${connect_height+base_height}" rpy="0 0 -1.04"/>
<sonar pos="front_mid" xyz="${base_radius} 0 ${connect_height+base_height}" rpy="0 0 0"/>
<sonar pos="front_right" xyz="${base_radius*0.707} ${base_radius*0.707} ${connect_height+base_height}" rpy="0 0 1.04"/>
<sonar pos="back_mid" xyz="${-1*base_radius} 0 ${connect_height+base_height}" rpy="0 0 3.14"/>
<layer parent="base_link" num="first" z_offset="${base_height/2}"/>
<laser parent="first_layer_link"/>
<openni_camera parent="camera_base"/>
<VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="${gpu}">
<origin xyz="0 0 0.6" rpy="0 0 0" />
</VLP-16>
完整mybot.urdf.xacro:
<?xml version="1.0" ?>
<robot name="benebot" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find mybot_description)/urdf/benebot.gazebo.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/laser.xacro" />
<xacro:include filename="$(find mybot_description)/urdf/camera.xacro"