【ROS机器人】 --- 2-2.slam建图保存

“山无拦 海无遮!”

  • 前期准备
  • 建图
    • I、运行机器人(gazebo)
    • II、建图文件编写
    • III、配置rviz并保存
      • 1.添加机器人和雷达
      • 2.添加TF
      • 3.地图map
      • 4.保存配置
    • IV、控制运动建图
    • V、保存地图
      • 1. map_server
      • 2. 保存查看
    • VI、发布地图话题
  • 说明

【仿真】:借用之前搭建好摄像头、激光雷达、深度相机等传感器的模型,完成本节slam建图,保存内容。
实现:

  1. 打开gazebo和模型文件(car_move.launch)
  2. 编写gampping运行并打开rviz
  3. 完成rviz配置,启动机器人控制,实现slam建图
  4. 使用map_server保存文件(launch文件)

前期准备

  1. 延用工作空间test2_ws;
  2. 功能包demo5_navigation存放代码;
  3. slam-gampping和rviz代码在demo5_navigation/launch/nav1_slam.launch;
  4. 保存地图的代码在demo5_navigation/launch/nav1_save_map.launch;
  5. rviz配置在demo5_navigation/config/rviz/nav1.rviz;
  6. 自动生成的地图文件保存在demo5_navigation/map文件夹。

建图

首先sudo apt安装gmapping map_server move_base 。
然后新建功能包demo5_navigation,依赖gmapping map_server amcl move_base。

I、运行机器人(gazebo)

执行之前的代码:

roslaunch demo4_urdf_gazebo car_move.launch

作用是在gazebo中打开具有各个传感器功能的机器人。如下图:
【ROS机器人】 --- 2-2.slam建图保存_第1张图片

II、建图文件编写

slam-gmapping。

是一个launch文件,复制官网代码修改, 官网链接
nav1_slam.launch修改之后如下(已经加入了rviz文件打开和配置加载):

<launch>
        
        <param name="use_sim_time" value="true"/>
        <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
        
        <remap from="scan" to="scan"/>
                
                
                <param name="base_frame"    value="base_footprint" />
                <param name="map_frame"    value="map" />
                <param name="odom_frame"    value="odom" />

                <param name="map_update_interval" value="5.0"/>
                <param name="maxUrange" value="16.0"/>
                <param name="sigma" value="0.05"/>
                <param name="kernelSize" value="1"/>
                <param name="lstep" value="0.05"/>
                <param name="astep" value="0.05"/>
                <param name="iterations" value="5"/>
                <param name="lsigma" value="0.075"/>
                <param name="ogain" value="3.0"/>
                <param name="lskip" value="0"/>
                <param name="srr" value="0.1"/>
                <param name="srt" value="0.2"/>
                <param name="str" value="0.1"/>
                <param name="stt" value="0.2"/>
                <param name="linearUpdate" value="1.0"/>
                <param name="angularUpdate" value="0.5"/>
                <param name="temporalUpdate" value="3.0"/>
                <param name="resampleThreshold" value="0.5"/>
                <param name="particles" value="30"/>
                <param name="xmin" value="-50.0"/>
                <param name="ymin" value="-50.0"/>
                <param name="xmax" value="50.0"/>
                <param name="ymax" value="50.0"/>
                <param name="delta" value="0.05"/>
                <param name="llsamplerange" value="0.01"/>
                <param name="llsamplestep" value="0.01"/>
                <param name="lasamplerange" value="0.005"/>
                <param name="lasamplestep" value="0.005"/>
        node>

        
        
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find demo5_navigation)/config/rviz/nav1.rviz"  />
launch>

运行该文件

roslaunch demo5_navigation nav1_slam.launch

此时打开了空的rviz,如下:
【ROS机器人】 --- 2-2.slam建图保存_第2张图片

III、配置rviz并保存

1.添加机器人和雷达

添加robotmodel,laserscan(话题:/scan,size(m)加粗线条,提升查看效果)
【ROS机器人】 --- 2-2.slam建图保存_第3张图片

2.添加TF

这里打开frames,我们主要观察关键的三个坐标系:base_footprint、map、odom。将其余注释:
【ROS机器人】 --- 2-2.slam建图保存_第4张图片

3.地图map

添加map,话题订阅/map。

【ROS机器人】 --- 2-2.slam建图保存_第5张图片

4.保存配置

CTR+shift+s,另存为demo5_navigation/config/rviz/nav1.rviz

IV、控制运动建图

控制台键入命令:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py 

然后控制机器人将全图跑完,根据配置可知rviz中每5s刷新一次地图。直到地图完全跑完(建完)。

V、保存地图

1. map_server

位置:demo5_navigation/launch/nav1_save_map.launch
编写launch文件如下:

<launch>
    <arg name="filename" value="$(find demo5_navigation)/map/nav" />
    <node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
launch>
  • 第一行参数是地图保存到的文件夹。

2. 保存查看

运行:

roslaunch demo5_navigation nav1_save_map.launch

运行/保存完毕控制台会出现done字样。

此时可以看到/map中多了两个文件nav.pgm和nav.yaml,打开一个可执行文件nav.pam(图片)如下
【ROS机器人】 --- 2-2.slam建图保存_第6张图片

对于这两个文件的具体解释:参考.

VI、发布地图话题

编写launch文件,来查看发布我们刚才保存的map。此时可以在rviz中添加map组件查看地图。
pub_map.launch源码:

<launch>
    
    <node name="map_server" pkg="map_server" type="map_server" args="$(find demo5_navigation)/map/nav.yaml"/>
launch>

说明

对机器人的优化主要体现在,slam_gampping文件中的参数的更改。详见官网。

你可能感兴趣的:(#,ROS实用,#,ROS进阶程序,自动驾驶,c++,ubuntu,linux,嵌入式)