简介:

SLAM(Simultaneous Localization and Mapping)SLAM是指通过使用机器人的传感器信息,同时构建地图和定位机器人在该地图中的位置

在ROS中,常用的SLAM算法有gmapping、cartographer等,它们能够利用激光雷达、摄像头等传感器采集的数据,通过算法实现对机器人自身位置和环境地图的估计和构建。

SLAM技术在机器人自主导航和环境感知等方面具有广泛的应用。

slam和amcl的区别

SLAM是一种同时实现机器人定位和环境建图的技术,可以让机器人在未知环境中自主导航。SLAM通常使用传感器数据和机器人运动信息,通过概率和图优化等算法实现地图的创建和机器人姿态的估计。

AMCL是一种机器人定位的技术,它使用蒙特卡罗方法,结合机器人传感器信息和地图,估计机器人在已知环境中的位置。AMCL可以处理不确定性传感器数据、不确定的地图信息以及不确定的环境条件,从而实现较为精确的定位。

因此,SLAM更侧重于在未知环境中同时完成机器人定位和地图建立,而AMCL则更专注于在已知环境中实现机器人定位

介绍gmapping

Gmapping是一种用于ROS的SLAM(Simultaneous Localization and Mapping)算法包,它使用激光雷达传感器数据来实现机器人的定位和环境地图的构建。

其基本思路是根据机器人上搭载的激光雷达传感器,获取周围环境的激光数据,并通过粒子滤波算法将机器人在当前环境中的位置进行估计。

同时,它会将机器人所处环境的地图进行构建,并通过建立栅格地图来描述环境。

具体实现步骤如下:

  1. 将激光雷达数据转换为ROS中的地图数据类型。
  2. 运行gmapping节点,对机器人的位姿进行估计。
  3. 通过激光雷达数据和估计的机器人位姿进行地图构建。
  4. 通过rviz工具对地图进行可视化。

需要注意的是,gmapping算法对机器人硬件设备要求较高,通常需要使用较为精准的激光雷达传感器,并且机器人运动时需要尽可能平稳,避免出现过多噪声和抖动。

同时,gmapping的参数设置也对建图效果影响较大,需要根据具体场景进行调整。

怎么实现slam

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<launch>
  <!-- 启动 Gmapping 节点 -->
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="base_frame" value="base_link" />小车机器人底盘参考系的名称
    <param name="odom_frame" value="odom" />小车机器人里程计参考系的名称
    <param name="map_frame" value="map" />地图参考系的名称
    <param name="delta" value="0.1" />激光雷达运动补偿的时间
    <param name="particles" value="30" />粒子滤波器中的粒子数量
    <param name="map_update_interval" value="5.0" />更新地图的时间间隔
    <param name="maxUrange" value="12.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.1" />小车机器人旋转的角度误差阈值,超过该阈值才进行地图更新
    <param name="temporalUpdate" value="-1.0" />时间更新阈值,超过该阈值才进行地图更新
    <param name="resampleThreshold" value="0.5" />重采样阈值,当粒子数小于该值时会触发重采样
    <param name="particlesGuaranteed" value="0" />是否保证粒子数不低于指定数量
  </node>
 
  <!-- 启动 RViz -->
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find gmapping)/rviz/gmapping.rviz"/>
</launch>

  

Slam建图之后该干什么

  启动导航的文件

 

posted on   黑逍逍  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!



点击右上角即可分享
微信分享提示