0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

决策规划系列:运动规划常用算法

3D视觉工坊 来源:十一号组织 2023-04-17 09:46 次阅读

有了全局路径参考信息,有了局部环境信息了,有了行为决策模块输入的决策信息,下一步自然而然的就要进行运动规划,从而生成一条局部的更加具体的行驶轨迹,并且这条轨迹要满足安全性和舒适性要求。

考虑到车辆是一个具有巨大惯性的铁疙瘩且没有瞬间移动的功能,如果仅考虑瞬时状态的行驶轨迹,不规划出未来一段时间有前瞻性的行驶轨迹,那么很容易造成一段时间后无解。因此,运动规划生成的轨迹是一种由二维空间和一维时间组成的三维空间中的曲线,是一种偏实时的路径规划。

运动规划的第一步往往采用随机采样算法,即走一步看一步,不断更新行驶轨迹。代表算法是基于采样的方法:PRM、RRT、Lattice。这类算法通过随机采样的方式在地图上生成子节点,并与父节点相连,若连线与障碍物无碰撞风险,则扩展该子节点。重复上述步骤,不断扩展样本点,直到生成一条连接起点到终点的路径。

PRM

概率路标法 (Probabilistic Road Maps, PRM),是一种经典的采样方法,由Lydia E.等人在1996年提出。PRM主要包含三个阶段,一是采样阶段,二是碰撞检测阶段,三是搜索阶段。

图25为已知起点A和终点B的地图空间,黑色空间代表障碍物,白色空间代表可通行区域。在采样阶段中,PRM首先在地图空间进行均匀的随即采样,也就是对地图进行稀疏采样,目的是将大地图简化为较少的采样点。

在碰撞检测阶段,剔除落在障碍物上的采样点,并将剩下的点与其一定距离范围内的点相连,同时删除穿越障碍物的连线,从而构成一张无向图。

在搜索阶段,利用全局路径规划算法章节介绍的搜索算法(Dijkstra、A*等)在无向图中进行搜索,从而找出一条起点A到终点B之间的可行路径。

e93690ec-dcaa-11ed-bfe3-dac502259ad0.png

图27 PRM工作原理示意图(来源:https://mp.weixin.qq.com/s/WGOUf7g0C4Od4X9rnCfqxA)

算法步骤可以总结为:

(1)构造无向图G =(V,E),其中V代表随机采样的点集,E代表两采样点之间所有可能的无碰撞路径,G初始状态为空。

(2)随机撒点,并选取一个无碰撞的点c(i)加入到V中。

(3)定义距离r,如果c(i)与V中某些点的距离小于r,则将V中这些点定义为c(i)的邻域点。

(4)将c(i)与其邻域点相连,生成连线t,并检测连线t是否与障碍物发生碰撞,如果无碰撞,则将t加入E中。

(5)重复步骤2-4,直到所有采样点(满足采样数量要求)均已完成上述步骤。

(5)采用图搜索算法对无向图G进行搜索,如果能找到起始点A到终点B的路线,说明存在可行的行驶轨迹。

PRM算法相比基于搜索的算法,简化了环境、提高了效率。但是在有狭窄通道场景中,很难采样出可行路径,效率会大幅降低。

RRT

快速探索随机树(Rapidly Exploring Random Trees,RRT),是Steven M. LaValle和James J. Kuffner Jr.在1998年提出的一种基于随机生长树思想实现对非凸高维空间快速搜索的算法。与PRM相同的是两者都是基于随机采样的算法,不同的是PRM最终生成的是一个无向图,而RRT生成的是一个随机树。RRT的最显著特征就是具备空间探索的能力,即从一点向外探索拓展的特征。

RRT分单树和双树两种类型,单树RRT将规起点作为随机树的根节点,通过随机采样、碰撞检测的方式为随机树增加叶子节点,最终生成一颗随机树。而双树RRT则拥有两颗随机树,分别以起点和终点为根节点,以同样的方式进行向外的探索,直到两颗随机树相遇,从而达到提高规划效率的目的。

下面以图28所示的地图空间为例介绍单树RRT算法的实现过程。在此地图空间中,我们只知道起点A和终点B以及障碍物的位置(黑色的框)。

e93f160e-dcaa-11ed-bfe3-dac502259ad0.png

图28 RRT算法举例的地图空间

对于单树RRT算法,我们将起点A设置为随机树的根,并生成一个随机采样点,如图27所示,随机采样点有下面这几种情况。

(1)随机采样点1落在自由区域中,但是根节点A和随机采样点1之间的连线存在障碍物,无法通过碰撞检测,采样点1会被舍弃,重新再生成随机采样点。

(2)随机采样点2落在障碍物的位置,采样点2也会被舍弃,重新再生成随机采样点。

(3)随机采样点3落在自由区域,且与根节点A之间的连线不存在障碍物,但是超过根节点的步长限制。但此时这个节点不会被简单的舍弃点,而是会沿着根节点和随机采样点3的连线,找出符合步长限制的中间点,将这个中间点作为新的采样点,也就是图29中的4。

e94368e4-dcaa-11ed-bfe3-dac502259ad0.png

图29 不同随机采样点举例

接着我们继续生成新的随机采样点,如果新的随机采样点位于自由区域,那么我们就可以遍历随机树中已有的全部节点,找出距离新的随机采样点最近的节点,同时求出两者之间的距离,如果满足步长限制的话,我们将接着对这两个节点进行碰撞检测,如果不满足步长限制的话,我们需要沿着新的随机采样点和最近的节点的连线方向,找出一个符合步长限制的中间点,用来替代新的随机采样点。最后如果新的随机采样点和最近的节点通过了碰撞检测,就意味着二者之间存在边,我们便可以将新的随机采样点添加进随机树中,并将最近的点设置为新的随机采样点的父节点。

重复上述过程,直到新的随机采样点在终点的步长限制范围内,且满足碰撞检测。则将新的随机采样点设为终点B的父节点,并将终点加入随机树,从而完成迭代,生成如图30所示的完整随机树。

e9492356-dcaa-11ed-bfe3-dac502259ad0.png

图30随机树结算结果示例

相比PRM,RRT无需搜索步骤、效率更高。通过增量式扩展的方式,找到路径后就立即结束,搜索终点的目的性更强。但是RRT作为一种纯粹的随机搜索算法,对环境类型不敏感,当地图空间中存在狭窄通道时,因被采样的概率低,导致算法的收敛速度慢,效率会大幅下降,有时候甚至难以在有狭窄通道的环境找到路径。

图31展示了 RRT应对存在狭窄通道地图空间时的两种表现,一种是RRT很快就找到了出路,一种是一直被困在障碍物里面。

e9507098-dcaa-11ed-bfe3-dac502259ad0.png

图31 RRT面对狭窄通道时的表现

围绕如何更好的“进行随机采样”、“定义最近的点”以及“进行树的扩展”等方面,诞生了多种改进型的算法,包括双树RRT-Connect(双树)、lazy-RRT, RRT-Extend等。

PRM和RRT都是一个概率完备但非最优的路径规划算法,也就是只要起点和终点之间存在有效的路径,那么只要规划的时间足够长,采样点足够多,必然可以找到有效的路径。但是这个解无法保证是最优的。

采用PRM和RRT等随机采样算法生成的行驶轨迹,大多是一条条线段,线段之间的曲率也不不连续,这样的行驶轨迹是不能保证舒适性的,所以还需要进一步进行曲线平滑、角度平滑处理。代表算法是基于曲线插值的方法:RS曲线、Dubins曲线、多项式曲线、贝塞尔曲线和样条曲线等。

所有基于曲线插值方法要解决的问题就是:在图32上的若干点中,求出一条光滑曲线尽可能逼近所有点。下文以多项式曲线和贝塞尔曲线为例,介绍曲线插值算法的示例。

e9588f76-dcaa-11ed-bfe3-dac502259ad0.png

图32 曲线插值方法要解决的问题描述

多项式曲线

找到一条曲线拟合所有的点,最容易想到的方法就是多项式曲线。常用的有三阶多项式曲线、五阶多项式曲线和七阶多项式曲线。理论上只要多项式的阶数足够高,就可以拟合各种曲线。但从满足需求和工程实现的角度,阶数越低越好。

车辆在运动规划中,舒适度是一个非常重要的指标,在物理中衡量舒适性的物理量为跃度(Jerk),它是加速度的导数。Jerk的绝对值越小意味着加速度的变化越平缓,加速度的变化越平缓意味着越舒适。而五次多项式曲线则被证明是在运动规划中可以使Jerk比较小的多项式曲线。

以图30所示换道场景为例,已知Frenet坐标系下换道起点和终点的六个参数s0、v0、a0、st、vt、at,采用横纵向解耦分别进行运动规划的方法,可得横向位置x(t)和纵向位置y(t)关于时间t的五次多项式表达式。

e9697bba-dcaa-11ed-bfe3-dac502259ad0.png

五次多项式中存在六个未知量,将起点和终点已知的六个参数代入便可这个六个未知量。然后根据时间t进行合并即可得到横纵向联合控制的曲线,即最终运动规划的曲线。

贝塞尔曲线

对于比较少的点来说,采用多项式曲线非常合理。但是当点比较多时,为了逼近所有点,就不得不增加多项式的次数,而由此带来的负面影响就是曲线震荡。退一步讲,即使震荡能够被消除,获得的曲线由于存在非常多的起伏,也不够光顺。而贝塞尔曲线的出现,正好解决了上述问题。

1959年,法国数学家保尔·德·卡斯特里使用独家配方求出贝塞尔曲线。1962年,法国雷诺汽车公司工程师皮埃尔·贝塞尔将自己在汽车造型设计的一些心得归纳总结,并广泛发表。贝塞尔在造型设计的心得可简单总结为:先用折线段勾画出汽车的外形大致轮廓,再用光滑的参数曲线去逼近这个折线多边形。

绘制贝塞尔曲线之前,我们需要知道起点和终点的参数,然后再提供任意数量的控制点的参数。如果控制点的数量为0,则为一阶贝塞尔曲线,如果控制点的数量为1,则为二阶贝塞尔曲线,如果控制点的数量为2,则为三阶贝塞尔曲线,依次类推。不论是起点、终点还是控制点,它们均代表坐标系下的一个向量。

下面我们以经典的二阶贝塞尔曲线为例,介绍其绘制方法。如图33所示,P0和P2为已知的参数的起点和终点,P1为已知参数的控制点。首先我们按照起点、控制点、终点的顺序依次连接,生成两条直线。

e9747344-dcaa-11ed-bfe3-dac502259ad0.png

图33 二阶贝塞尔曲线示例

接着我们以每条直线的起点开始,向各自的终点按比例t取点,如图中的A和B。随后我们将A和B相连得到一条直线,也按相同的比例t取点,便可得到C点,这也是二阶贝塞尔曲线在比例为t时会经过的点。比列t满足如下的公式。

e980789c-dcaa-11ed-bfe3-dac502259ad0.png

当我们比例t一点点变大(从0到1),就得到起点到终点的所有贝塞尔点,所有点相连便绘制出完整的二阶贝塞尔曲线C(t),用公式表达为。

e9894d6e-dcaa-11ed-bfe3-dac502259ad0.png

由二阶贝塞尔曲线拓展到N阶贝塞尔曲线,可得数学表达式如下。

e98fbb2c-dcaa-11ed-bfe3-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PRM
    PRM
    +关注

    关注

    0

    文章

    14

    浏览量

    4217
  • RRT
    RRT
    +关注

    关注

    0

    文章

    12

    浏览量

    1081
  • Dubins
    +关注

    关注

    0

    文章

    2

    浏览量

    1894

原文标题:决策规划系列:运动规划常用算法

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VADv2:基于概率性规划的端到端自动驾驶

    MLP回归出规划轨迹,无法应对环境信息和决策规划之间不明确的映射关系。同时基于神经网络输出的轨迹无法保证满足运动学约束,仍需要后端的轨迹优化。
    的头像 发表于 02-22 10:21 572次阅读
    VADv2:基于概率性<b class='flag-5'>规划</b>的端到端自动驾驶

    ROS Motion Planning运动规划库如何安装相关依赖

    下载/克隆ROS Motion Planning运动规划库 可以执行以下两条指令来从Github上克隆ROS Motion Planning运动规划库至我们上一步创建的工作空间 cd
    的头像 发表于 11-26 17:29 744次阅读

    全局路径规划RRT算法原理

    无人驾驶路径规划 众所周知,无人驾驶大致可以分为三个方面的工作:感知,决策及控制。 路径规划是感知和控制之间的决策阶段,主要目的是考虑到车辆动力学、机动能力以及相应规则和道路边界条件下
    的头像 发表于 11-24 15:57 470次阅读

    机器人路径基于采样的规划

    路径规划算法主要可分成两种,一种是基于搜索结果的规划,另一类便是本文中将要提及的基于采样的规划。 一般而言,基于搜索的规划(如Astar)通常是运行在栅格地图上的。当栅格的分辨率越大时
    的头像 发表于 11-16 15:45 223次阅读
    机器人路径基于采样的<b class='flag-5'>规划</b>

    机器人技术中常用的路径规划算法的开源库

    如何规划机器人的运动方式是机器人开发领域的一大课题,本文分享GitHub的一个机器人技术中常用的路径规划算法的开源库,并用动图直观演示运行过程。其中大部分代码由Python实现。
    的头像 发表于 10-21 09:36 462次阅读
    机器人技术中<b class='flag-5'>常用</b>的路径<b class='flag-5'>规划算法</b>的开源库

    机器人基于搜索和基于采样的路径规划算法

    基于搜索的路径规划算法已经较为成熟且得到了广泛应用,常常被用于游戏中人物和移动机器人的路径规划
    发表于 10-13 14:23 199次阅读
    机器人基于搜索和基于采样的路径<b class='flag-5'>规划算法</b>

    基于贪婪算法的配电网网格负荷预测与规划

    u3000针对配电网网格化分层负荷预测横向收集数据繁杂、可操作性低等问题,设计无后效性的贪婪算法。该算法采用自顶而下的人机合作方式进行贪婪选择,使用土地综合分类法重新划分用地类型,确定最佳分配因子
    发表于 09-22 08:15

    使用激光雷达和运动捕捉进行自主路径规划

    电子发烧友网站提供《使用激光雷达和运动捕捉进行自主路径规划.zip》资料免费下载
    发表于 06-27 09:37 0次下载
    使用激光雷达和<b class='flag-5'>运动</b>捕捉进行自主路径<b class='flag-5'>规划</b>

    自动驾驶轨迹规划之路径规划总结

    接下来的几篇文章将主要围绕着全局路径规划的常见算法展开。全局路径规划与局部路径规划不同,全局路径规划是主导全局,探求的是 整个地图中,出发
    发表于 06-07 14:23 0次下载
    自动驾驶轨迹<b class='flag-5'>规划</b>之路径<b class='flag-5'>规划</b>总结

    MCTS自动驾驶规划

    首先,我们给MCTS下两个定义。第一,MCTS是一个决策规划算法;第二,MCTS是一个rollout算法。不同之处在于MCTS中会部分的保存值函数,从而能够指导仿真产生更高回报值 的轨迹
    发表于 06-06 10:41 0次下载
    MCTS自动驾驶<b class='flag-5'>规划</b>

    自动驾驶综述之定位、感知、规划常见算法汇总

    自驾车自动驾驶系统的体系结构一般分为感知系统和决策系统。感知系统一般分为许多子系统,负责自动驾驶汽车定位、静态 障碍物测绘、移动障碍物检测与跟踪、道路测绘、交通信号检测与识别等任务。决策系统通常被划分为许多子系统,负责诸如 路径规划
    发表于 06-02 16:11 0次下载
    自动驾驶综述之定位、感知、<b class='flag-5'>规划</b>常见<b class='flag-5'>算法</b>汇总

    自动驾驶决策规划算法第一章笔记

    第一章 自动驾驶决策规划算法数学基础 第一节:决策规划算法的地位和作用 该笔记来自b站up主(偶像):憨厚老实的老王 视频链接主页 第二节:为什么
    发表于 06-02 14:17 0次下载
    自动驾驶<b class='flag-5'>决策</b><b class='flag-5'>规划算法</b>第一章笔记

    自动驾驶决策规划模块算法介绍

    在自动驾驶整个软件框架中,决策规划模块有着重要的作用。决策规划模块一般也叫Planning模块,在整个自动驾驶系统 中,Planning模块相当于人类驾驶员的大脑,它的上游是地图、导
    发表于 06-01 15:21 0次下载
    自动驾驶<b class='flag-5'>决策</b><b class='flag-5'>规划</b>模块<b class='flag-5'>算法</b>介绍

    Apollo:规划技术功能概述

    在自动驾驶系统中,与人类驾驶员对比,感知模块相当于人类眼和耳朵; 地图搜索路径和车道级别的路径规划,相当于人脑对道路的记忆和搜索; 最后决策规划功能,相当于人类对道路环境和客观世界的反应和判断
    发表于 06-01 15:19 0次下载
    Apollo:<b class='flag-5'>规划</b>技术功能概述

    自动驾驶汽车的规划与控制

    (Planning&.Control)在广义上可以划分成自 动驾驶汽车路由寻径(Routing),行为决策(BehavioralDecision),运动规划(Motion Planning),以及控制(Control)等几个部
    发表于 06-01 14:48 0次下载
    自动驾驶汽车的<b class='flag-5'>规划</b>与控制