文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【路径规划】局部路径规划算法——人工势场法(含python实现 | c++实现)

2023-09-01 09:53

关注

文章目录

2.1 引力势场

引力势场主要与汽车和目标点间的距离有关, 距离越大, 汽车所受的势能值就越大; 距离越小, 汽车所受的势能值则越小, 所以引力势场的函数为:
U a t t ( q ) = 1 2 η ρ 2 ( q , q g ) (1) \tag{1} U_{a t t}(q)=\frac{1}{2} \eta \rho^{2}\left(q, q_{g}\right) Uatt(q)=21ηρ2(q,qg)(1)
其中 η \eta η 为正比例增益系数, ρ (q, q g ) \rho\left(q, q_{g}\right) ρ(q,qg) 为一个矢量, 表示汽车的位置 q q q 和目标点位置 qg q_{g} qg 之间的欧式距离 ∣ q − qg ∣ \left|q-q_{g}\right| qqg, 矢量方向是从汽车的位置指向目标点位置。

相应的引力 Fatt  ( q ) F_{\text {att }}(q) Fatt (q) 为引力场的负梯度,代表引力势场函数 U a t t ( q ) U_{att}(q) Uatt(q)的变化最快方向。
F a t t ( q ) = − ∇ U a t t ( q ) = − η ρ ( q , q g ) (2) \tag{2} F_{a t t}(q)=-\nabla U_{a t t}(q)=-\eta \rho\left(q, q_{g}\right) Fatt(q)=Uatt(q)=ηρ(q,qg)(2)

2.2 斥力势场

2.3 合力势场

根据上述定义的引力场函数和斥力场函数,可以得到整个运行空间的复合场,机器人的合力势场大小为机器人所受的斥力势场和引力势场之和,故合力势场总函数为:
U ( q ) = U a t t ( q ) + U r e q ( q ) (5) \tag{5} U(q)=U_{att}(q)+U_{req}(q) U(q)=Uatt(q)+Ureq(q)(5)
所受合力为
F ( q ) = − ∇ U ( q ) = F a t t ( q ) + F r e q ( q ) (6) \tag{6} F(q) =-\nabla U(q)= F_{a t t}(q)+F_{r e q}(q) F(q)=U(q)=Fatt(q)+Freq(q)(6)

合力的方向决定汽车的行驶朝向,合力的大小决定汽车的行驶加速度。

不妨设车辆位置为 ( x , y ) (x, y) (x,y),障碍物位置为 ( xg , yg ) (x_g, y_g) (xg,yg)

根据公式(1),引力势场函数为
U a t t ( q ) = 1 2 η ρ 2 ( q , q g ) ⇒ U a t t ( x , y ) = 1 2 η [ ( x − x g ) 2 + ( y − y g ) 2 ] (7) \tag{7} U_{a t t}(q)=\frac{1}{2} \eta \rho^{2}\left(q, q_{g}\right) \Rightarrow U_{a t t}(x, y)=\frac{1}{2} \eta\left[\left(x-x_{g}\right)^{2}+\left(y-y_{g}\right)^{2}\right] Uatt(q)=21ηρ2(q,qg)Uatt(x,y)=21η[(xxg)2+(yyg)2](7)
故引力势场的负梯度有
− grad ⁡ a t t( x , y ) = − ∇ U a t t( x , y ) = − U a t t , x ′ ( x , y ) i ⃗ − U a t t , y ′ ( x , y ) j ⃗ = − η ( x − x g )i ⃗ − η ( y − y g )j ⃗ = η [ ( x g − x ) i ⃗ + ( y g − y ) j ⃗ ] ⇒ 引 力 大 小 = η ( x − x g ) 2 + ( y g − y ) 2 = η ρ ( q , q g ) (8) \tag{8} \begin{aligned} -\operatorname{grad}_{a t t}(x, y)&=-\nabla U_{a t t}(x, y) \\ &=-U_{a t t, x}^{\prime}(x, y) \vec{i}-U_{a t t, y}^{\prime}(x, y) \vec{j} \\ &=-\eta\left(x-x_{g}\right) \vec{i}-\eta\left(y-y_{g}\right) \vec{j} \\ &=\eta\left[\left(x_{g}-x\right) \vec{i}+\left(y_{g}-y\right) \vec{j}\right] \\ \Rightarrow 引力大小&=\eta \sqrt{\left(x-x_{g}\right)^{2}+\left(y_{g}-y\right)^{2}}=\eta \rho\left(q, q_{g}\right) \end{aligned} gradatt(x,y)=Uatt(x,y)=Uatt,x(x,y)i Uatt,y(x,y)j =η(xxg)i η(yyg)j =η[(xgx)i +(ygy)j ]=η(xxg)2+(ygy)2 =ηρ(q,qg)(8)

同理,斥力势场函数为
U r e q( q ) = 1 2 k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) 2 ⇒ U r e q( x , y ) = 1 2 k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ] 2 (9) \tag{9} \begin{aligned} U_{r e q}(q)=\frac{1}{2} k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right)^{2} \Rightarrow U_{r e q}(x, y)=\frac{1}{2} k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]^{2} \end{aligned} Ureq(q)=21k(ρ(q,q0)1ρ01)2Ureq(x,y)=21k(xx0)2+(yy0)2 1ρ012(9)
斥力势场的负梯度为
− ∇ U r e q ( x , y ) = − U r e q , x ′ ( x , y ) i ⃗ − U r e q , y ′ ( x , y ) j ⃗ (10) \tag{10} -\nabla U_{r e q}(x, y)=-U_{r e q, x}^{\prime}(x, y) \vec{i}-U_{r e q, y}^{\prime}(x, y) \vec{j} Ureq(x,y)=Ureq,x(x,y)i Ureq,y(x,y)j (10)
将公式(10)各项分别展开:
− U r e q , x ′ ( x , y ) i ⃗ = − k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ] [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ] ′i ⃗ = − k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ]{ − 1 2 [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] − 3 2 ⋅ [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] ′ }i ⃗ = k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ]{ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] − 1 2 ( x − x 0 ) }i ⃗ = k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) ⋅ 1 ρ 2 ( q , q 0 ) ⋅ 1 ρ ( q , q 0 ) ⋅ ( x − x 0 )i ⃗ (11-1) \tag{11-1} \begin{aligned} -U_{r e q, x}^{\prime}(x, y) \vec{i} &=-k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]' \vec{i}\\ &=-k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left\{-\frac{1}{2}\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]^{-\frac{3}{2}} \cdot\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]'\right\} \vec{i}\\ &=k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left\{\frac{1}{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]^{-\frac{1}{2}}\left(x-x_{0}\right)\right\} \vec{i}\\ &=k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right) \cdot \frac{1}{\rho^{2}\left(q, q_{0}\right)} \cdot \frac{1}{\rho\left(q, q_{0}\right)} \cdot\left(x-x_{0}\right) \vec{i}\\ \end{aligned} Ureq,x(x,y)i =k(xx0)2+(yy0)2 1ρ01(xx0)2+(yy0)2 1ρ01i =k(xx0)2+(yy0)2 1ρ01{21[(xx0)2+(yy0)2]23[(xx0)2+(yy0)2]}i =k(xx0)2+(yy0)2 1ρ01{(xx0)2+(yy0)21[(xx0)2+(yy0)2]21(xx0)}i =k(ρ(q,q0)1ρ01)ρ2(q,q0)1ρ(q,q0)1(xx0)i (11-1)
− U r e q , y ′ ( x , y ) i ⃗ = − k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ] [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ] ′j ⃗ = − k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ]{ − 1 2 [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] − 3 2 ⋅ [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] ′ }j ⃗ = k [ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 − 1 ρ 0 ]{ 1 ( x − x 0 ) 2 + ( y − y 0 ) 2 [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] − 1 2 ( y − y 0 ) }j ⃗ = k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) ⋅ 1 ρ 2 ( q , q 0 ) ⋅ 1 ρ ( q , q 0 ) ⋅ ( y − y 0 )j ⃗ (11-2) \tag{11-2} \begin{aligned} -U_{r e q, y}^{\prime}(x, y) \vec{i} &=-k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]' \vec{j}\\ &=-k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left\{-\frac{1}{2}\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]^{-\frac{3}{2}} \cdot\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]'\right\} \vec{j}\\ &=k\left[\frac{1}{\sqrt{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}}-\frac{1}{\rho_{0}}\right]\left\{\frac{1}{\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}}\left[\left(x-x_{0}\right)^{2}+\left(y-y_{0}\right)^{2}\right]^{-\frac{1}{2}}\left(y-y_{0}\right)\right\} \vec{j}\\ &=k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right) \cdot \frac{1}{\rho^{2}\left(q, q_{0}\right)} \cdot \frac{1}{\rho\left(q, q_{0}\right)} \cdot\left(y-y_{0}\right) \vec{j}\\ \end{aligned} Ureq,y(x,y)i =k(xx0)2+(yy0)2 1ρ01(xx0)2+(yy0)2 1ρ01j =k(xx0)2+(yy0)2 1ρ01{21[(xx0)2+(yy0)2]23[(xx0)2+(yy0)2]}j =k(xx0)2+(yy0)2 1ρ01{(xx0)2+(yy0)21[(xx0)2+(yy0)2]21(yy0)}j =k(ρ(q,q0)1ρ01)ρ2(q,q0)1ρ(q,q0)1(yy0)j (11-2)

化简后得斥力大小为
− ∇ U r e q( x , y ) = k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) ⋅ 1 ρ 2 ( q , q 0 ) (12) \tag{12} \begin{aligned} -\nabla U_{r e q}(x, y)=k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right) \cdot \frac{1}{\rho^{2}\left(q, q_{0}\right)} \end{aligned} Ureq(x,y)=k(ρ(q,q0)1ρ01)ρ2(q,q0)1(12)

4.1 目标不可达的问题

由于障碍物与目标点距离太近,当汽车到达目标点时,根据势场函数可知,目标点的引力降为零,而障碍物的斥力不为零,此时汽车虽到达目标点, 但在斥力场的作用下不能停下来,从而导致目标不可达的问题。

4.2 陷入局部最优的问题

车辆在某个位置时,无法向前搜索避障路径。

出现局部最优主要有两种情况:

4.3 解决方案

解决方案可参考资料2和资料3,这两篇论文均给出了不一样的解决方案,但思路几乎差不多。下面以参考资料2给出的方案进行简单叙述。

4.3.1 改进障碍物斥力势场函数

通过改进障碍物斥力势场函数来解决局部最优和目标不可达的问题;在传统人工势场法的障碍物斥力场模型中加入调节因子 ρgn \rho_{g}^{n} ρgn, 使汽车只有到达目标点时, 斥力和引力才同时减小到零, 从而使局部最优和目标不可达的问题得到解决。

改进后的斥力场函数为:
U req  ( q ) = { 1 2 k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) 2 ρ g n , 0 ≤ ρ ( q , q 0 ) ≤ ρ 0 0 , ρ ( q , q 0 ) > ρ 0 (13) \tag{13} U_{\text {req }}(q)= \begin{cases}\frac{1}{2} k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right)^{2} \rho_{g}^{n}, & 0 \leq \rho\left(q, q_{0}\right) \leq \rho_{0} \\ 0, & \rho\left(q, q_{0}\right) > \rho_{0}\end{cases} Ureq (q)=21k(ρ(q,q0)1ρ01)2ρgn,0,0ρ(q,q0)ρ0ρ(q,q0)>ρ0(13)
ρgn \rho_{g}^{n} ρgn 为汽车与目标点的距离,式中 n n n为可选的正常数。

{ F r e q = F r e q 1 + F r e q 2 F r e q 1 = k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) ρ g n ρ 2 ( q , q 0 ) F r e q 2 = n 2 k ( 1 ρ ( q , q 0 ) − 1 ρ 0 ) 2 ρ g n − 1 (14) \tag{14} \left\{\begin{array}{l} F_{req}=F_{req1 }+F_{req2 }\\ \\ F_{req1 }=k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right) \frac{\rho_{g}^{n}}{\rho^{2}\left(q, q_{0}\right)} \\ F_{req2 }=\frac{n}{2} k\left(\frac{1}{\rho\left(q, q_{0}\right)}-\frac{1}{\rho_{0}}\right)^{2} \rho_{g}^{n-1} \end{array}\right. Freq=Freq1+Freq2Freq1=k(ρ(q,q0)1ρ01)ρ2(q,q0)ρgnFreq2=2nk(ρ(q,q0)1ρ01)2ρgn1(14)

F r e q 1 F_{req1 } Freq1的方向为障碍物指向车辆; F r e q 2 F_{req2} Freq2的方向为车辆指向目标点。

改进的斥力场函数中加入了汽车与目标点间的距离,这样使汽车在驶向目标的过程中,受到的引力和斥力同时在一定程度上减小,且只有在汽车到达目标点时,引力和斥力才同时减小为零,即目标点成为势能值的最小点,从而使局部最优和目标不可达的问题得到解决。

4.3.2 道路边界斥力势场

如图,假设每一条车道宽度为 d d d,有2条车道(故道路宽度为 2 d 2d 2d)。车辆宽度为 w w w,故车辆在每一条车道内允许调整的横向移动范围为 d − w d-w dw

通过建立道路边界斥力势场以限制汽车的行驶区域,并适当考虑车辆速度对斥力场的影响
F req,edge  = { η edge  ⋅ v ⋅ e ( − d 2 − y ) , − d + w / 2 < y ≤ − d / 2   车道1 1 3 η edge  ⋅ y 2 , − d / 2 < y ≤ − w / 2   车道1 − 1 3 η edge  ⋅ y 2 , w / 2 < y ≤ d / 2   车道2 η edge  ⋅ v ⋅ e ( y − d 2 ) , d / 2 < y ≤ d − w / 2   车道2 (15) \tag{15} F_{\text {req,edge }}= \begin{cases}\eta_{\text {edge }} \cdot v \cdot e^{\left(\frac{-d}{2}-y\right)}, & -d+w / 2Freq,edge =ηedge ve(2dy),31ηedge y2,31ηedge y2,ηedge ve(y2d),d+w/2<yd/2 车道1d/2<yw/2 车道1w/2<yd/2 车道2d/2<ydw/2 车道2(15)

式中 ηedge  \eta_{\text {edge }} ηedge 是常数, v v v为车辆速度, y y y为车辆横向坐标。.

下面简单实现改进后的人工势场法。

效果如下:

代码仓库请移步github

由于在自动驾驶中算法实现一般使用C++,所以我也使用C++实现了相关功能,代码结构相比python代码封装得更好一些,更加清晰,这边就不再做相关代码解释了。完整代码详见另一个github仓库

来源地址:https://blog.csdn.net/weixin_42301220/article/details/125155505

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯