gazebo 机器人仿真

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转换节点:

  <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. 机器人状态发布

  <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"/>

具体内容:

<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

<?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版本  和机器人 的一些信息  ,  没用

<?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" />
<?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" />
<?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

<?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

<?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 米

  <!-- 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"/>
<?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" />
<?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" />
<?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>

猜你喜欢

转载自blog.csdn.net/xiaoma_bk/article/details/85197342