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

ROS学习笔记(16):夹缝循迹

0.前言

在笔记的第15期对巡墙驾驶的原理进行了简单讲解,而这期我们来讲一下夹缝循迹,也常被叫follow the gap,也更新一些概念。

1.探索式路径规划与避障

1.概念

无预先建图的路径规划叫探索式路径规划,例如巡墙循迹和夹缝循迹,在使用slam技术进行建图前我们往往需要探索式路径规划来进行全局探索来完成建图。

2.巡墙循迹和夹缝循迹的差别

1.巡墙循迹

第15期我们重点讲了巡墙循迹的运行原理,可能有些眼尖的同学会思考一个关键问题——如果我的道路中间出现了障碍物该怎么办?很显然在现实生活中路道中间出现障碍物是时有发生的,但巡墙循迹并没有考虑到这个问题的出现。(这里建议去仔细思考一下巡墙循迹的原理)

ROS学习笔记(15)小车巡墙循迹-CSDN博客

在道路均匀顺滑的情况下巡墙循迹是真的很好用,只是这种算法泛用性太低了。任何产品需要考虑泛用性的问题。

2.夹缝循迹

夹缝循迹考虑到了道路不顺滑有障碍物在道路中间的情况。夹缝循迹采用了局部避障(反应式避障,无任何预先建图)。

3.夹缝循迹原理

1.获取雷达与障碍物关系

构建一张图来表示雷达弧度和障碍物距离的关系

图片1

注释:图中y轴是障碍物和雷达间的距离,x轴为雷达扫描的弧度,当得出弧度与距离的关系时我们就可以得知在那个方向上有障碍物、距离多远,这就为我们的避障提供了感知基础。

提示:雷达的运行本质上还是通过光的反射来进行,因此雷达有一个巨大的弊端-——对透光物体的感知极易失效。(这里也还是泛用性的问题,未来的某个环节我们还会加入视觉,将视觉和雷达进行联合运作来提高泛用性。)

2.车体问题

当我们得出了雷达与障碍物间的关系后,我们的到了几个避障的方向

图片2

但是还有一个问题需要我们去解决——夹缝的大小是否支持我们通过,小车和机器人本身是具有体积的,不是每一个夹缝都能通过。因此我们需要动态的去判断夹缝大小与机器人本身大小间的关系(这里依然是使用三角公式进行简单的判断——如下图3)来帮助判断能否通过。

图3

注释:a和b是超出我们的设定的距离阈值值

3.全向式运动问题与解决思路

在运动当中有两个类型:全向运动和非全向式运动。

1.全向式运动

全向式运动就是能无需调整姿态进行运动,典型例子是麦克纳姆轮(又称全向轮,可左右平移)。

图4

2.非全向式运动

非全向式运动是需要调整姿态进行运动,典型例子是阿克曼小车(有舵机转向结构,转向需前进一段距离。)

图5

3.全向式运动问题

图6

如图6显示阿克曼小车与物体间的关系,我们提到阿克曼小车需要进行前进来调整小车,如果此时已跳跃距离(BC距离)的中点为转向目标点就可能导致小车碰撞到物1。

4.解决思路

使用膨胀法进行处理。

图7

1.膨胀处理(也称安全气泡处理)

如图7所示小车的半径为r_1,两物体半径分别为r_2r_3,现实生活中我们无法忽视小车的体积进行任意穿梭,而当我们对物体的半径进行膨胀处理(物体半径膨胀一个r_1)后就可将小车近似一个点,此时可以穿梭了。(但我更推荐膨胀多一点,且动态调整,当距离越近时膨胀半径就越大

2.思路

图8

图8我们在阶跃点进行了碰撞处理后再次给出中点计算得到转向弧度。(但我更推荐对离小车最近且低于阈值的点进行膨胀处理。)

课本上也有另一种安全气泡:

4.最佳问题(贪心问题)

我们希望小车能越快越好(这是对性能的表现),但不是任何时候我们都应该全速行驶,这压力太大了。这时候我们就进行分段处理,每个阶段设置一个速度和一个安全气泡,这样就能保证速度和安全的平衡。

图9

5.直角问题和缓解思路

1.直角问题

图10

在遇到直角和一些特殊情况时会有b>a,小车向b方向进转向调整(正确方向应该是a),这就可能导致混乱(转向角和速度太大时可能会导致掉头)。

2.缓解思路

这个问题我还不知道如何完美解决,但使用中心点是可以缓解的。

相关文章:

  • 类 和 对象(二)
  • 分享10个国内可以使用的GPT中文网站
  • 工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端
  • 四川汇聚荣科技有限公司好不好?
  • Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
  • 关于软件设计模式的理解
  • HQL面试题练习 —— 合并数据
  • [Python]pyenv 环境配置
  • Selenium 库的爬虫实现
  • Host头攻击-使用加密和身份验证机制
  • git分支常用命令
  • Scrum 的速度如何衡量和提高
  • 单细胞 10X 和seurat对象学习
  • 视频推拉流EasyDSS系统如何在清理缓存文件的同时不影响缓存读写?
  • C++ 程序的基本要素
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【刷算法】从上往下打印二叉树
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • axios 和 cookie 的那些事
  • go语言学习初探(一)
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • nginx 配置多 域名 + 多 https
  • vue-router的history模式发布配置
  • web标准化(下)
  • 对象引论
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 三分钟教你同步 Visual Studio Code 设置
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 再次简单明了总结flex布局,一看就懂...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ionic入门之数据绑定显示-1
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 容器镜像
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #考研#计算机文化知识1(局域网及网络互联)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (28)oracle数据迁移(容器)-部署包资源
  • (39)STM32——FLASH闪存
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (c语言)strcpy函数用法
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (九)信息融合方式简介
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .java 9 找不到符号_java找不到符号
  • .NET 2.0中新增的一些TryGet,TryParse等方法