如何在ROS中使用slam_gmapping进行SLAM建图

在 ROS 中使用 slam_gmapping 进行 SLAM 建图,需要按照以下步骤操作:

1. 安装相关包

首先确保已安装 ROS 和 gmapping 包:

sudo apt-get install ros-$ROS_DISTRO-gmapping

$ROS_DISTRO替换为你的 ROS 版本(如melodicnoetic)。

2. 准备机器人配置文件

创建或编辑机器人的 URDF/XACRO 文件,确保已正确配置:

  • 激光雷达传感器:需发布/scan话题(类型为sensor_msgs/LaserScan
  • 里程计:需发布/odom话题(类型为nav_msgs/Odometry)或/tf变换
  • 机器人基座坐标系:通常为base_linkbase_footprint

3. 编写启动文件

创建一个 launch 文件(如gmapping.launch),配置并启动 slam_gmapping:

<launch>
  <!-- 启动gmapping节点 -->
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <!-- 配置参数 -->
    <param name="odom_frame" value="odom"/>
    <param name="base_frame" value="base_link"/>
    <param name="map_frame" value="map"/>
    
    <!-- 激光雷达参数 -->
    <param name="scan_topic" value="scan"/>
    <param name="minimumScore" value="500"/>
    <param name="linearUpdate" value="0.2"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="-1.0"/>
    
    <!-- 地图参数 -->
    <param name="map_update_interval" value="5.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="0.5"/>
    <param name="angularUpdate" value="0.436"/>
    <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>
  
  <!-- 启动rviz可视化 -->
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find YOUR_PACKAGE)/rviz/gmapping.rviz"/>
</launch>

4. 创建 Rviz 配置文件

rviz/gmapping.rviz中添加以下显示项:

  • Map:订阅/map话题
  • LaserScan:订阅/scan话题
  • TF:显示坐标系关系

5. 运行 SLAM 建图

启动机器人驱动(发布激光和里程计数据):

roslaunch YOUR_PACKAGE robot.launch

启动 gmapping 建图:

roslaunch YOUR_PACKAGE gmapping.launch

6. 控制机器人移动

使用键盘或手柄控制机器人在环境中移动,gmapping 会实时建图:

roslaunch YOUR_PACKAGE teleop.launch

7. 保存地图

建图完成后,使用以下命令保存地图:

rosrun map_server map_saver -f ~/map

地图将保存为map.pgm(图像)和map.yaml(配置文件)。

参数调优建议

  • 激光雷达参数

    • minimumScore:匹配分数阈值,提高可减少误匹配
    • linearUpdate/angularUpdate:更新频率,减小可提高地图精度
  • 粒子滤波参数

    • particles:粒子数量,环境复杂时需增加
    • resampleThreshold:重采样阈值,减小可减少粒子耗散
  • 地图分辨率

    • delta:地图分辨率,默认 0.05m,精细地图可设为 0.02m

常见问题及解决

  1. 地图漂移严重

    • 检查里程计精度,尝试使用 IMU 辅助
    • 增加particles数量
    • 减小linearUpdate/angularUpdate
  2. 建图速度慢

    • 降低激光扫描频率
    • 减少particles数量
    • 增大linearUpdate/angularUpdate
  3. 激光数据显示异常

    • 检查 TF 树,确保base_linklaser的变换正确
    • 检查激光话题名称和类型

通过以上步骤,你可以在 ROS 中成功使用 slam_gmapping 进行 SLAM 建图。建图效果取决于机器人平台、传感器质量和环境复杂度,可能需要根据实际情况调整参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

start_up_go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值