移动机器人gazebo仿真(3)—替换地图并建图

参考文章:

http://blog.csdn.net/wilylcyu/article/details/51754495

按照参考文章建立好地图


然后根据如下步骤:

(1)路径   .gazebo/models/robot_sim1 下


(2)在/usr/share/gazebo-7/worlds目录下创建robot_sim1.world文件,添加以下文本:

<?xml version="1.0" ?>
<sdf version="1.5">
  <world name="default">
    <include>
      <uri>model://ground_plane</uri>
    </include>
    <include>
      <uri>model://sun</uri>
    </include>
    <include>
      <uri>model://robot_sim1</uri>
    </include>
  </world>
</sdf>

这里可能需要更改worlds文件夹的权限:

$ sudo su
$ chmod -R 777 文件夹路径
(3)在gazebo_ros/launch 目录下创建名为  robot_sim1 .launch的文件,添加如下文本:
<?xml version="1.0"?>
<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/robot_sim1.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"/>
    <arg name="debug" value="false"/>
  </include>

</launch>

最后修改上篇博客ros仿真建图(2)中新建的文件 my_world_hk.launch,将empty_world.launch替换为robot_sim1.launch

如下:(其中remap的那句语句可以修改成为/turtlebot/laser/scan 这样数据就是hokuyo激光的数据了)

<launch>
  <arg name="world_file"  default="$(env TURTLEBOT_GAZEBO_WORLD_FILE)"/>

  <arg name="base"      value="$(optenv TURTLEBOT_BASE kobuki)"/> <!-- create, roomba -->
  <arg name="battery"   value="$(optenv TURTLEBOT_BATTERY /proc/acpi/battery/BAT0)"/>  <!-- /proc/acpi/battery/BAT0 --> 
  <arg name="gui"    default="true"/>
  <arg name="stacks"    value="$(optenv TURTLEBOT_STACKS hexagons)"/>  <!-- circles, hexagons --> 
  <!--arg name="3d_sensor" value="$(optenv TURTLEBOT_3D_SENSOR kinect)"/-->  <!-- kinect, asus_xtion_pro --> 

<arg name="3d_sensor" value="$(optenv TURTLEBOT_3D_SENSOR KinectHokuyo)"/>  <!-- kinect, asus_xtion_pro -->


<!--include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="use_sim_time" value="true"/>
    <arg name="debug" value="false"/>
    <arg name="gui" value="$(arg gui)" />
    <arg name="world_name" value="$(arg world_file)"/>
  </include-->



  <include file="$(find gazebo_ros)/launch/robot_sim1.launch">
    </include>



  <!--include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml"-->
 <include file="/home/jk/ros_sim/src/robot_hokuyo_kinect/launch/include/$(arg base).launch.xml">
   <arg name="base" value="$(arg base)"/>
    <arg name="stacks" value="$(arg stacks)"/>
    <arg name="3d_sensor" value="$(arg 3d_sensor)"/>
  </include>
  
  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
    <param name="publish_frequency" type="double" value="30.0" />
  </node>
  
  <!-- Fake laser -->
  <node pkg="nodelet" type="nodelet" name="laserscan_nodelet_manager" args="manager"/>
  <node pkg="nodelet" type="nodelet" name="depthimage_to_laserscan"
        args="load depthimage_to_laserscan/DepthImageToLaserScanNodelet laserscan_nodelet_manager">
    <param name="scan_height" value="10"/>
    <param name="output_frame_id" value="/camera_depth_frame"/>
    <param name="range_min" value="0.45"/>
    <remap from="image" to="/camera/depth/image_raw"/>
    <remap from="scan" to="/scan"/>
  </node>
</launch>

保存后运行

roslaunch robot_hokuyo_kinect my_world_hk.launch 

发现turtlebot位置不对,(后来发现这只是特殊情况,再次重建地图就没有该问题了)


修改turtlebot的pose(位姿)


最后就可以根据前两篇博客使用gazeon和rviz进行建图了

roslaunch robot_hokuyo_kinect my_world_hk.launch   
roslaunch robot_hokuyo_kinect gmapping_demo.launch   
roslaunch turtlebot_rviz_launchers view_navigation.launch    
roslaunch turtlebot_teleop keyboard_teleop.launch  

使用键盘控制机器人移动,建立地图如下:



之后使用map_server保存地图

sudo apt-get install ros-kinetic-map-server
rosrun map_server map_saver -f /地址/mymap



猜你喜欢

转载自blog.csdn.net/weixin_37058227/article/details/79528091