导航recovery机制
概述
recovery机制是当移动机器人认为自己被卡住时,指导机器人进行一系列的恢复行为。
1 恢复机制
如图:
move_base节点可以在机器人认为自己被卡住时选择性地执行恢复行为。默认情况下,move_base节点将采取以下操作来清除空间:
首先,用户指定区域以外的障碍物将从机器人的地图上清除。接下来,如果可能的话,机器人将进行原地旋转以清除空间。如果这也失败了,机器人将更积极地清除地图,清除矩形区域之外的所有障碍,在这个区域内机器人可以原地旋转。这之后将进行另一次就地轮换。如果所有这些都失败了,机器人将认为它的目标是不可行的,并通知用户它已经中止。可以使用recovery_behaviour参数配置这些恢复行为,并使用recovery_behavior_enabled参数禁用这些恢复行为。
2 相关源码
导航功能包集合中,有3个包与恢复机制有关。分别为:clear_costmap_recovery、move_slow_and_clear、rotate_recovery。这3个包中分别定义了3个类,都继承了nav_core中的接口规范。
2.0 nav_core::RecoveryBehavior接口规范
除构造函数外,该虚基类中定义了两个函数,一个负责初始化,另一个负责执行恢复行为。
virtual void initialize()
virtual void runBehavior() = 0;
2.1 clear_costmap_recovery包
遍历所有层,然后如果某层在可清理列表里就清理掉它的costmap。这里可清理列表里只有obstacleLayer,也就是实时扫描建立的costmap。
ClearCostmapRecovery类
pubic:
initialize()函数:
定义一个ros::nodehandle命名空间,读取ros参数,将要清除的layer,插入至 std::setstd::string clearable_layers_集合中。
runBehavior()函数
执行清除命令: clear(global_costmap_); clear(local_costmap_)。
private:
clear(costmap_2d::Costmap2DROS costmap)函数*
查找 std::setstd::string clearable_layers_集合中是否有要清除的图层,然后运行clearMap(costmap, x, y);
clearMap函数
将车体原点周围正方形区域之外的所有cost设置为noinformation(255)
2.1 move_slow_and_clear包
清除costmap后,机器人闭着眼睛走(???)。
pubic:
initialize()函数:
定义一个ros::nodehandle命名空间,读取ros参数。
runBehavior()函数
清除机器人周围指定范围内的obstacle的layer,设置为FREE_SPACE(0)。然后调用setRobotSpeed函数,通过动态重配置修改机器人最大线速度和角速度。并定时调用distanceCheck,移动足够远时,停止监视。
2.1 rotate_recovery包
RotateRecovery类
initialize()函数
定义一个ros::nodehandle命名空间,读取ros参数。
runBehavior()函数
在runBehavior里只需要发指令让小车逆时针旋转180度,,有没有路是local costmap在转一圈过程中建立发现的。
导航recovery机制相关推荐
- Android 的Recovery机制
Android 的Recovery机制 目录 1. 系统的启动模式 1 1.1 Android系统的启动模式 1 1.2 系统的启动模式 2 2. Recovery模式中的三个部分 3 3. Reco ...
- Android 的Recovery机制【转】
本文转载自:http://blog.csdn.net/fengying765/article/details/38301895 Android 的Recovery机制 目录 1. 系统的启动模式 1 ...
- 解析 | 自动驾驶视觉定位与导航技术的研究与应用
视觉定位与导航技术是智能体具备的基础能力之一,随着无人驾驶的发展,基于低成本摄像头及人工智能算法的视觉定位与导航技术成为了无人驾驶的主流技术路线之一.在传统工作方式中,视觉定位与导航技术通常采用SLA ...
- IM软件业务知识—导航
----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...
- Oracle GoldenGate 系列:深入理解 Oracle GoldenGate 检查点机制
检查点将进程的当前读写位置存储在磁盘中用于恢复目的.检查点不仅可以真实地标记 Extract进程捕获的要进行同步的数据变化以及 Replicat进程应用到 target数据库的数据变化,防止进程进行冗 ...
- Radio Link Failure and Recovery
四种会发生Radio Link Failure的场景 - DL Physical Layer Failure (PDCCH BLER > 10%) - Random Access Probl ...
- 图灵奖得主Joseph Sifakis:物联网自主系统设计的边界与风险(附视频)
2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...
- 分库分表 vs NewSQL数据库
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 蚊子squirrel 来源 | https:/ ...
- 强!分库分表与分布式数据库技术选项分析
最近经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允. ...
- 导致集群重启_干货丨如何水平扩展和垂直扩展DolphinDB集群?
随着业务的扩展,数据量不断积累,数据库系统的数据容量和计算能力会逐渐不堪重负,因此优秀的数据库系统必须具备良好的扩展性.DolphinDB集群中的数据节点是集计算和存储于一体的,所以要提高计算能力和数 ...
最新文章
- AngularJS table 按照表头字段排序功能(升序和降序)
- Mac全量编译ijkplayer生成Android库
- scrapy框架的概念和流程
- 三年级计算机击键要领教案,闽教版信息技术三上《下行键操作》教案
- 人工智能正在如何改变传统行业
- Python 利用pymupdf将pdf转换为图片并拆分,后通过PIL合并生成一张图片
- Unity3D优化总结(一)
- 14.json文件读取
- ant a-table 树表格级联选择
- log4j和web.xml配置webAppRootKey 的问题(一个tomcat下部署多个应用)
- sikuli+eclipse对于安卓app自动化测试的应用(第一次写博客,有些语言还不太专业,望海涵)...
- stm32F4系列3:学习资料和教程推荐,流程推荐。
- Java 地心地固坐标系转经纬度(WGS-84大地坐标)
- OPNsense - 多功能高可靠易使用的防火墙(四)
- 新浪微博接口在safri下的bug
- mysql对单引号的模糊查询_SQL语句中的单引号处理以及模糊查询
- Partially Labeled Dirichlet Allocation(PLDA)算法的理解与编程细节(Java)
- 联想拯救者bios找不到启动盘
- [译]集群调度架构的变革 (四)
- 帕斯卡公式+Lucas定理______DP?( hdu 3944 )
热门文章
- Jmeter取样器设置
- 第三届智能科学国际会议ICIS2018征稿北京大学11月2日-5日召开。附史忠植院士简历(公号发“智能科学国际会议”下载PDF)
- MATLAB的Monte Carlo方法,Monte Carlo的某些用法总结_monte carlo
- 如何生成王者荣耀、QQ飞车等游戏“空白名”、“重复名”等特殊名
- SpringSecurity实战(四)-集成图片验证码-过滤器方式实现
- MIPI CSI、DSI、UFS、C-PHY、D-PHY、M-PHY概念理解
- 软件设计师——Week 2
- Lowest Common Ancestor of a Binary Tree
- Hbuilder连接苹果手机
- 私有云的优缺点_公有云、私有云、混合云的优缺点