在Gazebo中使用turtlebot+hokuyo运行gmapping

在Gazebo中使用turtlebot+hokuyo运行gmapping

1. 建一个新的ros工作空间 catkin_ws,在github下面下载好相应的源码
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/robopeak/rplidar_ros.git
git clone https://github.com/turtlebot/turtlebot_simulator.git
git clone https://github.com/turtlebot/turtlebot_apps.git
git clone https://github.com/turtlebot/turtlebot.git

2. 测试源码

编译

cd ~/catkin_ws
catkin_make

启动gazeb,启动gmapping ,运行rviz ,运行键盘控制机器人运动。

roslaunch turtlebot_gazebo turtlebot_world.launch
roslaunch turtlebot_gazebo gmapping_demo.launch 
roslaunch turtlebot_rviz_launchers view_navigation.launch 
roslaunch turtlebot_teleop keyboard_teleop.launch 

3.使用hokuyo激光雷达

3.1 修改 /turtlebot_simulator / turtlebot_gazebo / launch / turtlebot_word.launch 文件。

  <arg name="3d_sensor"  value="$(optenv TURTLEBOT_3D_SENSOR kinect)"/>

修改为

  <arg name="3d_sensor"  value="$(optenv TURTLEBOT_3D_SENSOR hokuyo)"/>

使用hokuyo发射的激光而不使用kinect转换而来的伪激光
将laser设置修改为


  <node pkg="nodelet" type="nodelet" name="laserscan_nodelet_manager" args="manager"/>
  
3.2 在/turtlebot/turtlebot_description/robots 路径下,建立相应的urdf文件:kobuki_hexagons_KinectHokuyo.urdf.xacro

修改完毕后完整的文件内容如下


    
<robot name="turtlebot" xmlns:xacro="http://ros.org/wiki/xacro">

  
  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_library.urdf.xacro"/>
  <xacro:include filename="$(find kobuki_description)/urdf/kobuki.urdf.xacro" />
  <xacro:include filename="$(find turtlebot_description)/urdf/stacks/hexagons.urdf.xacro"/>
  <xacro:include filename="$(find turtlebot_description)/urdf/sensors/kinect.urdf.xacro"/>
  <xacro:include filename="$(find turtlebot_description)/urdf/sensors/hokuyo.urdf.xacro"/>

  <kobuki/>
  <stack_hexagons parent="base_link"/>
  <sensor_kinect  parent="base_link"/>
  <sensor_hokuyo  parent="base_link"/>
robot>
3.3 进入文件turtlebot_description/urdf/turtlebot_library.urdf.xacro添加hoyuko的urdf文件:

(源码文件为 /turtlebot_library.erdf.xacro , 复制其内容新建为 turtlebot_library.urdf.xacro
turtlebot_library.urdf.xacro中添加一行

 <xacro:include filename="$(find turtlebot_description)/urdf/sensors/hokuyo.urdf.xacro"/>  
3.4 在路径turtlebot_description/urdf/sensors/下建立hokuyo.urdf.xacro 文件,配置位置信息。
  
      
    <robot name="sensor_hokuyo" xmlns:xacro="http://ros.org/wiki/xacro">  
      <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_gazebo.urdf.xacro"/>  
      <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_properties.urdf.xacro"/>  
      
        
      <xacro:macro name="sensor_hokuyo" params="parent">  
        <joint name="laser" type="fixed">  
          <origin xyz="0.10 0 0.425" rpy="0 0.0 0.0" />  
          <parent link="base_link" />  
          <child link="base_laser_link" />  
        joint>  
      
        <link name="base_laser_link">  
          <visual>  
            <geometry>  
              <box size="0.05 0.05 0.05" />  
            geometry>  
            <material name="Black" />  
          visual>  
          <inertial>  
            <mass value="0.000001" />  
            <origin xyz="0 0 0" />  
            <inertia ixx="0.0001" ixy="0.0" ixz="0.0"  
              iyy="0.0001" iyz="0.0"  
              izz="0.0001" />  
          inertial>  
        link>  
      
          
        <turtlebot_sim_2dsensor/>
      xacro:macro>  
robot>  

文件:hokuyo.dae (此文件实际需要下载model,下载方式如下)

cd ~/.gazebo/models
wget -q -R *index.html*,*.tar.gz --no-parent -r -x -nH http://models.gazebosim.org/hokuyo/

将/gazebo/models/hokuyo/meshs 下的 hokuyo.ade 和hokuyo_convex.stl 文件复制到文件 /turtlebot / turtlebot_description / meshes / sensors 下
在Gazebo中使用turtlebot+hokuyo运行gmapping_第1张图片

3.5 在turtlebot_description/urdf/turtlebot_gazebo.urdf.xacro文件下添加配置laser在gazebo下的属性值插件配置。

在文件kinect的配置文件后面添加如下内容来配置laser

<xacro:macro name="turtlebot_sim_2dsensor">
 <gazebo reference="hokuyo_link">
        <sensor type="ray" name="head_hokuyo_sensor">
          <pose>0 0 0 0 0 0pose>
          <visualize>falsevisualize>
          <update_rate>40update_rate>
          <ray>
            <scan>
              <horizontal>
                <samples>720samples>
                <resolution>1resolution>
                <min_angle>-1.570796min_angle>
                <max_angle>1.570796max_angle>
              horizontal>
            scan>
            <range>
              <min>0.10min>
              <max>30.0max>
              <resolution>0.01resolution>
            range>
            <noise>
              <type>gaussiantype>
              
               <mean>0.0mean>
              <stddev>0.01stddev>
            noise>
          ray>
          <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so">
            <topicName>/rrbot/laser/scantopicName>
            <frameName>hokuyo_linkframeName>
          plugin>
        sensor>
      gazebo>
  xacro:macro>
3.6 打开命令窗口输入: gedit ~/.bashrc,
    gedit  ~/.bashrc

添加下述命令到文件尾:

    export  TURTLEBOT_BASE=kobuki  
    export  TURTLEBOT_STACKS=heagons
    export  TURTLEBOT_3D_SENSOR=KinectHokuyo
3.7 在/ turtlebot_apps / turtlebot_navigation / launch / includes / gmapping 文件夹下新建Hokuyo_gmapping.launch.xml。内容复制自kinect_gmapping.launch.xml

将其中的

  <arg name="scan_topic"  default="/scan"/>

改为

  <arg name="scan_topic"  default="/turtlebot/laser/scan"/>

所有文件修改完毕

4 运行

    roslaunch turtlebot_gazebo turtlebot_world.launch
    roslaunch turtlebot_gazebo gmapping_demo.launch 
    roslaunch turtlebot_rviz_launchers view_navigation.launch 
    roslaunch turtlebot_teleop keyboard_teleop.launch 

在Gazebo中使用turtlebot+hokuyo运行gmapping_第2张图片在Gazebo中使用turtlebot+hokuyo运行gmapping_第3张图片

参考文章

1.ROS中给turtlebot加两个传感器:kinect+hokuyo,进行gazebo仿真(一)https://blog.csdn.net/qq_36355662/article/details/61413860
2.ROS中给turtlebot加两个传感器:kinect+hokuyo,进行gazebo仿真 (二)https://blog.csdn.net/qq_36355662/article/details/61616513
3.移动机器人gazebo仿真(2)—导入kinetic和hokuyo激光雷达
https://blog.csdn.net/weixin_37058227/article/details/79517421

你可能感兴趣的:(ros学习)