机器人避障规划算法之VFH系列算法研究现状

2023-05-16

机器人路径规划算法可以分为全局路径规划与局部路径规划,全局规划算法一般需要地图信息作为先验知识,而局部规划算法利用传感器探测环境信息避开障碍物。常用的全局算法算法有可视图法,栅格地图法,智能算法等。常见的局部规划算法有人工势场,BUG算法,VFH算法,DWA算法,TEB算法等。本文针对VFH算法的研究现状做个简单概述。

在这里插入图片描述
​ 图1 VFH算法发展历程图

1 VFF算法

​ 该算法是一种虚拟力场法,针对传感器感知周围环境,生成笛卡尔坐标障碍图,整个地图划分成栅格,每个栅格都有一个确定的障碍物确定值CV值(certainty value)。通过公式计算:R= ∑ i , j n ( F r p u + F a t t r ) \sum_{i,j}^{n}(F_{rpu}+F_{attr}) i,jn(Frpu+Fattr),其中为障碍物栅格 F r p u ( i , j ) F_{rpu(i,j)} Frpu(i,j)为对机器人的排斥力,F_{attr}为目标点对机器人的吸引力,R为机器人的移动方向和速度。

缺点:无法通过门道,两侧的排斥力会产生将机器人推开的力;当机器人从一个栅格单元到另一个栅格单元,R值剧烈可能变化,导致航向剧变;狭窄走廊环境下,运动振荡不稳定。

2 VFH算法

​ 针对VFF算法诸多不足,分析其原因,主要还是因为VFF算法是直接通过二维度笛卡尔坐标系计算出候选运行角度,数据缩减过快。所以VFH算法引入两个阶段的数据缩减(笛卡尔坐标障碍图->极坐标直方图->候选方向)。整个的规划流程如下:

(1)传感器获取信息

(2)更新笛卡尔坐标障碍图

(3)创建极坐标直方图

(4)确定自由扇区和转向方向

(5)计算速度

(6)给出电机控制命令

其中(1)(2)和VFF算法是一致的。第三步需要根据机器人当前位置建立极坐标图,以逆时针方向为0-360°(需要根据自身传感器扫描范围)。设置分辨率为 α r \alpha_r αr,所以扇区数量 n = 360 α r n=\frac{360}{\alpha_r} n=αr360(例如我设置的分辨率为5°,所以就有72个扇区)。
栅格障碍物强度值: m i , j = c i , j ∗ 2 ( a − b d i , j ) m_{i,j}={c_{i,j}^{*}}^2(a-bd_{i,j}) mi,j=ci,j2(abdi,j),其中 c i , j ∗ {c_{i,j}^{*}} ci,j代表活动区域内的一个栅格的CV值(例如传感器的扫描距离为 d s d_s ds,那么活动区域就是以机器人为圆心, d s d_s ds为半径的区域), d i , j d_{i,j} di,j为机器人与栅格的距离,a,b为常数,且满足
a − b d s = 0 a-bd_s=0 abds=0

计算栅格归属扇区:在这里插入图片描述

其中k表示当前栅格所在扇区, ( x o , y o ) (x_o,y_o) (xo,yo)表示机器人所在位置, ( x i , y i ) (x_i,y_i) (xi,yi)表示当前栅格所在位置。

扇区k的障碍物强度值: h k = ∑ i , j m i , j h_k=\sum_{i,j}m_{i,j} hk=i,jmi,j (针对扇区内的所有栅格累加和)

对求得的障碍物强度值做一个平滑处理,低通滤波:
在这里插入图片描述
(这里的 l 代表k扇区前面和后面的扇区,我这里选择的 l=5)
第四步:确定自由扇区和选择方向,设定阈值 d t h d_{th} dth,小于 d t h d_{th} dth的扇区为自由扇区。将可通行扇区分为:窄谷和宽谷,通过设定 S m a x S_{max} Smax,连续 S m a x S_{max} Smax个扇区为自由扇区是宽谷,反之为窄谷。
宽谷 if S>= S m a x S_{max} Smax

窄谷 if S>= S m a x S_{max} Smax

选择方向:选择距离目标方向最近的宽谷为候选方向。
计算速度就不过多阐述了,可以参考一下后面的论文,大体原则就是根据 h k h_k hk的值调整车速,例如当 h k h_k hk值很大时,说明这个方向有障碍物且距离障碍物越来越近了。

3 VFH+算法

​ 该算法相对于VFH算法有四点改进如下:

①VFH算法并没有考虑机器人本生的尺寸,VFH+算法对机器人宽度进行了宽度补偿,对于每一个栅格向外膨胀 R r + s = R r + d s a f e R_{r+s}=R_r+d_{safe} Rr+s=Rr+dsafe,其中 R r R_r Rr为机器人半径, d s a f e d_{safe} dsafe为机器人安全运行距离。经过这样的一个处理,机器人可以被看成一个质点。
②VFH算法不适合狭窄通道环境,VFH+提出了双阈值滞后系统
在这里插入图片描述
其中n代表时刻,n-1是前一时刻
③考虑机器人运动学和动力学:由于转弯半径的影响,导致一些本来可以通行的扇区变成了不可通行扇区。
④提出了选择方向时的代价函数
在这里插入图片描述
其中 u 1 , u 2 , u 3 u_1,u_2,u_3 u1,u2,u3为常数, ▽ ( c , r t ) \bigtriangledown(c,r_t) (c,rt)为候选方向和目标方向之间的夹角; ▽ ( c , θ n α ) \bigtriangledown(c,\frac{\theta_n}{\alpha}) (c,αθn)为候选方向和当前运动之间的夹角; ▽ ( c , k d , n − 1 ) \bigtriangledown(c,k_{d,n-1}) (c,kd,n1)为候选方向与前一次运动方向的夹角。最后选择代价最小的候选方向作为行进方向。

4 VFH*算法

​ VFH+算法还是存在局部规划算法存在的问题,因为只拥有地图的部分信息,可能会陷入局部死区。VFH*算法通过预测机器人未来前进几步的轨迹并评估其后果来做出当前的方向选择。所以VFH*算法的步骤如下:

(1)建立极坐标图

(2)确定候选方向

(3)计算后续节点的投影位置和方向

(4)确定到达这些节点的成本

(5)确定启发函数,通过启发函数选择方向

其中(1)(2)步和VFH+算法是一样的。后面三步主要是基于一个对未来的预测,预测图形像一个树状结构,在第一次可能有三个候选方向,VFH+算法是直接选择一个代价最小的方向行驶。而VFH*算法对这三个方向都进行投影预测,计算新的投影位置和方向,构建新的直方图,继续投影预测。进行的轮次也就是树的深度,记为 n g n_g ng;每一次的投影步长为 d s d_s ds;所以总的投影距离 d t = d s ∗ n g d_t=d_s*n_g dt=dsng。最后选择一个累计成本最小的作为行驶方向。

5 针对阈值改进的VFH算法

​ 在构建完成向量场直方图后,阈值不一样,可选择的候选方向就有很大区别。若是阈值选择过大,可通行扇区变多,在距离障碍物很近时才做出反应,若是速度很快的话,可能会导致碰撞;若是阈值选择过小,则可能忽略一些可以通行的方向。针对VFH算法阈值敏感问题,很多学者都提出了自适应阈值。

6 基于A*引导域的VFH算法

​ 虽然VFH*算法融合了A*的一些思想,但是对于复杂环境下的路径规划还是会存在死区现象。这也是局部避障算法的固有缺陷,若是能对地图有一个大概的了解(先建图),利用全局路径规划A*算法规划出一条粗糙的路径(低分辨率路径),在VFH算法运行过程中用这条粗糙的路径做引导。

7 利用全局路径信息引导VFH局部路径规划算法

​ 先利用SLAM建图,利用建好的地图做全局路径规划(RRT,A*,人工势场法等),让后让机器人沿着规划好的路径运行,若是碰到动态障碍物,利用VFH算法加临时全局路径点引导避障。

参考文献

[1] Borenstein J, Koren Y. The vector field histogram-fast obstacle avoidance for mobile robots[J]. IEEE transactions on robotics and automation, 1991, 7(3): 278-288.

[2] Ulrich I, Borenstein J. VFH+: Reliable obstacle avoidance for fast mobile robots[C]//Proceedings. 1998 IEEE international conference on robotics and automation (Cat. No. 98CH36146). IEEE, 1998, 2: 1572-1577.

[3] Ulrich I, Borenstein J. VFH*: Local Obstacle Avoidance with Lookahead Verification In IEEE int. conf. on Robotics and Automation[J]. San Francisco, USA, 2000.

[4] 庄宇辉, 赵成萍, 严华. 一种针对VFH系列算法阈值敏感问题的改进策略[J]. 四川大学学报(自然科学版), 2018, 55(05):95-102.

[5] Chen W, Wang N, Liu X, et al. VFH* Based Local Path Planning for Mobile Robot[C]//2019 2nd China Symposium on Cognitive Computing and Hybrid Intelligence (CCHI). IEEE, 2019: 18-23.

[6] 周俊, 庄宇辉, 严华. 基于记忆矩阵A~*引导域的VFH算法改进策略[J]. 四川大学学报(自然科学版), 2020(4).

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

机器人避障规划算法之VFH系列算法研究现状 的相关文章

  • linux 中常用的数据库命令

    xfeff xfeff 1 显示数据库 show databases 2 选择数据库 use 数据库名 3 显示数据库中的表 show tables 4 显示数据表的结构 describe 表名 5 显示表中记录 SELECT FROM 表
  • socket编程accept函数返回值的理解

    accept函数返回值成功时返回非负值 xff0c 失败时返回 1 accept函数接受一个客户端请求后会返回一个新的SOCKFD值 xff0c 当有不同的客户端同时有不同请求时 xff0c 会返回不同的SOCKFD的值 这个不同的值和建立
  • 【TEE自学随笔】keystone代码略读(长文多图)

    武大信安在读 xff0c 最近在自学Risc v架构的可信执行环境 本篇内容由队友和我总结而成 xff0c 如有错误欢迎指正交流 keystone是risc v架构的开源tee 利用risc v的pmp来隔离页表 xff0c 进一步缩小了可
  • 二维数组与指针、指针数组、数组指针的用法

    二维数组 和指针 用指针表示二维数组 元素 要用指针处理二维数组 xff0c 首先要解决从存储的角度对二维数组 的认识问题 我们知道 xff0c 一个二维数组 在计算机中存储时 xff0c 是按照先行后列的顺序依次存储的 xff0c 当把每
  • 深剖基类和派生类的虚函数表

    1 当派生类实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数地址不同 xff1b 当派生类不实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数的地址相同 1 派生类重新实
  • C语言中转义字符

    在字符集中 xff0c 有一类字符具有这样的特性 xff1a 当从键盘上输入这个字符时 xff0c 显示器上就可以显示这个字符 xff0c 即输入什么就显示什么 这类字符称为可显示字符 xff0c 如a b c 43 和空格符等都是可显示字
  • c++ 中map 的find 用法

    用find函数来定位数据出现位置 xff0c 它返回的一个迭代器 xff0c 当数据出现时 xff0c 它返回数据所在位置的迭代器 xff0c 如果map中没有要查找的数据 xff0c 它返回的迭代器等于end函数返回的迭代器 xff0c
  • 解决AndroidStudio控制台输出乱码

    方法一 xff1a Help gt Edit Custom VM Options 在最后一行换行加上 xff1a xff08 不要漏掉符号 加好之后重启AndroidStudio xff09 Dfile encoding 61 UTF 8
  • c++--UDP发送接收

    UDP发送接收 头文件 include lt Winsock2 h gt 库 pragma comment lib Ws2 32 lib 连接Sockets相关库 初始化Windows SOCKET WSADATA wsaData if W
  • Airsim Setting up PX4 Hardware-in-Loop 环境搭建教程(windows)

    Airsim Setting up PX4 Hardware in Loop 环境搭建教程 xff08 windows xff09 经过本教程 xff0c 能够通过PX4连接遥控器 xff0c 继而能够控制airsim UE4中四轴模型 目
  • 在PX4 v1.9.2替换姿态控制算法方法

    在PX4 v1 9 2替换姿态控制算法方法 目的是在model中写一个与mc att control类似的model加入自己的姿态控制算法并替换之 目录 姿态控制算法simlink搭建生成并简单说明 PX4 v1 9 2姿态控制接口简单介绍
  • 不必通宵挂机,飞速克隆PX4源码的方法

    不必通宵挂机 xff0c 飞速克隆PX4源码的方法 项目地址 国内github网速 xff0c 那是慢的没法说 xff0c 克隆个PX4源码要半天 xff0c 然后更新子模块 xff0c 那不得需要一夜的时间 xff0c 有时早上一来 xf
  • Simlink与PX4硬件在环仿真(HIL)实现

    Simlink与PX4硬件在环仿真 HIL 实现 介于涉及的知识比较多 xff0c 这里只是简单的介绍一下 xff0c 硬件在环HIL介绍 simlink与PX4通信实现 硬件在环HIL介绍 为来贯彻万物都可以用数学公式表示 xff0c 我
  • MSP430如何给板子下载程序?(IAR MSPFET CCS)

    MSP430如何给板子下载程序 xff1f 这个问题其实很简单 xff0c 但就在前几天的我就吃了很大的亏 xff0c 搞了一天都没搞懂 这篇文章来谈一谈我走过的坑吧 xff0c 希望对你有所帮助 一 下载IAR开发IDE 43 串口下载工
  • ROS中ENU坐标系与无人机中NED坐标系的转换关系理解

    ROS中ENU坐标系与无人机中NED坐标系的转换关系理解 项目地址 无人机中NED坐标理解ENU与NED转换 无人机中NED坐标理解 机体坐标系 xff1a 机体坐标系固连飞机 xff0c 其原点 取在多旋翼的重心位置上 x轴在多旋翼对称平
  • PX4无人机ROS下仿真开发

    PX4无人机ROS下仿真开发 Overview Simulation Px4 control Slam Map Image process Planning Volans 项目地址volans 注 xff1a 有任何疑问都可在issues提
  • FlightPlot安装使用方法

    FlightPlot安装使用方法 下载flightPlot源码下载切换openjdk 版本重启安装flightPlot 下载flightPlot源码 git clone recursive https github com PX4 Flig
  • 基于Ubuntu+Eclipse+GDB+OpenOCD+STlink搭建STM32开发环境

    基于Ubuntu 43 Eclipse 43 GDB 43 OpenOCD 43 STlink搭建STM32开发环境 准备工作 xff1a 一台能够上网的配置还不错的电脑 xff0c stm32开发板 xff0c stlink下载器 本人的
  • APM直升机调试记录

    Author xff1a Bingo Time xff1a 20190601 xff0c V1 0 直升机调试记录 十字盘机械配平上位机调十字盘水平调整直升机在Stabilize模式下悬停调整直升机在AltHold模式下悬停调整直升机在Po
  • 3.3 创建一个 ROS 功能包

    本节主要介绍如何用 catkin 来创建一个新的功能包 xff0c 并且使用前面介绍的 rospack 命令去查看功能包的依赖 3 3 1 catkin 功能包的构成 一个完整的 catkin 功能包需要具备以下几个条件 xff1a 包含一

随机推荐