• 基于贝塞尔曲线(Bézier Curve)与硬约束的轨迹优化方法


    0 思想

    这个方法参考的是高老师的一篇论文,注意下方图片的黄色区域,这个方法的思想就是,这个黄色区域是与障碍物没有碰撞的,假设我们能把我们的轨迹约束在这些区域里,那么我们肯定也能找到一条没有碰撞的曲线。


    在这里插入图片描述


    但是呢,之前我们选择的曲线表达式,也就是在 M i n i m u m Minimum Minimum S n a p Snap Snap当中使用的多项式曲线表达式,如下所示:

    p μ ( t ) = { ∑ j = 0 N η 1 j ( t − T 0 ) j T 0 ≤ t ≤ T 1 ∑ j = 0 N η 2 j ( t − T 1 ) j T 1 ≤ t ≤ T 2 ⋮ ⋮ ∑ j = 0 N η M j ( t − T M − 1 ) j T M − 1 ≤ t ≤ T M p_{\mu}(t)=\left\{

    j=0Nη1j(tT0)jT0tT1j=0Nη2j(tT1)jT1tT2j=0NηMj(tTM1)jTM1tTM" role="presentation" style="position: relative;">j=0Nη1j(tT0)jT0tT1j=0Nη2j(tT1)jT1tT2j=0NηMj(tTM1)jTM1tTM
    \right. pμ(t)= j=0Nη1j(tT0)jj=0Nη2j(tT1)jj=0NηMj(tTM1)jT0tT1T1tT2TM1tTM

    将这种多项式的曲线约束在黄色的约束里面是非常麻烦的,所以想到了用另外一种曲线来代替,这边使用的是贝塞尔曲线

    1 贝塞尔曲线(Bézier Curve)


    在这里插入图片描述


    这条贝塞尔曲线是在蓝色的凸多边形里面,贝塞尔曲线有一个凸包特性,这个曲线会在一个凸包里面,假设这个凸包是在上方黄色的安全区域里面,那么就可以把轨迹约束在安全区域里面了。

    1.1 贝塞尔曲线的构造

    b n ( t ) = b 0 n ( t ) = ∑ j = 0 n b j B j n ( t ) \mathbf{b}^n(t)=\mathbf{b}_0^n(t)=\sum_{j=0}^n \mathbf{b}_j B_j^n(t) bn(t)=b0n(t)=j=0nbjBjn(t)

    可以看出,这个 b j b_j bj就是控制点,对应的是上图当中的小黑点, n = 10 n = 10 n=10表示贝塞尔曲线的阶数, 10 10 10阶是最高的阶数了, 10 10 10阶的贝塞尔曲线是有 11 11 11个控制点的,假设有 m m m个控制点,其阶数就是 n − 1 n - 1 n1的。 b j b_j bj即为控制点, B j B_j Bj即为伯恩斯坦多项式( n n n次的标量多项式)

    构造步骤:可以看看大佬的Blog


    在这里插入图片描述
    可以看出贝塞尔曲线的凸包特性。


    贝塞尔曲线方程完全展开:
    B i n ( t ) = ( n i ) t i ( 1 − t ) n − i B_i^n(t)=\left(

    ni" role="presentation" style="position: relative;">ni
    \right) t^i(1-t)^{n-i} Bin(t)=(ni)ti(1t)ni
    n 、 i n、i ni就是组合的表达形式,二次项的形式。

    1.2 贝塞尔曲线的转化

    上述已经说了,又变成了二次项的形式,
    b 0 1 ( t ) = ( 1 − t ) b 0 + t b 1 b 1 1 ( t ) = ( 1 − t ) b 1 + t b 2 b 0 2 ( t ) = ( 1 − t ) b 0 1 + t b 1 1 b 0 2 ( t ) = ( 1 − t ) 2 b 0 + 2 t ( 1 − t ) b 1 + t 2 b 2

    b01(t)=(1t)b0+tb1b11(t)=(1t)b1+tb2b02(t)=(1t)b01+tb11b02(t)=(1t)2b0+2t(1t)b1+t2b2" role="presentation" style="position: relative;">b01(t)=(1t)b0+tb1b11(t)=(1t)b1+tb2b02(t)=(1t)b01+tb11b02(t)=(1t)2b0+2t(1t)b1+t2b2
    b01(t)b11(t)b02(t)b02(t)=(1t)2b0+2t(1t)b1+t2b2=(1t)b0+tb1=(1t)b1+tb2=(1t)b01+tb11

    所以,就可以将原先的多项式曲线表达形式,进行贝塞尔曲线的转化,就是把多项式曲线,重新展开,再进行排列,又回到了多项式的形式,所以,贝塞尔曲线就是一种特殊的多项式曲线。

    所以,成为多项式曲线,之前在 M i n i m u m Minimum Minimum S n a p Snap Snap中的方法又可以拿起来使用了。优化过程就可以转变成 M i n i m u m Minimum Minimum S n a p Snap Snap那种形式。


    在这里插入图片描述
    这是一个6阶的贝塞尔曲线转换的情况,以上为转换的映射矩阵。


    1.3 飞行走廊(黄色安全区域的构建)


    在这里插入图片描述
    每一个栅格保存了距离最近的障碍物,红线的路径假设是A*算法求出来的,红色虚线路径上的小点,地图上保存了距离这个点最近的障碍物的距离,这样在二维上可以画出圆,表示安全的范围,这个球还是可以扩展,形成一个大范围的安全区域,可以在圆里找到内接的矩阵/正方形,这些还是可以扩展一些。


    如下是扩展完成的图。
    在这里插入图片描述


    这样就是有很多长方体(三维),贝塞尔曲线就约束在长方体里面,就肯定是安全区域。
    一个性质,贝塞尔曲线的导数仍然是贝塞尔曲线。

    2 总结

    一个多项式,转换为贝塞尔曲线,然后继续使用 M i n i m u m Minimum Minimum S n a p Snap Snap的方法去优化。

  • 相关阅读:
    Vue+WebSocket-实现多人聊天室
    海量数据处理面试题
    MVCC:多版本并发控制案例分析(二)
    线上Electron应用具备哪些特征?
    MindSpore:强化学习基础-蒙特卡洛(Monte Carlo)
    添加IDEA到右键打开里面
    postgresql数据库|wal日志的开启以及如何管理
    Jenkins 一直处于等待界面
    框架 Wrapper 条件构造器 2022-8-3 接昨天的
    年近三十,真的卷不动了
  • 原文地址:https://blog.csdn.net/weixin_44673253/article/details/126616569