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

2.思路

图8

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

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

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

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

图9

5.直角问题和缓解思路

1. 直角 问题

图10

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

2.缓解思路

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

相关推荐
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__5 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
数据的世界017 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐7 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO10 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A10 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒10 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash311 小时前
提升专业素养的实用指南
学习·职场和发展
Hejjon11 小时前
SpringBoot 整合 SQLite 数据库
笔记