ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包

目录

  • 1 什么是激光建图
  • 2 激光建图初体验
    • 2.1 gmmapping
    • 3.2 准备工作
    • 3.3 建图
  • 4 自定义建图功能包

1 什么是激光建图

即时定位与建图(Simultaneous localization and mapping, SLAM)主要用于解决机器人在未知环境运动时的定位与地图构建问题。SLAM分为激光SLAM和视觉SLAM两个方向的技术,本专栏主要涉及激光SLAM。

通常,激光SLAM系统通过对环境中获取的点云数据信息的匹配比对,计算激光雷达相对运动的距离和姿态的改变来完成定位

激光SLAM系统主要由

  • 传感器数据:2D或3D激光雷达,用于采集实际环境中的原始数据
  • 里程计:主要是用于确定不同时刻与初始时刻的相对位姿,即不同时间移动物体相对位置的估算
  • 后端:主要用于优化里程计带的累计误差
  • 建图:用于二维或三维地图构建
  • 回环检测:主要约束后端优化方程,完成大幅度的空间累积误差的消除

五个模块构成。

2 激光建图初体验

2.1 gmmapping

gmapping 是ROS开源社区中较为常用且比较成熟的SLAM算法之一,gmapping可以根据移动机器人里程计数据和激光雷达数据来绘制二维的栅格地图——gmapping要求机器人有里程计和激光雷达。

gmapping功能包中的核心节点是slam_gmapping,订阅了

  • tf (tf/tfMessage):用于雷达、底盘与里程计之间的坐标变换
  • scan(sensor_msgs/LaserScan):用于获取SLAM所需的雷达信息

发布了

  • map_metadata(nav_msgs/MapMetaData):地图元数据,该消息会更新

  • map(nav_msgs/OccupancyGrid):地图栅格数据

    以上两项可参考第1节

  • entropy(std_msgs/Float64):机器人姿态分布熵估计,值越大,不确定性越大

3.2 准备工作

安装gmapping,否则会报错RROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping

sudo apt install ros-noetic-gmapping

安装dwa-local-planner,否则会报错ROS Failed to create the dwa_local_planner/DWAPlannerROS planner

sudo apt install ros-noetic-dwa-local-planner

接下来按下面步骤依次输入终端命令

  • 启动gazebo环境
    roslaunch turtlebot3_gazebo turtlebot3_world.launch
    
  • 启动激光雷达SLAM功能包(主要是运行各个传感器)
    roslaunch turtlebot3_slam turtlebot3_slam.launch
    
    ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包_第1张图片

3.3 建图

下面提供两种建图方法:

  • 键盘控制

    启动键盘控制

    roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
    

    控制机器人走完地图,Rviz中显示较完整的地图为止

    ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包_第2张图片

  • 自主建图

    如果不想键盘控制,也可以自主建图

    roslaunch turtlebot3_gazebo turtlebot3_simulation.launch
    

建图结束后按第1节的方式保存地图。

4 自定义建图功能包

这里采用ROS从入门到精通2-2:机器人3D物理仿真——Gazebo搭建的场景。类比turtlebot3_world.launch的结构,将其中的地图改成自己的场景即可,核心部分如下所示


<arg name="world" default="$(find slam_demo)/worlds/warehouse.world" />


<include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(arg world)"/>
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/>
    <arg name="recording" value="false"/>
    <arg name="debug" value="false"/>
include>


<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />


<node pkg="rviz" type="rviz" name="rviz" args="-d $(find slam_demo)/rviz/navigation.rviz" output="screen"/>


<node name="key_control" pkg="slam_demo" type="key_control" respawn="false" output="screen"/>


<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="log">
  <param name="maxRange" value="10"/>
  <param name="xmin" value="-12"/>
  <param name="ymin" value="-12"/>
  <param name="xmax" value="12"/>
  <param name="ymax" value="12"/>
  <param name="delta" value="0.05"/>
  <param name="particles" value="4"/>
  <param name="temporalUpdate" value="1.0"/>
  <param name="angularUpdate" value="0.3"/>
  <param name="linearUpdate" value="0.3"/>
  <param name="map_update_interval" value="2.0"/>
node>

ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包_第3张图片

本文的完整工程代码联系下方博主名片获取


更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系

你可能感兴趣的:(ROS从入门到精通,人工智能,自动驾驶,ROS,机器人,车载系统)