一、简介

1.Gmapping算法

GMapping是一种用于建立二维地图的概率算法,它是一种基于激光测距仪数据的实时建图方法。GMapping最初是由Giorgio Grisetti等人于2005年提出的,是开源机器人操作系统ROS(Robot Operating System)中的一个常用建图算法。 

GMapping利用机器人通过激光测距仪获取的传感器数据,如激光束的测量距离和角度信息,来估计机器人在环境中的姿态以及环境的地图。它采用了基于粒子滤波器的概率算法,通过对机器人的运动和传感器测量进行融合和更新,来实时估计机器人所处位置的概率分布,并构建环境的地图。

GMapping的核心思想是使用一组粒子来表示机器人的可能位置,并根据传感器数据对这些粒子进行权重更新和重采样。通过迭代更新和重采样的过程,GMapping能够在机器人运动和传感器测量的基础上,逐步减小粒子云的方差,从而提高对机器人位置的估计精度。

GMapping算法在实时性和准确性方面都具有良好的表现。它广泛应用于机器人导航、SLAM(Simultaneous Localization and Mapping)和自主探索等领域。通过GMapping算法,机器人可以在运动过程中实时构建和更新地图,从而实现自主感知和导航能力。

2.Gazebo

Gazebo是一种开源的多机器人仿真环境,用于模拟和测试机器人系统的行为和性能。它是机器人操作系统(ROS)的一部分,提供了一个三维虚拟环境,可以模拟机器人、传感器、物体和环境的交互。

Gazebo使用物理引擎来模拟物体的运动和碰撞,可以模拟真实世界中的物理效应,如重力、摩擦和惯性。它支持多种类型的传感器模拟,包括激光雷达、摄像头、深度相机等,使开发者能够在虚拟环境中测试和验证自己的算法和系统。

Gazebo提供了一个可视化界面,可以实时显示仿真场景,并提供交互式控制和调试工具。开发者可以通过ROS接口与Gazebo进行通信,将其与其他ROS软件包集成,实现机器人的控制、感知和导航。此外,Gazebo还提供了丰富的模型库,包括各种类型的机器人、传感器和环境模型,使用户能够快速构建复杂的仿真场景。

通过在Gazebo中进行仿真,开发者可以在不同的场景和条件下测试和验证他们的机器人系统。他们可以评估机器人的导航性能、感知算法的准确性,甚至进行多机器人协同操作的仿真实验。Gazebo的灵活性和可扩展性使得它成为机器人研究和开发的重要工具之一。

二、利用Gmapping建图

1.准备工作

 在利用gmapping算法建图之前,我们还需要做一些准备工作。首先先明确Gmapping的节点名称以及他订阅以及发布的话题(topic)。我们可以利用ros.indx这个网站搜索Gmapping,进入wiki页面查询。

其次我们需要用到一些仿真环境以及按键控制功能可以通过githu上面的开源项目wpr_simulation获得。具体获取与配置方法如下:

cd ~/catkin_ws/src
git clone https://github.com/6-robot/wpr_simulation.git
cd ~/catkin_ws/src/wpr_simulation/scripts
./install_for_noetic.sh

2.正式建图

第一步:打开Gazebo仿真环境

roslaunch wpr_simulation wpb_stage_robocup.launch

第二步:运行ros自带的Gmapping算法

rosrun gmapping slam_gmapping

第三步:打开可视化界面rviz

rviz

对可视化界面进行配置。首先点击左下角Add,将机器人模型加入rviz。然后添加LaserScan并选择话题名称/scan。最后添加地图Map,选择话题/map。

第四步:利用键盘控制机器人运动,开始建图

rosrun wpr_simulation keyboard_vel_ctrl

3.结果展示

图一 Gazebo仿真环境

图二 rviz界面所建立房间地图

在rivz界面显示的地图中,黑色表示障碍物,灰白色表示没有障碍物的地区,灰绿色区域表示未知。所以可以看出,通过Gmapping算法所建立的地图与仿真环境重合。

三、拓展

在上文我们可以发现在使用Gmapping算法建图时,需要打开四个终端,输入四条不同的指令。于是在此处,我们可以使用一个launch文件同时打开四条指令,具体代码如下:

cd ~/catkin_ws/src
catkin_creat_pkg launch_pkg roscpp rospy

然后在launch_pkg创建一个后缀名为launch的文件Gmapping.launch,在里面添加以下代码:

<launch>
    <include file="$(find wpr_simulation)/launch/wpb_stage_robocup.launch"/>
    <node pkg="gampping" type="slam_gampping" name="slam_gampping"/>
    <node pkg="rviz" type="rviz" name="rviz"/>
    <node pkg="wpr_simulation" type="keyboard_vel_ctrl" name="keyboard_vel_cmd"/>
</launch>

以后我们就可以通过一条指令就可以替代上文的四条指令:

roslaunch launch_pkg Gmapping.launch

除此之外,Gmapping还提供了许多可以自行设置的参数,具体详情可以查看ros.index。具体参数设置方法可参照以下代码:

<launch>
    <include file="$(find wpr_simulation)/launch/wpb_stage_robocup.launch"/>
    <node pkg="gampping" type="slam_gampping" name="slam_gampping">
        <param name="map_update_interval" value="1.0"/>
        <param name="throttle_scans" value="2"/>
        <param name="lasamplestep" value="0.01"/>
    </node>
    <node pkg="rviz" type="rviz" name="rviz"/>
    <node pkg="wpr_simulation" type="keyboard_vel_ctrl" name="keyboard_vel_cmd"/>
</launch>

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐