ROS自学实践(6):ROS进行激光SLAM建图——gmapping

本节主要记录运行ROS自带的SLAM建模包gmapping方法,为后续理解这些代码,建立自己的SLAM算法打下基础。

  • 基于粒子滤波算法
  • 二维栅格地图
  • 需要里程计信息

1.通过命令行安装gmapping包

sudo apt-get install ros-kinetic-slam-gmapping

2.配置gmapping节点

<launch>
    <arg name="scan_topic" default="scan" />

    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
        <param name="odom_frame" value="odom"/>
        <param name="map_update_interval" value="5.0"/>
        <!-- Set maxUrange < actual maximum range of the Laser -->
        <param name="maxRange" value="5.0"/>
        <param name="maxUrange" value="4.5"/>
        <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.01"/>
        <param name="srt" value="0.02"/>
        <param name="str" value="0.01"/>
        <param name="stt" value="0.02"/>
        <param name="linearUpdate" value="0.5"/>
        <param name="angularUpdate" value="0.436"/>
        <param name="temporalUpdate" value="-1.0"/>
        <param name="resampleThreshold" value="0.5"/>
        <param name="particles" value="80"/>
        <param name="xmin" value="-1.0"/>
        <param name="ymin" value="-1.0"/>
        <param name="xmax" value="1.0"/>
        <param name="ymax" value="1.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>

3.运行gazebo模型及gmapping节点

4.打开rviz

添加laserscan、map、robotmodel模型
在这里插入图片描述

5.移动小车,建立模型

在这里插入图片描述

6.保存当前地图

$ rosrun map_server map_saver -f my_gmapping

在这里插入图片描述

7.查看各个节点的坐标转换关系

rosrun rqt_tf_tree rqt_tf_tree

在这里插入图片描述
参考文献:
1.深蓝学院-ROS理论与实践

### SLAM同时定位与地中的中文参考文献 对于希望深入了解SLAM技术并寻找相关中文参考资料的研究者而言,确实存在一定的挑战。尽管该领域已有超过三十年的发展历程,并且国内外都有众多学者参与研究,但高质量的入门级中文材料相对稀缺[^3]。 目前较为推荐的一本专著是由高翔等人撰写的《视觉SLAM十四讲:从理论到实践》,这本书不仅涵盖了基础理论知识,还提供了丰富的实例分析以及开源项目指导,非常适合初学者逐步掌握这一复杂的技术体系。此外,《机器人操作系统(ROS)编程实战》一书也包含了大量有关如何利用ROS框架搭和调试SLAM系统的实用技巧,能够帮助读者更好地理解具体应用场景下的开发流程。 除了书籍之外,在线资源同样不可忽视。例如,“SLAM社区”网站定期更新最新的研究成果和技术动态;而像GitHub这样的平台上也有很多基于不同传感器类型的开源SLAM算法实现可供参考学习。值得注意的是,《SLAM for Dummies》虽然是英文文档,但在国际范围内广受好评,其清晰易懂的内容结构也为非母语使用者提供了一个良好的自学平台。 最后值得一提的是,随着近年来计算机视觉技术和机器学习方法的进步,越来越多的新颖思路被引入到了传统SLAM架构之中,形成了诸如VINS-Mono、ORB-SLAM等一系列高效稳定的解决方案。因此保持对该领域的持续关注,及时跟进前沿进展也是十分必要的[^1]。 ```python # Python代码示例用于说明如何使用Python进行简单的二维坐标转换操作, # 这是在处理SLAM问题时常遇到的任务之一。 import numpy as np def transform_coordinates(x_vehicle_true): """ 将车辆的真实位置[x,y,theta]转成齐次矩阵形式 参数: x_vehicle_true (list): 车辆真实的位置向量 [x, y, theta] 返回: H (numpy.ndarray): 齐次变换矩阵 """ c, s = np.cos(x_vehicle_true[2]), np.sin(x_vehicle_true[2]) R = np.array(((c,-s), (s,c))) t = np.array((x_vehicle_true[:2])).reshape(-1, 1) H = np.block([[R,t],[0,0,1]]) return H if __name__ == "__main__": initial_position = [40, 25, 0] # 初始位置设置为给定值 transformation_matrix = transform_coordinates(initial_position) print(transformation_matrix) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值