阅读本文需要的基础知识为:

  • 理解机器人的构型空间。建议阅读:机器人运动规划中的C space怎样理解?为什么不直接在笛卡尔坐标系下运算呢?

本文的实现程序与使用说明见我的学习工具箱:小明工坊:【个人开源】机器人运动规划学习工具箱使用说明

基本原理

1.概述

我们打两个比方来说明人工势场法的作用机理。首先,我们把构型空间比作一个电势场平面,机器人(的当前构型)比作空间中一点。如果让机器人的起点和障碍物带正电荷,终点带负电荷,机器人带正电荷。由于同性电荷相斥,异性电荷相吸的原理,机器人将会在电场力的作用下沿着某条路径向终点移动 ,并避开带正电荷的障碍物,如图1所示。

图 1 电势场

类似的,我们也可以把构型空间比作一个有起伏地形的区域。其中,起点和障碍物位于较高的区域,终点位于较低的区域,机器人视作一个球体。那么在重力的作用下,机器人将沿着某条轨迹从较高的起点滑落到较低的终点,并避开较高的障碍物。如图2[2]所示。

图 2 重力势场 (图片来源于参考文献[2])

以上的两个例子其实就是电势场与重力势场的作用机制,电势场和重力势场都是自然势场。而人工势场法就是在已知起点、终点和障碍物位置的情况下,构建一个人工势场来模仿这种作用机制。人工势场法的优点在于,它其实是一种反馈控制策略,对控制和传感误差有一定的鲁棒性;缺点在于存在局部极小值问题,因此不能保证一定能找到问题的解。

2.引力势场和斥力势场(Additive Attractive/Repulsive Potential)

我们利用势函数

来建立人工势场。

势(场)函数是一种可微函数,空间中某点处势函数值的大小,代表了该点的势场强度。最简单的势函数是引力/斥力势函数。其作用思路很简单:让目标对机器人产生吸引力,障碍物对机器人产生排斥力。某点

处的势函数
表达为引力势和斥力势之和:

其中,最常见的引力势函数表达式如下:

——引力增益
——当前点
到目标点
之间的距离

最常见的斥力势函数表达式如下:

——点
与其最近障碍物的距离
——斥力增益
——障碍物的作用距离阈值,大于此距离的障碍物不会产生斥力影响

当然,以上引力和斥力势函数的设计在某些情况下会产生问题,因此也有许多改进方法,这个我们以后再说。

3.梯度下降法(Gradient Descent)

如果把某点

处的势函数的取值
看作该点的能量大小,那么

梯度

则可以看作该点的力向量,其定义为:

可以看出,某点处梯度的方向即为势函数增长最快的方向

梯度下降法,就是让机器人从初始点开始,不停地沿着梯度的反方向行走,直到梯度为0。用伪代码表示如下:

输入:一种计算q点处梯度的方法∇U (q)
输出:一组轨迹序列{q(0), q(1), ..., q(i)}
q(0) = q_start
i = 0
while ∇U (q(i)) ≠ 0 doq(i + 1) = q(i) + α(i)∇U (q(i))i = i + 1
end while

其中步长 α 的选择比较重要,如果太小,计算速度会变慢;太大,机器人可能会“跨进”障碍物中。

实现方法

下面以运动规划学习工具箱中的人工势场方法 pf_planning() 为例,说明人工势场法的实现步骤:

1.预处理

首先读入包含障碍物的构型空间的bmp图像,为了便于碰撞检测,将其二值化。并读入引力增益、斥力增益、障碍物作用范围、最大搜索次数等参数。

## 预处理

原图像
二值化图像

2.创建势场图

对于每一个像素点,按照前文所述势场函数建立势场图

## 创建势场图

3.梯度下降法

在已经建立好的势场图中,按照前文所述的方法执行梯度下降法:

point_current 

4.绘图

在给出的示例图中分别执行人工势场法,得到结果如下:

问题与改进说明

本文仅仅演示了最简单的人工势场法的实现。要想在实际问题中进行应用,人工势场法往往会面临一些问题,需要进行相应的改进,下面对常见问题及其解决方法进行简要说明:

引力势函数的改进:现有引力势函数的取值,与

成正比。在这样的设计中,如果当前点与目标点的距离太远,会形成很大的引力势,使得机器人的运动速度过快。对此,我们可以采用分段的引力势函数解决问题,即在距离较远时降低
的幂。

斥力势函数的改进:现有斥力势函数的取值,取决于当前点与最近障碍物的距离。在这样的设计中,如果当前点与两个障碍物等距,可能会造成机器人在障碍物间的中线上来回跳动。对此,我们可以重新定义斥力势函数为当前点与最近的障碍物点之间的距离。即不考虑障碍物本身的坐标位置,只要障碍物上的某点离当前点最近,就以此距离定义斥力势函数。

距离的计算:一般来说,我们用直线距离来度量两点间的距离。但对于像素图或网格图,如何快速且合理地计算出两个像素点或网格之间的距离呢?参考文献[1]给出了一种 Brushfire算法 以供使用

局部极小值问题:如图所示,人工势场法有时候会遇到局部极小值问题。在局部极小值点,虽然梯度为零,但并不是我们想要的终点。对这样的情况,我们一般引入抽样规划的思想,在局部最小值处加入一个扰动(随机行走)或回溯,以期跳出局部极小值。也可采用一种名为波前规划(wave-front plann)的方法,通过引入时间参数来消除局部最小值的问题。

人工势场法陷入局部极小值

参考文献

[1] Choset H, Lynch K, Hutchinson S, et al. Principles of robot motion: Theory, algorithms, and implementations. MIT Press, Cambridge, MA[J]. Proceedings of the Society for Experimental Biology & Medicine Society for Experimental Biology & Medicine, 2005, 147(1):512-512.

[2] 人工势场法(Artificial Potential Field Method)的学习

人工势场法matlab讲解_【机器人路径规划】人工势场法相关推荐

  1. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...

       若步智能                  移动这一简单动作,对于人类来说相当容易,但对机器人而言就变得极为复杂,说到机器人移动就不得不提到路径规划,路径规划是移动机器人导航最基本的环节,指的是 ...

  2. 机器人路径规划_人工势场法

    机器人路径规划_人工势场法 原理 人工势场法是由Khatib提出的一种虚拟力法.原理是:将机器人在环境中的运动视为一种机器人在虚拟的人工受力场的运动.障碍物对机器人产生斥力,目标点对机器人产生引力,引 ...

  3. 基于人工势场法和果蝇优化算法的路径规划(Matlab代码实现)

    目录 1 概述 2 运行结果 2.1 算例1 2.2 算例2   3 Matlab代码实现  4 参考文献 1 概述 近年来,智能机器人逐渐应用于医疗服务﹑航空等众多领域.路径规划作为机器人实现智能自 ...

  4. 机器人路径规划_人工蜂群算法

    机器人路径规划_人工蜂群算法 原理 ABC(Artificial BeesColony)算法最先由Basturk等人提出并应用于函数优化问题,蜂群采蜜行为与函数优化问题对应关系如表1所示.由表1可知, ...

  5. 多机器人路径规划的代码_泛在电力物联网 | 基于IACOABC 算法的变电站巡检机器人路径规划...

    区块链 | 方 响等 分布式新能源接入下的区块链共识机制研究 区块链 | 颜 拥等 基于区块链的电力数据保全应用研究 区块链 | 能源互联网中的区块链应用:优势.场景与案例 <浙江电力>2 ...

  6. 【 无错版】基于蚁群算法的机器人路径规划matlab程序代码实现

    文章目录 1. 按 2. 介绍 3. matlab实现 3.1. 代码 3.2. 效果 1. 按 网上有发的这个算法的错误版的,不知道发的意义何在,是在误人子弟吗???在此对其行为表示强烈的谴责. 错 ...

  7. 栅格法路径算法C语言,基于地图栅格与QPSO算法结合的机器人路径规划方法与流程...

    本发明属于机器人路径规划领域,提出一种基于地图栅格与QPSO结合的机器人路径规划方法. 背景技术: 移动机器人路径规划是寻找一条无碰撞的可行路径问题的方法.近些年,群智能优化算法逐渐成为移动机器人路径 ...

  8. 【路径规划】基于matlab Hybrid A_Star算法机器人路径规划【含Matlab源码 1390期】

    ⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...

  9. 灭火机器人路径规划matlab_机器人路径规划MATLAB源码

    机器人路径规划MATLAB源码 基于遗传算法的机器人路径规划 MATLAB 源码算法的思路如下:取各障碍物顶点连线的中点为路径点,相互连接各路径点,将机器人移动的起点和终点限制在各路径点上,利用 Di ...

  10. 机器人路径规划之分段三次Hermite插值(PCHIP) [包括Python和Matlab代码实现]

    前言 在机器人的路径规划中针对离散采样点做插值计算生成平滑的曲线轨迹也是挺重要的一部分,本文主要介绍一下目前使用较多也是个人觉得挺好用的一个插值方法--分段三次 Hermite 插值(PCHIP),并 ...

最新文章

  1. Postgresql:删除及查询字段中包含单引号的数据
  2. Python切片(入门7)
  3. html5实现获取地理位置信息并定位
  4. [实验]-从汇编代码来看volatile关键字的作用
  5. DataSet case sensitive issue
  6. 如何删除Win All的流氓程序文件
  7. php ajax无刷新翻页,php ajax 无刷新翻页实现代码
  8. AI 技术争鸣!2019 AI 开发者大会盛大开幕
  9. highcharts注销
  10. 53. 使 Ajax 可缓存(14)
  11. zabbix 3.0.7 for Centos 7.2 安装
  12. 推荐一款基于.Net Core开发简约漂亮的 WPF UI库
  13. 刘一男词汇课(从abdomen到enormous):书上有路勤为径,学海无涯“懂“作舟
  14. 将python 脚本转换为exe格式
  15. [Growth]Steve Jobs——Follow your heart and intuition, everything else is secondary.
  16. Android电源键亮灭屏流程
  17. http前后端传参写法
  18. 2013夏-一篇杂文
  19. FHQ Treap 详解
  20. 产业链图谱:2021年中国半导体产业链图谱|产业链全景图

热门文章

  1. OpenCV+QT5在Window下的环境配置记录
  2. QueryDSL介绍
  3. 借助Bodymovin播放svg动画
  4. sql插入不重复的数据
  5. Java编写五线谱上的音符_新手读懂五线谱
  6. Java反编译工具-luyten
  7. oracle 如何修改表字段的类型或者长度
  8. 华为荣耀手机指令代码大全_华为手机测试指令代码大全,华为手机的朋友快来测试一下吧...
  9. 光端机和无缝带拼接混合矩阵切换器的配搭应用-某市户外广告投屏解决
  10. Linux环境下搭建Java Web测试环境的具体步骤