Some tips for integrate URDF with Gazebo.
- URDF file should contain
<collision>element. - URDF file should contain
<inertial>element.
material
<gazebo reference="base_link">
<material>Gazebo/Black</material>
</gazebo>inertial
Standard inertial matrix implements using Xacro.
<!-- Macro for inertia matrix -->
<xacro:macro name="sphere_inertial_matrix" params="m r">
<inertial>
<mass value="${m}" />
<inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"
iyy="${2*m*r*r/5}" iyz="0"
izz="${2*m*r*r/5}" />
</inertial>
</xacro:macro>
<xacro:macro name="cylinder_inertial_matrix" params="m r h">
<inertial>
<mass value="${m}" />
<inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"
iyy="${m*(3*r*r+h*h)/12}" iyz = "0"
izz="${m*r*r/2}" />
</inertial>
</xacro:macro>
<xacro:macro name="Box_inertial_matrix" params="m l w h">
<inertial>
<mass value="${m}" />
<inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"
iyy="${m*(w*w + l*l)/12}" iyz= "0"
izz="${m*(w*w + h*h)/12}" />
</inertial>
</xacro:macro>launch
Load urdf data by using param element:
<!-- For pure urdf file -->
<param name="robot_description" command="$(find pkg)/urdf/xacro/test.xacro" />
<!-- For xacro file -->
<param name="robot_description" command="$(find xacro)/xacro $(find pkg)/urdf/xacro/test.urdf.xacro" />Load Gazebo world:
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find pkg)/worlds/hello.world" />
</include>Start Gazebo node:
<node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description" />