1. 机器人的启动文件

1.1. 整体叙述


    1. <?xml version="1.0"?>
      <launch>
       
        <arg name="world" default="robocup_at_work_2012"/>
        <arg name="init_pos_x" default="0.0"/>
        <arg name="init_pos_y" default="0.0"/>
        <arg name="init_pos_z" default="0.0"/>
       
        <!-- launch world -->
        <!--<include file="$(find youbot_gazebo_worlds)/launch/$(arg world).launch" />-->
        <include file="$(find gazebo_ros)/launch/willowgarage_world.launch"/>
       
        <param name="robot_description" command="$(find xacro)/xacro.py $(find youbot_description)/robots/youbot_base_only.urdf.xacro" />
       
        <node pkg="gazebo_ros" type="spawn_model" name="spawn_robot" respawn="false" output="screen"
          args="-param robot_description
                -urdf
                -x $(arg init_pos_x)
                -y $(arg init_pos_y)
                -z $(arg init_pos_z)
                -model youbot">
        </node>
       
        <!-- launch joint state controller -->
        <include file="$(find youbot_gazebo_control)/launch/joint_state_controller.launch" />
        
        <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
          <param name="publish_frequency" type="double" value="30.0" />
        </node>
       
      </launch>

1.2. 具体解释

1. 启动一个gazebo场景

 首先是把ros自带的gazebo_ros包的启动文件加载进来, 并启动里面的节点

  •   <include file=”$(find gazebo_ros)/launch/willowgarage_world.launch”/>

2. 加载机器人的描述文件

 然后解码xacro

  •   <param name=”robot_description” command=”$(find xacro)/xacro.py $(find youbot_description)/robots/youbot_base_only.urdf.xacro” />
     

 然后启动一个urdf转换节点:


    1.   <node pkg="gazebo_ros" type="spawn_model" name="spawn_robot" respawn="false" output="screen"
          args="-param robot_description
                -urdf
                -x $(arg init_pos_x)
                -y $(arg init_pos_y)
                -z $(arg init_pos_z)
                -model youbot">
        </node>

3. 启动joint state 控制

  •   <include file=”$(find youbot_gazebo_control)/launch/joint_state_controller.launch” />

4. 机器人状态发布


  1.   <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
        <param name="publish_frequency" type="double" value="30.0" />
      </node>

2. 每个文件的内容分析

2.1 启动一个gazebo场景

  •   <include file=”$(find gazebo_ros)/launch/willowgarage_world.launch”/>

具体内容:


    1. <launch>
       
        <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
        <include file="$(find gazebo_ros)/launch/empty_world.launch">
          <arg name="world_name" value="worlds/willowgarage.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
          <arg name="paused" value="false"/>
          <arg name="use_sim_time" value="true"/>
          <arg name="gui" value="true"/>
          <arg name="headless" value="false"/> <!-- Inert - see gazebo_ros_pkgs issue #491 -->
          <arg name="recording" value="false"/>
          <arg name="debug" value="false"/>
        </include>
       
      </launch>

2.2  加载机器人的描述文件

 1. 然后解码xacro


    1. <?xml version="1.0"?>
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
             xmlns:xacro="http://ros.org/wiki/xacro"
             name="youbot" >
        
        <!-- The following xacro:included files set up definitions of parts of the robot body -->
        <!-- misc common stuff? -->
        <xacro:include filename="$(find youbot_description)/urdf/common.xacro" />
        
        <!-- youbot base -->
        <xacro:include filename="$(find youbot_description)/urdf/youbot_base/base.urdf.xacro" />
       
        <!-- controller manager -->
        <xacro:include filename="$(find youbot_description)/controller/ros_controller.urdf.xacro" />
        
        <!-- materials for visualization -->
        <xacro:include filename="$(find youbot_description)/urdf/materials.urdf.xacro" />
       
       
        <!-- sensors -->
        <xacro:include filename="$(find youbot_description)/urdf/sensors/hokuyo_urg30_laser.urdf.xacro"/>
        <xacro:youbot_base name="base"/>
        <xacro:hokuyo_urg30_laser name="base_laser_front" parent="base" ros_topic="base_scan" update_rate="40" min_angle="-2.36" max_angle="2.36">
          <origin xyz="0.3 0 0.1" rpy="0 0 0"/>
        </xacro:hokuyo_urg30_laser>
       
      <!--    <xacro:include filename="$(find youbot_description)/urdf/sensors/hokuyo_urg04_laser.urdf.xacro"/>
          <xacro:youbot_base name="base"/>
          <xacro:hokuyo_urg04_laser name="base_laser_front" parent="base" ros_topic="base_scan" update_rate="10" min_angle="-1.37" max_angle="1.37">
            <origin xyz="0.3 0 -0.03" rpy="0 0 0"/>
          </xacro:hokuyo_urg04_laser>-->
       
      </robot>

2. 解释:

1.1  确定xml版本  和机器人 的一些信息  ,  没用


    1. <?xml version="1.0"?>
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
             xmlns:xacro="http://ros.org/wiki/xacro"
             name="youbot" >

1.2 xacro:包含文件设置机器人部件的定义 

通用的配置参数:

  •  <xacro:include filename=”$(find youbot_description)/urdf/common.xacro” />


    1. <?xml version="1.0"?>
      <robot xmlns:xacro="http://ros.org/wiki/xacro">
       
      	<xacro:property name="M_PI" value="3.1415926535897931" />
       
      	<!-- Casters -->
      	<xacro:property name="cal_caster_fl" value="0.0" />
      	<xacro:property name="cal_caster_fr" value="0.0" />
      	<xacro:property name="cal_caster_bl" value="0.0" />
      	<xacro:property name="cal_caster_br" value="0.0" />
       
      </robot>

机器人的一些基本配置文件

  •   <xacro:include filename=”$(find youbot_description)/urdf/youbot_base/base.urdf.xacro” />


    1. <?xml version="1.0"?>
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor" 
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller" 
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface" 
             xmlns:xacro="http://ros.org/wiki/xacro">
       
        <!-- sensors -->
        <xacro:include filename="$(find youbot_description)/urdf/youbot_base/base.gazebo.xacro"/>
        <xacro:include filename="$(find youbot_description)/urdf/youbot_base/base.transmission.xacro"/>
        
        <!-- simplified box collision geometry for base -->
        <xacro:property name="base_size_x" value="0.570"/>
        <xacro:property name="base_size_y" value="0.360"/>
        <xacro:property name="base_size_z" value="0.100"/>
        <xacro:property name="base_mass" value="22.0"/>
       
        <xacro:property name="caster_offset_x" value="0.228"/>
        <xacro:property name="caster_offset_y" value="0.158"/>
        <xacro:property name="caster_offset_z" value="-0.034"/>
        <xacro:property name="caster_mass" value="0.1"/>
       
        <xacro:property name="wheel_offset_x" value="0.0"/>
        <xacro:property name="wheel_offset_y" value="0.0"/>
        <xacro:property name="wheel_offset_z" value="0.0"/>
       
        <xacro:property name="wheel_mass" value="0.4"/>
        <xacro:property name="wheel_radius" value="0.05"/>
        <xacro:property name="wheel_length" value="0.005"/>
       
        <xacro:property name="caster_joint_damping" value="1.0"/>
        <xacro:property name="caster_joint_friction" value="1.0"/>
        <xacro:property name="caster_joint_effort" value="30"/>
        <xacro:property name="caster_joint_velocity" value="10"/>
        <xacro:property name="caster_joint_safety_k_velocity" value="10.0"/>
       
        <xacro:property name="wheel_joint_damping" value="1.0"/>
        <xacro:property name="wheel_joint_friction" value="1.0"/>
        <xacro:property name="wheel_joint_effort" value="30"/>
        <xacro:property name="wheel_joint_velocity" value="10"/>
        <xacro:property name="wheel_joint_safety_k_velocity" value="10.0"/>
       
       
        <xacro:macro name="youbot_base" params="name">
          <link name="${name}_footprint">
            <inertial>
              <mass value="0.1"/>
              <origin xyz="0 0 ${-base_size_z / 2.0}" rpy="0 0 0"/>
              <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <box size="0.001 0.001 0.001"/>
              </geometry>
              <material name="Red"/>
            </visual>
            <collision>
              <origin xyz="0 0 ${-base_size_z / 2.0}" rpy="0 0 0"/>
              <geometry>
                <box size="0.001 0.001 0.001"/>
              </geometry>
            </collision>
          </link>
          <joint name="${name}_footprint_joint" type="fixed">
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <child link="${name}_link"/>
            <parent link="${name}_footprint"/>
          </joint>
       
          <link name="${name}_link">
            <inertial>
              <mass value="${base_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="5.652232699207" ixy="-0.009719934438" ixz="1.293988226423" iyy="5.669473158652" iyz="-0.007379583694" izz="3.683196351726"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <mesh filename="package://youbot_description/meshes/youbot_base/base.dae"/>
              </geometry>
              <material name="DarkGrey"/>
            </visual>
            <collision>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <!--<box size="${base_size_x} ${base_size_y} ${base_size_z}" />-->
                <mesh filename="package://youbot_description/meshes/youbot_base/base_convex.dae"/>
              </geometry>
            </collision>
          </link>
       
          <!-- front left wheel -->
          <joint name="caster_joint_fl" type="continuous">
            <origin xyz="${caster_offset_x} ${caster_offset_y} ${caster_offset_z}" rpy="0 0 0"/>
            <axis xyz="0 0 1"/>
            <limit effort="${caster_joint_effort}" velocity="${caster_joint_velocity}"/>
            <dynamics damping="${caster_joint_damping}" friction="${caster_joint_friction}"/>
            <safety_controller k_velocity="${caster_joint_safety_k_velocity}"/>
            <parent link="${name}_link"/>
            <child link="caster_link_fl"/>
          </joint>
          <link name="caster_link_fl">
            <inertial>
              <mass value="${caster_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
          </link>
       
          <joint name="wheel_joint_fl" type="continuous">
            <axis xyz="0 1 0"/>
            <limit effort="${wheel_joint_effort}" velocity="${wheel_joint_velocity}"/>
            <origin xyz="${wheel_offset_x} ${wheel_offset_y} ${wheel_offset_z}" rpy="0 0 0"/>
            <parent link="caster_link_fl"/>
            <dynamics damping="${wheel_joint_damping}" friction="${wheel_joint_friction}"/>
            <safety_controller k_velocity="${wheel_joint_safety_k_velocity}"/>
            <child link="wheel_link_fl"/>
          </joint>
          <link name="wheel_link_fl">
            <inertial>
              <mass value="${wheel_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <!--<mesh filename="package://youbot_description/meshes/youbot_base/youbot_wheel.stl" />-->
              <geometry>
                <sphere radius="${wheel_radius}"/>
              </geometry>
              <material name="Orange"/>
            </visual>
            <collision>
              <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
              <geometry>
                <cylinder radius="${wheel_radius}" length="${wheel_radius}"/>
              </geometry>
            </collision>
          </link>
       
          <!-- front right wheel -->
          <joint name="caster_joint_fr" type="continuous">
            <origin xyz="${caster_offset_x} ${-caster_offset_y} ${caster_offset_z}" rpy="0 0 0"/>
            <axis xyz="0 0 1"/>
            <limit effort="${caster_joint_effort}" velocity="${caster_joint_velocity}"/>
            <dynamics damping="${caster_joint_damping}" friction="${caster_joint_friction}"/>
            <safety_controller k_velocity="${caster_joint_safety_k_velocity}"/>
            <parent link="${name}_link"/>
            <child link="caster_link_fr"/>
          </joint>
          <link name="caster_link_fr">
            <inertial>
              <mass value="${caster_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
          </link>
       
          <joint name="wheel_joint_fr" type="continuous">
            <axis xyz="0 1 0"/>
            <limit effort="${wheel_joint_effort}" velocity="${wheel_joint_velocity}"/>
            <dynamics damping="${wheel_joint_damping}" friction="${wheel_joint_friction}"/>
            <safety_controller k_velocity="${wheel_joint_safety_k_velocity}"/>
            <origin xyz="${wheel_offset_x} ${wheel_offset_y} ${wheel_offset_z}" rpy="0 0 0"/>
            <parent link="caster_link_fr"/>
            <child link="wheel_link_fr"/>
          </joint>
          <link name="wheel_link_fr">
            <inertial>
              <mass value="${wheel_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <!--<mesh filename="package://youbot_description/meshes/youbot_base/youbot_wheel.stl" />-->
                <sphere radius="${wheel_radius}"/>
              </geometry>
              <material name="Orange"/>
            </visual>
            <collision>
              <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
              <geometry>
                <cylinder radius="${wheel_radius}" length="${wheel_radius}"/>
              </geometry>
            </collision>
          </link>
       
          <!-- back left wheel -->
          <joint name="caster_joint_bl" type="continuous">
            <origin xyz="${-caster_offset_x} ${caster_offset_y} ${caster_offset_z}" rpy="0 0 0"/>
            <axis xyz="0 0 1"/>
            <limit effort="${caster_joint_effort}" velocity="${caster_joint_velocity}"/>
            <dynamics damping="${caster_joint_damping}" friction="${caster_joint_friction}"/>
            <safety_controller k_velocity="${caster_joint_safety_k_velocity}"/>
            <parent link="${name}_link"/>
            <child link="caster_link_bl"/>
          </joint>
          <link name="caster_link_bl">
            <inertial>
              <mass value="${caster_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
          </link>
       
          <joint name="wheel_joint_bl" type="continuous">
            <axis xyz="0 1 0"/>
            <limit effort="10" velocity="10"/>
            <limit effort="${wheel_joint_effort}" velocity="${wheel_joint_velocity}"/>
            <dynamics damping="${wheel_joint_damping}" friction="${wheel_joint_friction}"/>
            <safety_controller k_velocity="${wheel_joint_safety_k_velocity}"/>
            <origin xyz="${wheel_offset_x} ${wheel_offset_y} ${wheel_offset_z}" rpy="0 0 0"/>
            <parent link="caster_link_bl"/>
            <child link="wheel_link_bl"/>
          </joint>
          <link name="wheel_link_bl">
            <inertial>
              <mass value="${wheel_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <!--<mesh filename="package://youbot_description/meshes/youbot_base/youbot_wheel.stl" />-->
                <sphere radius="${wheel_radius}"/>
              </geometry>
              <material name="Orange"/>
            </visual>
            <collision>
              <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
              <geometry>
                <cylinder radius="${wheel_radius}" length="${wheel_radius}"/>
              </geometry>
            </collision>
          </link>
       
          <!-- back right wheel -->
          <joint name="caster_joint_br" type="continuous">
            <origin xyz="${-caster_offset_x} ${-caster_offset_y} ${caster_offset_z}" rpy="0 0 0"/>
            <axis xyz="0 0 1"/>
            <limit effort="${caster_joint_effort}" velocity="${caster_joint_velocity}"/>
            <dynamics damping="${caster_joint_damping}" friction="${caster_joint_friction}"/>
            <safety_controller k_velocity="${caster_joint_safety_k_velocity}"/>
            <parent link="${name}_link"/>
            <child link="caster_link_br"/>
          </joint>
          <link name="caster_link_br">
            <inertial>
              <mass value="${caster_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
          </link>
       
          <joint name="wheel_joint_br" type="continuous">
            <axis xyz="0 1 0"/>
            <limit effort="${wheel_joint_effort}" velocity="${wheel_joint_velocity}"/>
            <dynamics damping="${wheel_joint_damping}" friction="${wheel_joint_friction}"/>
            <safety_controller k_velocity="${wheel_joint_safety_k_velocity}"/>
            <origin xyz="${wheel_offset_x} ${wheel_offset_y} ${wheel_offset_z}" rpy="0 0 0"/>
            <parent link="caster_link_br"/>
            <child link="wheel_link_br"/>
          </joint>
          <link name="wheel_link_br">
            <inertial>
              <mass value="${wheel_mass}"/>
              <origin xyz="0 0 0"/>
              <inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943"/>
            </inertial>
            <visual>
              <origin xyz="0 0 0" rpy="0 0 0"/>
              <geometry>
                <!--<mesh filename="package://youbot_description/meshes/youbot_base/youbot_wheel.stl" />-->
                <sphere radius="${wheel_radius}"/>
              </geometry>
              <material name="Orange"/>
            </visual>
            <collision>
              <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
              <geometry>
                <cylinder radius="${wheel_radius}" length="${wheel_radius}"/>
              </geometry>
            </collision>
          </link>
       
          <!-- extensions -->
          <xacro:youbot_base_gazebo/>
          <xacro:youbot_base_transmission/>
       
        </xacro:macro>
      </robot>

控制管理  controller manager


    1. <?xml version="1.0"?>
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface">
       
        <gazebo>
          <plugin name="gazebo_ros_controller" filename="libgazebo_ros_control.so" />
        </gazebo>
       
      </robot>

可视化材料  materials for visualization


    1. <?xml version="1.0"?>
      <robot>
        <material name="Orange">
          <color rgba="1.0 0.4 0.0 1.0"/>
        </material>
        <material name="Grey">
          <color rgba="0.7 0.7 0.7 1.0"/>
        </material>
        <material name="DarkGrey">
          <color rgba="0.3 0.3 0.3 1.0"/>
        </material>
        <material name="White">
          <color rgba="1.0 1.0 1.0 1.0"/>
        </material>
        <material name="Black">
          <color rgba="0.0 0.0 0.0 1.0"/>
        </material>
        <material name="Red">
          <color rgba="1.0 0.0 0.0 1.0"/>
        </material>
        <material name="Green">
          <color rgba="0.0 1.0 0.0 1.0"/>
        </material>
        <material name="Blue">
          <color rgba="0.0 0.0 0.8 1.0"/>
        </material>
        <material name="LightGrey">
          <color rgba="0.82 0.82 0.82 1.0"/>
        </material>
      </robot>

启动传感器

30 米   or   10 米


    1.   <!-- sensors -->
        <xacro:include filename="$(find youbot_description)/urdf/sensors/hokuyo_urg30_laser.urdf.xacro"/>
        <xacro:youbot_base name="base"/>
        <xacro:hokuyo_urg30_laser name="base_laser_front" parent="base" ros_topic="base_scan" update_rate="40" min_angle="-2.36" max_angle="2.36">
          <origin xyz="0.3 0 0.1" rpy="0 0 0"/>
        </xacro:hokuyo_urg30_laser>

  •   <xacro:include filename=”$(find youbot_description)/urdf/sensors/hokuyo_urg30_laser.urdf.xacro”/>


    1. <?xml version="1.0"?>
       
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
             xmlns:xacro="http://ros.org/wiki/xacro">
       
        <xacro:include filename="$(find youbot_description)/urdf/sensors/hokuyo_urg30_laser.gazebo.xacro" />
       
        <xacro:macro name="hokuyo_urg30_laser" params="name parent *origin ros_topic update_rate min_angle max_angle">
          <joint name="${name}_hokuyo_urg30_laser_joint" type="fixed">
            <axis xyz="0 1 0" />
            <xacro:insert_block name="origin" />
            <parent link="${parent}_link"/>
            <child link="${name}_link"/>
          </joint>
          <link name="${name}_link" type="laser">
            <inertial>
              <mass value="0.16" />
              <origin xyz="0 0 0" rpy="0 0 0" />
              <inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1" />
            </inertial>
            <visual>
            	<origin xyz="0 0 0" rpy="0 0 0" />
      	<geometry>
      		<mesh filename="package://youbot_description/meshes/sensors/hokuyo.dae" />
      	</geometry>
      	<material name="DarkGrey" />
            </visual>
      			
            <collision>
      		<origin xyz="0 0 0" rpy="0 0 0" />
      		<geometry>
      			<mesh filename="package://youbot_description/meshes/sensors/hokuyo_convex.dae" />
       
      		</geometry>
      	</collision>
          </link>
          <!-- gazebo extensions -->
          <xacro:hokuyo_urg30_laser_gazebo name="${name}" ros_topic="${ros_topic}" update_rate="${update_rate}" min_angle="${min_angle}" max_angle="${max_angle}" />
        </xacro:macro>
      </robot>

  •   <xacro:include filename=”$(find youbot_description)/urdf/sensors/hokuyo_urg30_laser.gazebo.xacro” />


    1. <?xml version="1.0"?>
       
      <robot xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
             xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
             xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
             xmlns:xacro="http://ros.org/wiki/xacro">
       
        <xacro:macro name="hokuyo_urg30_laser_gazebo" params="name ros_topic update_rate min_angle max_angle">
          <gazebo reference="${name}_link">
            <sensor name="${name}" type="ray">
                      <always_on>true</always_on>
              <update_rate>${update_rate}</update_rate>
                      <pose>0 0 0 0 0 0</pose>
                      <visualize>false</visualize>
              <ray>
                  <scan>
                      <horizontal>
                          <samples>1080</samples>
                          <resolution>0.25</resolution>
                          <min_angle>${min_angle}</min_angle>
                          <max_angle>${max_angle}</max_angle>
                      </horizontal>
                  </scan>
                  <range>
                          <min>0.10</min>
                          <max>30.0</max>
                          <resolution>0.01</resolution>
                  </range>
       
                 <noise>
                    <type>gaussian</type>
                    <mean>0.0</mean>
                    <stddev>0.03</stddev>
                  </noise>
       
              </ray>
       
              <plugin name="gazebo_ros_${name}_controller" filename="libgazebo_ros_laser.so">
                  <gaussianNoise>0.005</gaussianNoise>
                  <alwaysOn>true</alwaysOn>
                  <updateRate>${update_rate}</updateRate>
                  <topicName>${ros_topic}</topicName>
                  <frameName>/${name}_link</frameName>
               </plugin>
            </sensor>
          </gazebo>
        </xacro:macro>
       
      </robot>

2.3 启动joint state 控制

  •   <include file=”$(find youbot_gazebo_control)/launch/joint_state_controller.launch” />


    1. <?xml version="1.0"?>
      <launch>
       
        <rosparam file="$(find youbot_gazebo_control)/config/joint_state_controller.yaml" command="load"/> 
       
        <node pkg="controller_manager" type="spawner" name="joint_state_controller_spawner" args="joint_state_controller" respawn="false" output="screen" />
       
      </launch>