【SLAM】ROS平台下三种自主探索算法总结

news2024/11/24 19:58:49

目录

前言

一、frontier_exploration

二、explorate_lite

三、rrt_exploration

总结


前言

探索是指当机器人处于一个完全未知或部分已知环境中,通过一定的方法,在合理的时间内,尽可能多的获得周围环境的完整信息和自身的精确定位,以便于实现机器人在该环境中的导航,并实现后续工作任务。探索是移动机器人实现自主的关键功能,是移动机器人的一项重要任务,也是一个重要的研究领域。在许多潜在的应用中,建筑物、洞穴、隧道和矿山内的搜索操作有时是极其危险的活动。使用自主机器人在复杂环境中执行这些任务,降低了人类执行这些任务的风险。

自主探索是我本科毕业论文中第一大部分内容,在我的论文中首先对自主探索算法进行了综述,然后针对特定的实验环境,对自主探索算法进行了改善,本文主要讲解ROS平台下三种常用的自主探索算法原理。


一、frontier_exploration

frontier_exploration是基于边界的自主探索算法,边界定义为已知空间和未知空间之间的区域(Frontiers are regions on the boundary between open space and unexplored space),在原文献中,作者通过BFS(深度优先搜索)算法从机器人当前位置搜索边界。

图a是在栅格地图中检测到了边界,图b是提取出来的属于边界的栅格点,然后使用一种“滤波”方法,滤除一些过小的边界(因为这些边界往往不需要特意去探索,机器人在行进过程中会构建出这里的地图,或者它小到不影响导航和后续功能),一般这个阈值可以取机器人的自身尺寸(原文中是这样的),就得到了图c中的边界区域。

这一系列边界区域,需要通过某种方法选择最合适的一个作为首先要前往的一个边界区域,在frontier_exploration算法中仅选择距离机器人当前位置(欧氏距离)最近的一个作为首先要前往的目标。

在文献[exploration_tech_comparison]中提出了选择这些目标点的方法,根据作者的结论,在单机器人探索中,Nearest Frontier Approach(选择最近点)和Behaviour-Based Coordinated Approach(基于行为,融合了距离最近、避开障碍物、避开其他机器人三个惩罚项)两个方法使用的时间相近都是最短,其中Nearest Frontier Approach用时更短。

在地图质量方面,使用Hybrid Integrated Coordinated Approach(该方法设计比较复杂,融合了SLAM算法,提高了定位精度,会在系统中评估并存储精度较高的上一次位姿,当机器人定位精度下降时,会回溯上一次精度较高的位姿,导致耗时严重)它的耗时严重超过其他方法,虽然总的来说,减少探索时间的目标和良好的地图质量是相互冲突的,但我认为综合来看这种方法是不实用的,而地图精度仅次于Hybrid Integrated Coordinated Approach的算法是Nearest Frontier Approach和 Cost-Utility Approach,分为成本函数(Cost)和效用函数(Utility),采用加权的思想,作者给出的表达式如下:

U(a)表示当前往这个边界点a时,能扩大多少未知区域,以a为圆心,以一定长度Rs为半径(一般设置为传感器探测半径)的圆覆盖的未知栅格。

C(a) 表示当前位置到边界点的距离

目前来看选择距离最近的方法虽然很呆很简单,但确实好用。

另外,一个边界区域由很多栅格点组成,这时就需要通过一些算法选择目标边界点,作者在源代码中列举了三种常用方法:closest(BFS第一个检测到的点)、middle(中点)、centroid(质心)。-frontier_search.cpp的buildNewFrontier()函数中

另外,可应采用插件的形式管理自主探索的算法,在源代码中提供了两个example插件,通过Base_Plugin接口类将自主探索算法集成到Exploration_Server中,便于修改,算法流程图如下所示。

二、explorate_lite

explorate_lite的代码是基于frontier_exploration16.04版本写的,但是经过作者几次更新代码有了很大的改进。

(1)它添加了一个frontierCost函数用来判断计算边界区域的代价,对 到边界的距离 + 边界大小 (+前沿方向分量) 几个项加权后,排序,选择代价最小的边界的质心作为目标点。

(2)在frontier_exploration中对于边界点Frontier的定义放在了Frontier.msg消息里面,而它定义为结构体形式,其中也包含了更多信息。

(3)它添加了tf校验机制,确保了 map_frame->robot_base_frame 的通畅

(4)添加了ros::console记录器记录Debug信息

(5)添加了更多接口方便通过launch文件对这些参数进行修改

(6)这个修改的优劣有待讨论:explorate_lite在发布目标边界点时,使用的是定时发布,如下图,当机器人选择了一个当前的“最近点”时,行进过程中遇到更近的会不会换一个目标点,这样会增加路径重复率,也会造成机器人的频繁起停。

 (7)设置了容忍时间,超时会把这个点加到黑名单中,可以类似仿照限定程序总运行时间

explore_lite程序的框图如下:

三、rrt_exploration

rrt_exploration分为四个主要部分:Global Frontier Detector、Local Frontier Detector、Filter、Assigner。

(1)Global Frontier Detector、Local Frontier:使用全局和局部边缘检测点去选择下一步应该探索的边界点,生长的RRT数到达的点如果位于未知区域,则这个的被认为是边界点,全局边缘检测是一种从初始位置开始一直执行的RRT搜素,全局RRT树不重置,随着时间不断生长、细化,主要是防止机器人错过在地图上探索小角落的机会,也确保原理机器人当前位置的点被检测和探索[rrt_exploration],而局部边缘检测是以机器人当前位置为起始点拓展的RRT树,这个局部树搜索到一个边界点后会重置树。

这里存在一些问题:

  1. 全局RRT树的生长速度随着树的生长而变慢
  2. RRT是一种渐进最优的算法,理论上时间足够长可以覆盖整个地图,但其具有随机性,有限时间内很可能无法完全探测所有未知区域,特别是实际应用中往往是有时间要求的
  3. RRT本身的生长问题:当一个分支无法生长延伸时,需要回溯到之前的未知,这会增加搜索时间和重复区域
  4. 如下图,RRT具有随机性,可能在机器人前往一个目前“最优”的目标点时,突然发现了一个更好的点,机器人需要折返,尽管这种可能性很小,但可能会出现这种情况,会增加时间和重复度,而frontier_exploration这种算法往往有更好的倾向性和启发性,而且在探索过程中使用了BFS虽然时间较慢(我认为是微小的),但是可以搜索到所有可能的边界,并通过权重合理选择探索顺序。

RRT源代码中提供了使用opencv进行边界检测的方法作为比较,将使用cv2.findContours()方法检测出来的边界序列求质心后打包发送,发送给Filter滤波后再发送给Assigner,在Assigner中求出最终的得分,选择得分高的节点发送个Move_base节点,这就出现一个情况在每一次检测节点轮询,目标点是不断发生变化的(很具有随机性),也就是说有可能还没到当前发布的位置时,随着地图更新,又会产生新的目标点,如果向一个方向即将(还没)探索完(这时它的信息增益I很小了),还是可能会被其他位置的目标边界点吸引,这样会增加重复性和探索时间,及时作者加了滞回增益h,也不能避免发生这种情况。

(2)Filter

对搜索到的点进行聚类,形成边界

(3)Assigner

从现有的目标点中根据导航成本(N)和信息增益(I)两项选择机器人下一步需要前往的目标点

可以借鉴的一点是RRT选择点的公式,在信息增益I这一项前加了一个滞回增益项h,h也跟距离有关,防止一个很远但I过大的边界点把机器人吸引过去。

RRT相较于frontier_exploration的优势就是速度快,但作者也在文献中实验指出,探索时间比基于图像处理的时间稍长,但是优势在于可以方便的拓展到三维。


总结

最后,就是我经过看论文和阅读源代码,分析总结的自主探索算法可以改进的点,通过我阅读一些文献,我发现对算法的改进确实就是从这几个方面入手的。

我还写了一篇文献综述,对以及发布的文献总使用的改进方法和原理进行了阐述和总结,之后看看发不发出来吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试支持

自动化测试支持 自动化测试是现代软件开发中不可或缺的一环。它可以帮助开发团队快速、精确地检测软件中的缺陷,提高软件质量和开发效率。 自动化测试可以在代码变更频繁、测试用例数庞大时,显著地减少测试时间和工作量。相对于手动测试,自动…

集权设施攻防兵法:实战攻防之堡垒机篇

一、黑客视角下的堡垒机 堡垒机是一种网络安全设备,用于保护和管理企业内部网络与外部网络之间的访问。它作为一种中间节点,提供安全的访问控制和审计功能,用于保护内部网络免受未经授权的访问和攻击。堡垒机通常被用作跳板服务器&#xff0…

计算机网络实验:RIP路由协议配置

目录 前言实验目的实验内容相关知识点实验设备实验过程总结 前言 计算机网络是指由多台计算机通过通信设备和通信线路互联起来,实现信息交换的系统。计算机网络中的路由器是一种专用的网络设备,它负责根据目的地址选择最佳的传输路径,将数据…

容器(第二篇)docker网络

Docker 网络实现原理: Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为…

6月6日汇报

1. 张量CP分解 三阶张量的CP分解是将其分解为三个矩阵。例如:一个三阶张量 ,则CP分解可以写为 其中, 表示向量外积, 。下图为三阶张量的CP分解: 将上面的CP分解展开,也可以写为: 假设有一个三维…

LS1028/LS1043/LS1046+FPGA+TSN多路时间敏感性网络智能工业网关方案

随着 物联网、大数据、人工智能等技术的快速发展与应用,给传统的云计算模式带来了巨大的挑战,这也催生出了计算模式的变革, 边缘计算由此诞生。 所谓边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用…

From Java To Kotlin 2:Kotlin 类型系统与泛型终于懂了

上期主要分享了 From Java To Kotlin 1 :空安全、扩展、函数、Lambda。 这是 From Java to Kotlin 第二期。 带来 表达式思维、子类型化、类型系统、泛型。 From Java to Kotlin 关键在于 思维的转变。 表达式思维 Kotlin 中大部分语句是表达式。 表达式思维是一…

Vue.js 中的数据请求是什么?如何进行数据请求?

Vue.js 中的数据请求是什么?如何进行数据请求? Vue.js 是一款流行的前端框架,它提供了许多方便的工具和 API,用于构建交互式的用户界面。其中,数据请求是 Vue.js 中重要的一部分,它可以让我们从服务器获取…

通过python封装商品ID采集1688商品详情数据,1688商品详情接口,1688API接口

1688是阿里巴巴集团旗下的B2B电商平台,提供海量的商品和服务。通过1688的API接口可以获取到商品的详细数据,并进行采集和分析。 1688的商品详情接口包括以下信息: 商品名称商品图片商品价格商品库存商品属性商品描述商品评价商品销量商品SK…

什么蓝牙耳机通话效果好,介绍几款不错的骨传导耳机

骨传导耳机是一种新型的耳机,相比于传统的耳机,骨传导耳机听歌时不需要将耳朵堵上,不会因为长时间佩戴而对听力造成损害。它不需要入耳也能听到声音,在户外运动时能够及时听到环境音,避免安全隐患。现在在骨传导市面上…

从零开始学习JavaScript:轻松掌握编程语言的核心技能⑤

从零开始学习JavaScript:轻松掌握编程语言的核心技能⑤ 1. JavaScript 函数定义2. JavaScript 函数参数2.1 函数显式参数(Parameters)与隐式参数(Arguments)2.1.1 显式参数(Parameters)2.1.2 隐式参数(Arguments) 2.2 …

HVV的艺术系列 之 上线的艺术

上线的艺术 很多时候,拿下的机器情况复杂多样。判断其出网性应该是首要工作。 01 到底该不该上线 承认的是,MSF和CS都是及其出色的后渗透工具。但是面对这种复杂多样的环境,上不上线是个我们要去认真考虑的问题,CS和MSF究竟能给我…

报表自动生成软件有哪些?热门报表自动生成软件推荐

随着数字化时代的到来,数据分析和处理变得越来越重要。在商业领域中,每个公司都需要制作各种类型的报表,以了解他们的运营情况、市场趋势和其他有关业务的信息。但是,手动创建这些报表是非常耗时且容易出错的。因此,报…

Vue3+Three.js+antvG2实战项目 智慧城市(五)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…

报表开发工具Stimulsoft Report新增“用户参数”新功能,来看如何使用?

Stimulsoft Reports 是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

PN/Modbus协议下,PLC与IO模块能否建立无线通讯?

在实际系统中,一个车间内PLC与多个IO信号点需要建立通讯,从而提高工作效率,通常距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大且不美观,这种情况下比较适合采用无线通信方式。本方…

chatgpt赋能python:Python字符串截取指南:如何截取指定位置字符串

Python字符串截取指南:如何截取指定位置字符串 在Python中,字符串截取是一项非常常见的操作。当我们需要从一个字符串中提取特定位置的字符或子串时,我们可以使用Python内置的截取函数和切片操作来实现。在本文中,我们将介绍如何…

为什么上了ERP,效率反而更低?

业界一直有句老话:“不上ERP等死,上了ERP找死”,可把ERP的尴尬处境说透了。 有人把ERP奉为信仰:“那些说ERP不好用的根本是没用明白”,有人则认为ERP只是卖概念,冷嘲:“实施ERP的企业&#xff…

Measurement Studio 2019 f3 Crack

Measurement Studio是Microsoft Visual Studio的扩展软件,提供了用于创建测试和测量应用程序的.NET工具。 了解Measurement Studio的功能 Measurement Studio是​唯一​一​款.NET​工具​套​件,专为在Microsoft Visual Studio中构建工程应用&#xff0…

2023年,知识付费行业呈现哪些发展趋势?

艾媒咨询数据显示,2022年中国知识付费市场规模达1126.5亿元,较2015年增长约70倍,预计将在2025年超过2800亿元。随着疫情形势持续好转,知识付费的“居家红利”或将逐渐消退,但三年来用户的付费求知和在线学习习惯已经养…