当前位置: 首页 > news >正文

ROS实践(四)机器人SLAM建图(gmapping)

目录

一、SLAM技术

二、常用工具和传感器

 三、相关功能包

1. gmapping建图功能包

2. map_server

四、SLAM 建图实验

1. 配置gmapping(launch文件)

2. 启动机器人仿真(含机器人以及传感器)

3. 运行gmapping节点

4. 启动rviz可视化工具

5. 保存地图文件


一、SLAM技术

         地图构建(Mapping)是机器人在运动过程中逐步建立和更新其所处环境的地图。

        (Simultaneous Localization and Mapping)即同时定位与地图构建,是一种概念,旨在让机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的环境特征定位自身位置和姿态,再根据自身位置构建周围环境的增量式地图,从而达到同时定位和地图构建的目的。

        SLAM技术使用相机、激光雷达、惯性测量单元等传感器来收集环境信息,然后用算法将这些信息融合起来,以确定设备在未知环境中的位置,并构建一张环境地图。

二、常用工具和传感器

1. 激光雷达(LiDAR)

         通过发射激光束并测量返回时间来计算与障碍物的距离,能够提供高精度的2D或3D环境建模,广泛用于SLAM(同步定位与地图构建)、路径规划、避障、目标跟踪等。2D LiDAR常用于室内机器人,3D LiDAR适用于自动驾驶、无人机测绘等复杂环境,常见型号包括Velodyne VLP-16、Hokuyo UST-10LX等。

2. RGBD相机

        结合RGB和彩色图像和深度信息,提供环境的3D感知能力,可用于地图构建、目标识别、障碍物检测、人脸识别、手势控制等。常见的RGBD相机有Intel RealSense、Microsoft Kinect、Orbbec Astra等,广泛应用于机器人视觉、AR/VR、自动化检测等领域。

3. 超声波传感器

        通过发射超声波并测量回波时间计算与障碍物的距离,适用于短距离障碍物检测,常用于自动泊车、无人机避障、水下探测、工业自动化等领域。其成本低、体积小,但受噪声和材质影响较大,常见型号如HC-SR04、MaxBotix MB1040。

4. IMU(惯性测量单元)

         由加速度计、陀螺仪(有时包含磁力计)组成,用于测量机器人姿态、角速度、加速度等信息,常用于惯性导航、姿态估计、运动跟踪等。IMU可单独使用,也可与GPS、LiDAR、里程计融合以提高定位精度,常见型号有MPU6050、BNO055、VectorNav VN-100等。

5. 轮式里程计(Odometry)

        通过测量轮子的旋转角度计算机器人在平面上的运动轨迹,适用于短时间内的相对位置估计,但存在累积误差,因此常与IMU、LiDAR、视觉SLAM结合使用以提高定位精度,广泛应用于移动机器人、自主导航、AGV(自动导引车)等。

 三、相关功能包

1. gmapping建图功能包

  gmapping 是一种基于粒子滤波算法的 SLAM工具,它可以帮助机器人在未知环境中创建地图的同时定位自己。

        具体来说,gmapping 是 ROS 中实现激光SLAM的一个软件包,它结合了激光扫描器数据和机器人运动信息,实时生成并更新地图。常用在需要通过激光雷达进行建图的机器人系统中,尤其适用于移动机器人、无人车等场景。

  gmapping 包含了完成 SLAM所需的所有核心算法,它会自动利用激光扫描数据和机器人的运动信息来进行地图构建和位置估算。只要你正确配置了相关参数和话题,就可以通过启动 gmapping 节点来实现SLAM功能,而不必从头实现复杂的 SLAM 算法。

(1)下载

  gmapping 并不是 ROS 系统自带的核心组件,而是一个额外的 ROS 软件包。通常在使用 ROS 时,gmapping 需要单独安装并配置。

sudo apt-get install ros-<ros_version>-gmapping

其中,<ros_version> 需要替换为你使用的 ROS 版本名称(如 melodic、noetic 等)。

(2)如何使用

        为了使用gmapping功能包,需要配置相应的参数,如激光雷达的topic、里程计信息、地图分辨率等。这些参数通常通过launch文件或命令行参数进行设置。在运行gmapping节点时,它会订阅指定的传感器数据和里程计信息,并输出构建的地图数据。

2. map_server

  • 定义:map_server是ROS中的一个功能包,用于加载和保存地图。
  • 功能:在启动时,map_server可以加载一个地图(如.pgm格式的地图),并通过ROS话题和服务提供地图数据。
  • 加载地图:使用rosrun map_server map_server map_file.yaml命令可以启动map_server节点,其中map_file.yaml是描述地图的YAML文件。
  • 保存地图:而rosrun map_server map_saver -f map命令用于保存当前地图数据到文件中。

四、SLAM 建图实验

1. 配置gmapping(launch文件)

         功能:下面这段代码的主要功能是启动 gmapping 节点,使用激光雷达和机器人自身的运动数据来进行 SLAM(同步定位与地图构建)。具体来说,它通过激光扫描获取环境信息,并将这些信息转化为地图,同时估算机器人在该地图中的位置。通过 SLAM,机器人可以在没有事先地图的情况下自动探索并创建自己的环境地图。

         要完成的工作:我们只需要配置好机器人坐标系和激光数据的相关参数。启动 gmapping 节点。让机器人在环境中移动,gmapping 会实时构建地图并定位机器人,它会帮你自动完成 SLAM 的工作。

        目录: 在功能包的launch目录下编写gmapping_slam.launch文件,如下所示:

<launch><arg name="set_base_frame" default="base_footprint"/><arg name="set_odom_frame" default="odom"/><arg name="set_map_frame"  default="map"/><arg name="scan_topic" default="/scan" /><arg name="simulation" default= "false"/> <param name="/use_sim_time" value="$(arg simulation)" />  <!-- Gmapping 启动 gmapping 节点进行SLAM建图 --> <node pkg="gmapping" type="slam_gmapping" name="gmapping" output="screen"><!-- 设置基本坐标框架 --><param name="base_frame" value="$(arg set_base_frame)"/><!-- 设置里程计坐标框架 --><param name="odom_frame" value="$(arg set_odom_frame)"/><!-- 设置地图坐标框架 --><param name="map_frame"  value="$(arg set_map_frame)"/><!-- 设置地图更新的时间间隔(单位:秒) --><param name="map_update_interval" value="2.0"/><!-- 设置最大激光扫描距离 --><param name="maxUrange" 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="minimumScore" value="50"/><!-- 设置机器人运动噪声的标准差 --><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.2"/><!-- 设置时间更新的阈值 --><param name="temporalUpdate" value="0.5"/><!-- 设置重采样的阈值 --><param name="resampleThreshold" value="0.5"/><!-- 设置粒子滤波的粒子数 --><param name="particles" value="100"/><!-- 设置地图边界 --><param name="xmin" value="-10.0"/><param name="ymin" value="-10.0"/><param name="xmax" value="10.0"/><param name="ymax" value="10.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"/><!-- 将扫描话题重映射为传入的扫描话题名称 --><remap from="scan" to="$(arg scan_topic)"/></node>
</launch>

代码中做了以下几件事:

        ①设置坐标系:定义了机器人、里程计(机器人位置数据)、和地图之间的坐标关系。

        ②配置 SLAM 参数:包括地图更新频率、激光扫描最大范围、噪声标准差、地图分辨率等。这些参数影响到地图的精度、更新速度以及机器人对环境的感知。

        ③设置激光传感器的行为:通过设置激光扫描的步长、增益、采样范围等来调整扫描的精度。

        ④重映射扫描话题:将接收到的激光数据从指定的 scan_topic 输入到 slam_gmapping,用于创建地图。

2. 启动机器人仿真(含机器人以及传感器)

ROS实践(三)xacro文件基础(urdf扩展)第4章节内容。https://blog.csdn.net/qq_48361010/article/details/146174461?spm=1001.2014.3001.5501详情查看上文。

3. 运行gmapping节点

        使用代码:roslaunch my_package gmapping_slam.launch simulation:=true 这里会发布一个/map的话题,用于后面rviz来订阅这个话题显示地图。

4. 启动rviz可视化工具

使用命令:rviz启动。启动完成后需要添加以下组件。

5. 保存地图文件

        启动rviz仿真后,通过:rosrun teleop_twist_keyboard teleop_twist_keyboard.py遥控节点来使得机器人运动去扫描建图。

        完成建图以后使用命令:roscd my_package/map/ && rosrun map_server map_saver -f my_map,来保存当前地图为my_map,并保存到map文件夹中。保存后退出所有进程即可。   这样激光雷达建图就完成了,保存了地图的数据和照片。

     


http://www.mrgr.cn/news/94254.html

相关文章:

  • 推理框架SGLang安装与调试
  • LVS + Keepalived 高可用集群
  • 《YOLOE: Real-Time Seeing Anything》论文速览翻译,支持文本提示,视觉提示等开放世界检测算法!
  • Java常见的并发设计模式
  • maven wrapper的使用
  • 爬虫中一些有用的用法
  • Qt:绘图API
  • 【Pytorch Transformers Fine-tune】使用BERT进行情感分类任务微调
  • Selenium 自动化测试学习总结
  • 本地Git仓库搭建(DevStar)与Git基本命令
  • MySQL的安装与建表
  • PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别
  • java中小型公司面试预习资料(四):微服务架构
  • Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能
  • Visual Studio 安装及使用教程(Windows)【安装】
  • JavaScript_Day2
  • 江科大51单片机笔记【16】AD/DA(上)
  • 环境配置 | 5分钟极简Git入门:从零上手版本控制
  • IP 地址
  • ROS实践(四)机器人建图(gmapping)