VFH+避障/局部路径规划算法

2023-05-16

VFH+避障/局部路径规划算法

  • 1、第一部分:映射到极坐标系
      • VFH+对VFH的改进——考虑机器人的宽度&对障碍物进行膨胀
  • 2、第二部分:二值化极坐标直方图
      • VFH+算法对此提出了一种解决办法——二值化极坐标直方图
  • 3、第三部分:限制机器人可选的前进方向
  • 4、第四部分:方向选择

做个正直的人

这篇文章是我看论文《VFH+: Reliable Obstacle Avoidance for Fast Mobile Robots》(Iwan Ulrich and Johann Borenstein)的笔记,所以说是文章的翻译也可以。想看原paper的可以自己去找,看过VFH算法的话,这个VFH+算法还是非常好懂的。

我前面写过一篇讲VFH算法的文章,感兴趣的可以去看看。
VFH局部路径规划算法

我在讲VFH算法的最后,写了一点我对VFH算法的评价,主要有两点,一是VFH算法涉及的参数比较多,很麻烦;二是机器人总是会像个傻子一样在原地摆头,我设置了一个不灵敏区域稍微缓解了一下摆头的问题,但是这导致机器人对障碍物的灵敏性降低。

今天看了VFH+算法,才发现原来这些问题前人们早就研究过了。VFH+对VFH提出了几点修正,VFH还带了个正号,这是增强版的意思吗?hhhhhhhh…接下来进入正题。
VFH+算法同样分成四个部分,不过和VFH的四个部分可是不一样。

1、第一部分:映射到极坐标系

VFH算法的第一部分就是把局部地图从笛卡尔空间映射到极坐标系,VFH+算法的做法跟VFH一样,只不过VFH+不再像VFH那样采用正方形的工作空间(可以当成是局部地图),而是采用了圆形的工作空间,本来就该是圆形的好吧,VFH那是为了简便而已。这工作空间一旦变成圆形,就有了一个性质——机器人原地旋转感知到的局部地图是不变的,这称为旋转不变性。

VFH+对VFH的改进——考虑机器人的宽度&对障碍物进行膨胀

VFH并没有考虑机器人的宽度,而是采用一个低通滤波器进行补偿,这个滤波器的参数的设置还比较麻烦。
VFH+考虑到了机器人的宽度 r r r_r rr ,这里假定机器人是正圆盘形状。同时为了安全起见又设置了一个距离障碍物的安全距离 d x d_x dx ,基于此,我们就可以得到需要对障碍区进行膨胀的幅度 r r + x = r r + d x r_{r+x}=r_r+d_x rr+x=rr+dx 。这样我们就可以把机器人完全看做一个点来进行规划,是不是感觉事情变得简单了。
在这里插入图片描述
从上图可以看出,如果障起舞膨胀幅度为 r r + x = r r + d x r_{r+x}=r_r+d_x rr+x=rr+dx ,机器人距离障碍物的距离为
d i j d_{ij} dij ,此时这一个障碍物对应的张角为 2 γ i , j 2\gamma_{i,j} 2γi,j 。其中 γ i , j = a r c s i n ( r r + x / d i , j ) \gamma_{i,j}=arcsin(r_{r+x}/d_{i,j}) γi,j=arcsin(rr+x/di,j)

此时,这个障碍物很可能就不再仅仅位于一个sector内了,而是同时处于多个sector上,这时候更新工作空间就必须同时对多个sector进行更新。

2、第二部分:二值化极坐标直方图

VFH算法的一个大问题就是机器人会出现在原地频繁的左右摆头的现象,我在调试VFH算法的时候分析是VFH算法对新计算出的前进方向过于敏感,导致机器人频繁的更新自己的前进方向。所以我给VFH算法设置了一个不灵敏区间,只有当新的前进方向和自己当前的前进方向角度相差大于一定阈值的时候才会更新前进的方向,否则不会更新。但是这导致机器人对障碍物的灵敏性降低,限制了机器人的运行速度。

VFH+算法对此提出了一种解决办法——二值化极坐标直方图

VFH算法之所以会出现摆头现象(VFH+算法称之为犹豫不决的行为),是因为在存在一些比较窄(不是真的特别特别窄,只是比较窄而已)的通道的环境中,一些山谷可能会在opening和block的状态之间频繁变换。比如对于一扇开着的门,当离得比较远的时候,这一扇门占据的sector比较窄,而VFH更加倾向于选择那些宽的山谷(占据sector比较多的山谷方向),这时候这一扇门被当作是block,不会成为机器人的候选前进方向;可是随着机器人的运动,机器人离门越来越近,这一扇门占据的sector越来越多,当大于一个阈值的时候,这一扇门突然成了宽的山谷,而成为了候选的前进方向。这就导致一些方向频繁的在opening和block之间跳换,就像一条路,一会跟我说这条路可以走,一会又跟我说不可以走,这不是在拿机器人涮着玩嘛。

VFH+算法的做法是设置两个阈值, τ H i g h \tau_{High} τHigh τ L o w \tau_{Low} τLow ,这样做的目的是降低一些方向在opening和block状态之间跳转的速度,你不是变大了吗(变小也是一样),虽然满足了我的第一个条件,但是我并不马上认可你,而是继续考核你一下,满足我的第二个要求后才是真的合格了,我才会认可你。就是这个思路,在机器人运动过程中,极坐标直方图也在慢慢的发生着变化,有些区域离开了工作空间,有些区域新加入工作空间,并且工作空间内部的物体相对于机器人的位置也在变化,所以会在每一个时刻生成一个极坐标直方图。将n时刻的极坐标直方图中的每一项 H k , n p H_{k,n}^p Hk,np 都和前一时刻对应的项 H k , n − 1 p H_{k,n-1}^p Hk,n1p 做比较,同时跟设定的两个阈值 τ H i g h \tau_{High} τHigh τ L o w \tau_{Low} τLow 进行比较,依次来决定这一项应该二值化为1还是0,亦或是继续保持前一时刻的值。下面的公式一看就明白了

  • H k , n p H_{k,n}^p Hk,np =1 if H k , n p > τ H i g h H_{k,n}^p >\tau_{High} Hk,np>τHigh :这一项都大于更大的那个阈值了,肯定得是1,也就是block
  • H k , n p = 0 H_{k,n}^p =0 Hk,np=0 if H k , n p < τ L o w H_{k,n}^p <\tau_{Low} Hk,np<τLow :这一项比更小的那个阈值都要小,得是0,也就是openning
  • H k , n p = H k , n − 1 b H_{k,n}^p = H_{k,n-1}^b Hk,np=Hk,n1b others :这一项不算大,也不算小,咋办?就维持前一时刻的状态吧,先观望一下。其中, H b H^b Hb 是二值化之后的极坐标直方图。

3、第三部分:限制机器人可选的前进方向

VFH算法中,机器人可选的前进方向是一圈360度都可能称为机器人的前进方向,看下图a。想一想这合适吗?我可不希望我的机器人一会向前,一会向后,一会向左,一会又向右,机器人的运动轨迹非常的不平滑。而且还有一个最大的问题,机器人很难进行高速的运动。想一想机器人的车轮正在飞速的旋转,机器人在欢快的向前奔跑,突然控制器发来命令,说,“嘿,老哥,你下一时刻的前进方向在你后面,跟现在的正相反”。机器人听了是什么感受,我正先前飞奔,你现在让我倒退,玩我呢?就算是电机再好,老这么搞,电机也是遭不住啊!
在这里插入图片描述
所以,VFH+算法对此作出了改进,限制了机器人可选的前进方向,看上图b,大大平滑了运动轨迹。骑过小电瓶车的小伙伴应该都有感受,车速越快,越是忌讳急转弯,太危险了,搞不赢就躺地上了啊。也就是说,车速越快,转弯半径越大,相应的曲率就越小;车速越慢,可以承受的转弯半径就越小,相应的曲率就越大。如此,机器人的可选择的前进方向就只有上图b中被两个(转弯)圆夹出来的部分。(姑且叫它转弯圆吧,这名字应该好理解吧。)
假如说机器人当前的速度是v ,对应的最小转弯半径是 R 。前面提过,障碍物的膨胀幅度是 r r + x r_{r+x} rr+x ,看下图
在这里插入图片描述
在机器人的前面存在两个障碍物A和B,这两个障碍物被膨胀之后分别为上图中两个阴影圆所示。机器人的左右侧两个转弯圆的半径为R,那么机器人会和障碍物碰撞的条件是什么呢?或者说满足什么条件的话,机器人很大概率上会撞上障碍物呢?上图中的障碍物A ,A 和左侧转弯圆的圆心的距离为 d C , A d_{C,A} dC,A 由于存在 d C , A < r r + x + R d_{C,A}<r_{r+x}+R dC,A<rr+x+R ,所以此时机器人再不采取措施避开A,大概率就撞上了。所以此时机器人应当向右偏转避开A,从A和B的中间穿过。

那么机器人是怎么实现避开A 的呢?下图中,b是第二部分二值化之后的极坐标直方图。由于障碍物A和机器人的左侧转弯圆有重合部分,再加上机器人可选择前进方向是两个转弯圆之间夹出来的部分,那么对于机器人来说,从A 障碍物开始逆时针旋转大半圈(一直转到右侧转弯圆为止)都不可以通过,都是block。这一来二值化的极坐标直方图就从b变成了c,这时候机器人该选择哪一个方向前进就一目了然了。
在这里插入图片描述

4、第四部分:方向选择

这一部分,对应VFH算法的第二部分——方向控制。只不过VFH是直接从第一步生成的极坐标直方图来生成方向,而VFH+是经过了第二部分和第三部分的处理之后才开始生成前进方向。

VFH +和VFH的方向产生一样,只不过,VFH在这一步——考虑目标方向、当前方向、前一时刻方向。什么意思呢?在VFH算法中,方向控制就是单纯的从极坐标直方图生成前进方向,没有考虑目标在哪里、当前的方向为何、前一时刻方向为何;而且由于工作空间的更新,方向控制生成的前进方向变化比较剧烈,这也是导致机器人频繁的原地摆头的原因。VFH+算法同时将目标方向、当前方向、前一时刻方向考虑进来。采用如下的代价函数来得到最佳的前进方向

g ( c ) = μ 1 ∗ Δ ( c , k t ) + μ 2 ∗ Δ ( c , θ n / α ) + μ 3 ∗ Δ ( c , k d , n − 1 ) g(c)=\mu_1*\Delta(c,k_t)+\mu_2*\Delta(c,\theta_n/\alpha)+\mu_3*\Delta(c,k_{d,n-1}) g(c)=μ1Δ(c,kt)+μ2Δ(c,θn/α)+μ3Δ(c,kd,n1)

其中,第一项的 Δ \Delta Δ 是生成的前进方向和目标方向的差值,系数是 μ 1 \mu_1 μ1 ;第二项的 Δ \Delta Δ 是生成的前进方向和当前前进方向的差值,系数是 μ 2 \mu_2 μ2 ;第三项的 Δ \Delta Δ 是生成的前进方向和前一时刻前进方向的差值,系数是 μ 3 \mu_3 μ3 。通过配置三个系数的大小可以得到不同特性的VFH+算法。

如果是第一项的系数最大,那么无疑我们更加看中目标方向的作用,这时候得到目标导向的VFH+算法。相应的路径很可能不是那么光滑。此时最好满足关系 μ 1 > μ 2 + μ 3 \mu_1>\mu_2+\mu_3 μ1>μ2+μ3 。这是论文作者提出来的,我不是太理解,我的三个系数分别是2、2、1,感觉效果也挺好的。可能是我还没有发现一些东西吧。

如果第二项系数最大,那么说明我们更加看中路径的光滑程度。

如果觉得路径还是不够光滑,当然可以增大 μ 2 \mu_2 μ2 ,然而如果 μ 2 \mu_2 μ2 太大,比如 μ 1 \mu_1 μ1 是1, μ 2 \mu_2 μ2 是100,那说真的,还搞个什么劲啊,直接取消第一项算了。所以第二项的系数也不能大的离谱,这时候就可以加入第三项,来使得路径更加的光滑。
除此以外,还可以增加其他的项,比如我们还希望关注一下各个opening的宽度,这时候就可以考虑加入第四项将opening的宽度也纳入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VFH+避障/局部路径规划算法 的相关文章

  • 关于realsense d435i的安装步骤及问题总结

    一 realsense的安装过程 参考链接 xff1a 1 Ubuntu18 04 安装D435i ROS 2 Ubuntu下Realsense SDK的安装 3 Realsense D435i 在ubuntu上安装SDK与ROS Wrap
  • ROS编译catkin_make的时候报错找不到xxx.h头文件

    报错内容 xff1a home firefly eai ws src square square goal service src service server cpp 3 53 fatal error square goal servic
  • Ubuntu下安装GParted并分区,进行虚拟机内存扩展

    首先对于虚拟机下的Ubuntu系统安装Gparted 直接使用sudo apt get install gparted 关机先进行内存分配后 xff0c 再进行下面操作 网上还有其他适合的教程 xff0c 我的16 04这样安装是没问题的
  • PIP版本过低,更新无用,Command “python setup.py egg_info“ failed with error code 1 in报错

    Ubuntu下pip install 时候python2 7总是报错 Complete output from command python setup py egg info Traceback most recent call last
  • 小觅双目相机进行ROS标定

    安装image pipeline包 使用ROS官方提供的 camera calibration 包对双目相机进行标定 详情可见官网camera calibration Tutorials StereoCalibration ROS Wiki
  • ubuntu18.04安装ORB_SLAM3以及遇到的问题

    目录 1 安装c 43 43 11 2 安装Pangolin a xff09 安装依赖 b xff09 编译pangolin 切换到pangolin下载包里面 3 安装opencv 4 eigen3安装 5 boost安装 6 编译ORB
  • 【论文写作】Word中公式快捷输入方式

    环境 Win10 64位 用到软件 Mirsoft Word MathType Mathpix snipping tool Quicker 说明 xff1a 点击链接可以直达官网 一 前言 针对Word中公式输入效率低的问题 xff0c 本
  • 练习7-10 查找指定字符 (15分)

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 用cropper.js裁剪图片并上传到服务器,解析base64转存图片到本地

    今天要写上传图片功能 xff0c 研究了一下cropper 将图片上传服务器并保存到本地 html lt html gt lt head gt lt title gt 基于cropper js的图片裁剪 lt title gt lt met
  • 通讯协议详解

    1 xff0c 概念 网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合 网络上的计算机之间是如何交换信息的呢 xff1f 就像我们说话用某种语言一样 xff0c 在网络上的各台计算机之间也有一种语言 xff0
  • 自动识别击打控制系统

    目录 摘 要 关键词 一 系统方案 1 1 系统基本方案 1 2 程序算法的具体流程 二 视觉程序识别框架 2 1多线程 2 2 opencv配置文件 2 3 主函数 三 装甲板识别算法 3 1 装甲板识别 3 2 识别函数介绍 四 目标位
  • 基于stm32风力摆控制系统(电赛获得省一)

    目录 需要源文档及程序进入主页 一 系统方案 完整文档以及代码可主页私 1 1 系统基本方案 1 1 1 控制方案设计 1 1 2 机械结构方案设计
  • 基于stm32的所有嵌入式项目代码

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 本人本科和硕士阶段的专业都是嵌入式方向 做了许许多多的项目 包括51 stm32 freeRTOS linux操作系统 多进程线程实现功能 包括裸机开发 驱动开
  • 基于图像处理的水果自助售卖系统(自助水果售卖机)

    目录 第一章 nbsp 概述 1 1 发展概要 1 2 国内外研究现状 1 3 研究目的和意义 1 4 方案介绍
  • 基于stm32的无人机控制系统设计

    基于stm32的无人机控制系统设计 整篇文章有两万字左右 字数太多了 实在是懒得全部放在这上面来 太废时间了 需要完整论文可主页联系 第一章 前言 1 1项目背景和意义 1 2国内外发展现状 1 3本文研究的主要内容 第二章 设计方案论证与
  • 基于Robot Studio的工业机器人汽车喷涂仿真设计

    基于Robot Studio的工业机器人汽车喷涂仿真设计 整篇文章字数有一万四左右 图片太多了 实在是懒得全部放在这上面来 太废时间了 获得完整论文关注可查看主页私信我 摘要 关键词 1 绪论 1 1研究背景与意义 1 2国内外研究现状 2
  • 基于单片机的压力流量报警器(附代码+仿真+论文)

    基于单片机的压力流量报警器 附代码 仿真 论文 完整论文 代码 仿真可关注我在主页私我 摘要 关键字 第一章绪论 1 1课题背景及其意义 1 2 国内外的研究状况 1 3本文的主要研究内容及论文结构安排 第二章 方案的设计与论证 2 1控制
  • 基于STM32的微型电子琴设计

    基于STM32的微型电子琴设计 第一章 总体设计 1 1 系统功能 1 2 主要技术性能指标 第二章硬件设计 2 1 整体硬件图 2 2 按键模块 2 3 扬声器模块 2 4 显示模块 2 5 主控模块 第三章 软件设计 3 1 主要工作原
  • 百度2015校园招聘软件开发笔试题及答案

    简单题 xff08 本题共30分 xff09 请简述Tcp ip的3次握手以及4次挥手过程 xff1f 并解释为何关闭连接需要4次挥手 10分 详细答案参见TCP IP协议三次握手与四次握手流程解析 TCP三次握手 四次挥手过程如下 通常情
  • 智能算法实现PID智能车控制系统

    智能算法实现PID智能车控制系统 TOC 智能算法实现PID智能车控制系统 摘要 关键词 第一章绪论 1 1智能车概述 1 2智能PID研究现状 1 3本文工作 第二章 PID控制简介 第三章 内模PID简介 3 1 内模PID控制 第四章

随机推荐