ROS總結(三)在仿真模型添加激光雷達

官方教程

完整代碼:

<?xml version="1.0"?>
<robot name="laser" xmlns:xacro="http://ros.org/wiki/xacro">
  <!-- Hokuyo Laser scanner -->
  <xacro:property name="hokuyo_size" value="0.05" />
  <xacro:property name="base_height" value="0.02" />
  <xacro:property name="base_radius" value="0.25" />

  <xacro:macro name="laser" params="parent"> 
    <link name="base_laser">
      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <box size="${hokuyo_size} ${hokuyo_size} ${hokuyo_size}"/>
        </geometry>
      </collision>
      <visual>
        <origin xyz="0 0 0" rpy="0 0 0" />
        <geometry>
          <!--<box size="${hokuyo_size} ${hokuyo_size} ${hokuyo_size}"/>-->
          <!--<mesh filename="model://hokuyo/meshes/hokuyo.dae"/>-->
          <mesh filename="package://mybot_description/mesh/hokuyo.dae"/>
        </geometry>
        <!--<material name="Blue" />-->
      </visual>
    </link>
    <joint name="hokuyo_joint" type="fixed">
      <origin xyz="${base_radius - hokuyo_size/2} 0 ${base_height+hokuyo_size/2}" rpy="0 0 0" />
      <parent link="${parent}"/>
      <child link="base_laser" />
    </joint>

    <gazebo reference="base_laser">
      <material>Gazebo/Blue</material>
      <turnGravityOff>false</turnGravityOff>
      <sensor type="gpu_ray" name="head_hokuyo_sensor">
        <pose>${hokuyo_size/2} 0 0 0 0 0</pose>
        <visualize>false</visualize>
        <update_rate>50</update_rate>
        <ray>
          <scan>
            <horizontal>
              <samples>720</samples>
              <resolution>1</resolution>
              <min_angle>-2.3550796</min_angle>
              <max_angle>2.3550796</max_angle>
            </horizontal>
          </scan>
          <range>
            <min>0.10</min>
            <max>10.0</max>
            <resolution>0.001</resolution>
          </range>
        </ray>
        <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so">
          <topicName>/scan</topicName>
          <frameName>base_laser</frameName>
        </plugin>
      </sensor>
    </gazebo>
  </xacro:macro>
</robot>

分析:

激光的尺寸屬性和base_link的參數

  <xacro:property name="hokuyo_size" value="0.05" />
  <xacro:property name="base_height" value="0.02" />
  <xacro:property name="base_radius" value="0.25" />

宏:名稱爲laser,參數parent(關節的parent屬性)

<xacro:macro name="laser" params="parent">

包含三個部分:link、joint、gazebo:

link包含了顯示和碰撞屬性,顯示用了mesh

    <link name="base_laser">
      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <box size="${hokuyo_size} ${hokuyo_size} ${hokuyo_size}"/>
        </geometry>
      </collision>
      <visual>
        <origin xyz="0 0 0" rpy="0 0 0" />
        <geometry>
          <!--<box size="${hokuyo_size} ${hokuyo_size} ${hokuyo_size}"/>-->
          <!--<mesh filename="model://hokuyo/meshes/hokuyo.dae"/>-->
          <mesh filename="package://mybot_description/mesh/hokuyo.dae"/>
        </geometry>
        <!--<material name="Blue" />-->
      </visual>
    </link>

gazebo:
reference表示該gazebo屬性是base_laser這個link的
material是在gazebo中顯示的材質
sensor標籤聲明傳感器屬性:type類型爲gpu_ray(可以探測沒有碰撞屬性的物體,如actor)

  • visualize:是否顯示傳感器數據
  • update_rate:更新頻率
  • ray:激光數據的參數配置
  • plugin:配合sensor類型gpu_ray使用libgazebo_ros_gpu_laser.so;如果是ray類型則用libgazebo_ros_laser.so
    <gazebo reference="base_laser">
      <material>Gazebo/Blue</material>
      <turnGravityOff>false</turnGravityOff>
      <sensor type="gpu_ray" name="head_hokuyo_sensor">
        <pose>${hokuyo_size/2} 0 0 0 0 0</pose>
        <visualize>false</visualize>
        <update_rate>50</update_rate>
        <ray>
          <scan>
            <horizontal>
              <samples>720</samples>
              <resolution>1</resolution>
              <min_angle>-2.3550796</min_angle>
              <max_angle>2.3550796</max_angle>
            </horizontal>
          </scan>
          <range>
            <min>0.10</min>
            <max>10.0</max>
            <resolution>0.001</resolution>
          </range>
        </ray>
        <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so">
          <topicName>/scan</topicName>
          <frameName>base_laser</frameName>
        </plugin>
      </sensor>
    </gazebo>

效果:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章