gmapping matlab实现_gmapping学习

gmapping matlab实现_gmapping学习一、机器人地图机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图1、栅格地图栅格地图栅格地图,在物流信息技术中有所涉猎,其就是构建一个个“小方块”,利用颜色信息来区分的地图的位置信息。在机器人建图中,栅格地图容易构建,表示且保存位置的唯一,对于短路径的规划方便;但栅格地图的路径规划效率不高,空间浪费(栅格的分辨率不依赖于环境的复杂度)并且也需要精确的机器人位置估计,其对于物体识别的人机交互问…

大家好,又见面了,我是你们的朋友全栈君。

一、机器人地图

机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图

1、栅格地图

2f20196f2046?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

栅格地图

栅格地图,在物流信息技术中有所涉猎,其就是构建一个个“小方块”,利用颜色信息来区分的地图的位置信息。在机器人建图中,栅格地图容易构建,表示且保存位置的唯一,对于短路径的规划方便;但栅格地图的路径规划效率不高,空间浪费(栅格的分辨率不依赖于环境的复杂度)并且也需要精确的机器人位置估计,其对于物体识别的人机交互问题效果不好。

2、拓扑地图

是指地图学中一种统计地图,一种保持点与线相对位置关系正确而不一定保持图形形状与面积、距离、方向正确的抽象地图。

2f20196f2046?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

拓扑地图

对于使用gmapping建图,所构建的是二维栅格地图。

二、gmapping与SLAM

对于建图,SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 我们从名字就可以得知,其包含机器人的定位与地图的构建两部分,或者说并发建图与定位。对于这个问题的模型,就是如果将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边移动一边逐步描绘出此环境完全的地图(完全的地图是指不受障碍行进到房间可进入的每个角落,也就是熟知地图的障碍点)。定位与建图相辅相成、互相影响。

首先,构建地图要知道机器人的精确位姿,精确定位又需要给定的地图做参考。先讲已知精确位姿(坐标和朝向)的地图创建,机器人位置已知,通过激光雷达扫描到环境特征,即障碍物距离。可通过机器人坐标和朝向以及障碍物距离计算出障碍物的坐标,采用bresenham直线段扫面算法,障碍物所处的栅格标注为occupy,机器人所处的栅格与障碍物所处的栅格之间画直线,直线所到之处都为free。当然每个栅格并不是简单的非0即1,栅格的占据可用概率表示,若某一个栅格在激光束a扫描下标识为occupy,在激光束b扫描下也标识为occupy,那该栅格的占据概率就变大,反之,则变小。这样,机器人所处的环境就可以通过二维栅格地图来表征。

三、实现gmapping功能包的条件

1、一台安装了ROS并运行虚拟机的笔记本(或者其它的平台)。

对于ROS环境,所需要的ROS功能包有激光雷达的ROS功能包,gmapping功能包,机器人的驱动包,3个功能包都运行起来后需要编译节点连接,从而构建地图。当然,如果运行顺利,还可以插入一个按键,利用ROS包用来控制机器人的移动。

2、一台激光雷达

(未研究)在国内,现阶段激光雷达的效果也不错,能达到运行要求。

对于建图,机器人应该能检测深度信息与里程计信息。

3、以上都是之前学习的内容。但是除此以外,还必要一台机器人或者机器车,如irobot create或者turtlesim,此平台是必须的。

在这之前,除了在仿真环境里运行建图功能以外,一直没考虑到的问题是,是否只有小车才能承载激光雷达建图,用其他的工具是否可以。答案是不可以,因为运行gampping包需要里程计信息,也就是这个包需要知道你的机器人相对于你的开始位置运动了多少,转了多少角度等信息才可用进行地图的构建,里程计的信息是必须的,一般机器人的ROS驱动程序里都会包含,一般的里程计信息由车轮的转速编码器得到。

四、ROS中的gmapping功能包

slam-gmapping节点接收传感器/激光扫描信息并构建地图。可以通过ROS主题或服务检索地图。

1、订阅

gmapping订阅的其实非常简单,只有两种

tf (tf/tfMessage)

(需要进行激光,基准和测距的相关框架转换)

scan (sensor_msgs/LaserScan)

(激光扫描从中创建地图)

2、发布

(1) map_metadata(nav_msgs / MapMetaData)

从此主题获取地图数据,将其锁定并定期更新。

(2) map(nav_msgs / OccupancyGrid)

从此主题获取地图数据,将其锁定并定期更新

(3) 〜entropy (std_msgs / Float64)

机器人姿态分布的熵的估计值(较高的值表示较大的不确定性)。

3、 服务

dynamic_map(nav_msgs / GetMap)

调用此服务以获取地图数据。

五、gmapping参数

gmapping功能包采用粒子滤波算法。(待研究)

2f20196f2046?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

其中关键的参数为:

1. particles (int, default: 30) 这个参数决定gmapping算法中的粒子数,因为gmapping使用的是粒子滤波算法,粒子在不断地迭代更新,所以选取一个合适的粒子数可以让算法在保证比较准确的同时有较高的速度。

2. minimumScore (float, default: 0.0) 最小匹配得分,这个参数很重要,它决定了对激光的一个置信度,越高说明对激光匹配算法的要求越高,激光的匹配也越容易失败而转去使用里程计数据,而设的太低又会使地图中出现大量噪声,所以需要好好调整。

六、launch文件

启动节点:node pkg=”gmapping” type=”slam_gmapping” name=”slam_gmapping” output=”screen”

移动初始值(距离):param name=”lstep” value=”0.05”/

移动初始值(角度):param name=”astep” value=”0.05″/

param name=”lskip” value=”0″/(!–为0,表示所有的激光都处理,尽可能为零,如果计算压力过大,可以改成1–)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149349.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 呕心沥血整理的的嵌入式学习路线[通俗易懂]

    呕心沥血整理的的嵌入式学习路线[通俗易懂]曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关工作。网上看了很多的嵌入式学习路线,有的还凑活,有的纯粹是打广告卖板子,有的东拼西凑,简直是嵌入式劝退指南。大致给你梳理一下我从事的一个嵌入式的课程培训体系吧。基础1.linux基本操作:个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,m

    2022年6月7日
    28
  • 全局路径规划:图搜索算法介绍4(RRT/RRT*)

    全局路径规划:图搜索算法介绍4(RRT/RRT*)本节介绍RRT/RRT*的算法:RRT的基本原理是:我们首先初始化我们的起点,接下来随机撒点,选出一个x_rand,在x_near和x_rand之间选择一个x_new,再在原有的已经存在的x中找到离这个点最近的点将这两个点连接起来,同时这个最近的点也会作为x_new的父节点。RRT算法的伪代码如下:对照着图,再看一次:首先我们随机生成一个点,x_rand然后再tree上面…

    2025年8月6日
    3
  • 文件系统的类型简介「建议收藏」

    文件系统的类型简介「建议收藏」文件系统的类型简介Linux支持多种文件系统类型,包括ext2、ext3、vfat、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem),为各类文件系统提供一个统一的应用编程接口。根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为

    2022年9月15日
    3
  • 软件工程系统设计说明书(软件详细设计说明书模板)

    1引言1.1编写目的该文档在概要设计的基础上,进一步的细化系统结构,展示了软件结构的图标,物理设计、数据结构设计、及算法设计、详细的介绍了系统各个模块是如何实现的,包括涉及到的算法,逻辑流程等。预期的读者:程序员1.2背景a. 待开发软件系统的名称:机房收费系统b. 项目的任务提出者:米新江教授c. 项目的开发者:齐智d. 项目的用户:廊坊师范学院全体在职员工及学生e. 运行该软…

    2022年4月12日
    129
  • 一篇教会你写90%的shell脚本_flash动画脚本怎么写

    一篇教会你写90%的shell脚本_flash动画脚本怎么写如果将运维比作手链,将珍珠比作服务,那么将珍珠串起来的线就是Shell,作为实现Linux系统自动管理以及自动化运维所必备的Shell脚本,其重要性便不言而喻。每一位合格的Linux系统管理员或运维工程师,都应该将熟练编写Shell脚本视为基本技能之一,只有这样才能减少不必要的劳动。但是新人在编写脚本时却只会:#!/bin/bash,所以今天就给大家分享100个经典实用的脚本范例,手把手教你写Shell脚本。这100个脚本范例从基础到进阶均涵盖,有侧重地提高编写能力,结构清晰准确,PDF格式,可

    2022年10月3日
    2
  • 我的fvwm配置

    我的fvwm配置 用了gnome和xfce,还是有些厌了,摆弄了两天fvwm,发现虽然配置起来有点麻烦,但用起来还是它最贴心,而且占资源极少,系统使用过程中内存一直只用了五六十兆。我的鼠标左键坏了,但是通过配置fvwm,只用鼠标右键也可以完成大多数工作了。下面是我的截图和配置文件: #################jiqingsfvwm2rc#2008-07-08############

    2022年10月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号