• 基于后退走廊的轨迹优化方法(Bubble Planner)


    0 摘要

    这是高老师最新的一篇文章,提出了一种基于走廊约束最小控制力的轨迹优化框架的运动规划算法(Minimum Control Effort Trajectory Optimization)(MINCO),这个方法具体来说就是使用了一系列重叠的球体(飞行走廊区域)来表示环境的自由空间,并且该算法能实现实时规划UAV的轨迹;一个创新点就是,这个走廊是基于采样的方法而生成的,生成的两个相邻球体之间具有很大的重叠区域;另一个创新点就是后退走廊策略(Receding Horizon Corridors (RHC) Strategy),就是,部分先前生成好的走廊,在每一个重新规划当中被重新使用,综合以上两种创新点,根据UAV当前的状态,扩大了安全飞行走廊的空间,从而允许UAV保持了高速机动性,实现了超过13.7m/s的飞行速度。

    1 建模


    在这里插入图片描述


    整个轨迹由M块组成,每块轨迹都包含在各个球体当中, B i B_i Bi这些就代表的是球体( i = 1... M i = 1...M i=1...M),橙色点 q i q_i qi就代表中间路点,被限制在两球相交的部分, T i T_i Ti就是时间的分配,参考 M i n i m u m Minimum Minimum S n a p Snap Snap当中的多段轨迹的时间分配, d 0 、 d g d_0、d_g d0dg相当于起点和终点了。

    1.1 球形走廊


    在这里插入图片描述


    定义一个球体,这个球心和最近障碍点 n n n之间的距离减去 r d r_d rd就是球的半径 r r r,因为距离障碍物有安全距离,所以只需要把每一段轨迹都约束在相应的球体当中,就可以满足安全性的约束。

    生成一个球体,首先使用障碍点云构建一个 K D − T r e e KD-Tree KDTree,然后给定球心,通过 N N − S e a r c h NN-Search NNSearch确定最近的障碍物点,最后通过以上步骤确定球的半径,生成这一个球形走廊,这个步骤称为 G e n e r a t e O n e S p h e r e ( o ) GenerateOneSphere(o) GenerateOneSphere(o),在后续当中使用。


    在这里插入图片描述


    1.2 轨迹分段

    同理于 M i n i m u m Minimum Minimum S n a p Snap Snap,这也是将轨迹进行分段,如下所示:
    p ( t ) = p i ( t − t i − 1 ) ∈ B i , t ∈ [ t i − 1 , t i ] p(t)=p_i\left(t-t_{i-1}\right) \in \mathcal{B}_i, t \in\left[t_{i-1}, t_i\right] p(t)=pi(tti1)Bi,t[ti1,ti]

    同时,相邻的轨迹片段会在时间 t i t_i ti,在同一点 q i q_i qi进行相遇,再考虑动力学约束( M i n i m u m Minimum Minimum S n a p Snap Snap当中的 P V A PVA PVA条件),则轨迹优化可以表示为以下,记为公式2:
    min ⁡ p ( t ) ∫ 0 t M ∥ p ( s ) ( t ) ∥ 2 2 d t + ρ T t M  s.t.  p ( 0 : s − 1 ) ( 0 ) = d 0 , p ( 0 : s − 1 ) ( t M ) = d g p ( t i ) = q i , ∀ 1 ≤ i < M t i − 1 < t i , ∀ 1 ≤ i ≤ M ∥ p ( 1 ) ( t ) ∥ 2 2 ≤ v max ⁡ 2 , ∥ p ( 2 ) ( t ) ∥ 2 2 ≤ a max ⁡ 2 p ( t ) = p i ( t − t i ) ∈ B i , ∀ 1 ≤ i ≤ M , t ∈ [ t i − 1 , t i ]

    minp(t)0tMp(s)(t)22dt+ρTtM s.t. p(0:s1)(0)=d0,p(0:s1)(tM)=dgp(ti)=qi,1i<Mti1<ti,1iMp(1)(t)22vmax2,p(2)(t)22amax2p(t)=pi(tti)Bi,1iM,t[ti1,ti]" role="presentation" style="position: relative;">minp(t)0tMp(s)(t)22dt+ρTtM s.t. p(0:s1)(0)=d0,p(0:s1)(tM)=dgp(ti)=qi,1i<Mti1<ti,1iMp(1)(t)22vmax2,p(2)(t)22amax2p(t)=pi(tti)Bi,1iM,t[ti1,ti]
    minp(t) s.t. 0tM p(s)(t) 22dt+ρTtMp(0:s1)(0)=d0,p(0:s1)(tM)=dgp(ti)=qi,∀1i<Mti1<ti,∀1iM p(1)(t) 22vmax2, p(2)(t) 22amax2p(t)=pi(tti)Bi,∀1iM,t[ti1,ti]

    可以看出, m i n min min的目标函数,与之前的鹅方法类似,还是与 M i n i m u m Minimum Minimum S n a p Snap Snap相关的顺滑性约束,这其中的优化分为两部分,第一部分,固定中间路点 q q q,以及时间分配相邻 T T T,并且只是优化第一部分,即顺滑性约束那部分,之后,就只考虑第2式子和第3式子中的约束,然后这个优化问题导致了一个最优解,如下式所示:
    p i ( t ) = c i ( q , T ) T β ( t ) , t ∈ [ 0 , T i ] p_i(t)=\mathbf{c}_i(\mathbf{q}, \mathbf{T})^T \beta(t), t \in\left[0, T_i\right] pi(t)=ci(q,T)Tβ(t),t[0,Ti]

    而第二部分就是,将上面2个式子的约束转化为上式的轨迹优化约束,因为 p i ( t ) p_{i}(t) pi(t)这个式子自然满足之前上面那一堆式子中的第二个和第三个的约束,因此完整的约束只要考虑第4到第6个式子了。为了解决这个问题,使用 M I N C O MINCO MINCO框架将其转换为一个无约束的优化问题,使用下面的函数进行转换即可:

    L μ ( x ) = { 0  if  x ≤ 0 , ( μ − x / 2 ) ( x / μ ) 3  if  0 < x < μ , x − μ / 2  if  x ≥ μ . \mathcal{L}_\mu(x)=

    {0 if x0,(μx/2)(x/μ)3 if 0<x<μ,xμ/2 if xμ." role="presentation" style="position: relative;">{0 if x0,(μx/2)(x/μ)3 if 0<x<μ,xμ/2 if xμ.
    Lμ(x)= 0(μx/2)(x/μ)3xμ/2 if x0, if 0<x<μ, if xμ.


    所以公式2当中的模型转换为下述式子:
    在这里插入图片描述


    ρ v e l , ρ a c c , ρ c \rho_{\mathrm{vel}}, \rho_{\mathrm{acc}}, \rho_{\mathrm{c}} ρvel,ρacc,ρc分别是最大速度、最大加速度、以及无碰撞惩罚的对应权重。 o i o_i oi是对应的球心, r i r_i ri 是第 i i i个球体的半径, q \mathrm{q} q是航点, τ \tau τ 是时间分配的,所有梯度都可以进行解析计算。

    1.3 生成飞行走廊


    在这里插入图片描述


    在这里插入图片描述


    飞行走廊生成的策略:尽可能使球体变大,重叠面积变大,好留给UAV高速机动性能的施展,以及避免高速飞行状态下陷入局部极小值以及无解的状态。

    1.4 随机采样

    S c o r e = ρ r V c a n d + ρ v V i n t e r Score = \rho_{r}V_{cand} + \rho_{v}V_{inter} Score=ρrVcand+ρvVinter

    1.5 路径必经点以及时间分分配


    在这里插入图片描述


    对于给定的飞行走廊,采用默认初始化策略,其中航路点被初始化为两个相邻球体之间重叠空间的中心(图中的粉红色点),时间分配初始化为 T i = ‖ q i − q i − 1 ‖ 2 / v m a x Ti = ‖qi−qi−1 ‖_2 / v_{max} Ti=qiqi12/vmax

    1.6 重新规划

    看上图,当需要重新规划的时候,选择 q q q最近的未来航点 d r p d_{rp} drp作为初始状态,减少空间后的一些球体走廊被重新使用,组成新走廊的第一部分,这种重规划方案确保在每次重新规划中,可飞行区域总是有足够的空间让四旋翼从其当前状态(因为当前四旋翼状态是在先前走廊中包含的先前轨迹上)机动,从而大大扩大了后端轨迹优化的可行性区域。

    2 结果


    在这里插入图片描述


    提出的方法生成球体较少,但是半径较大,并且重叠部分很多,比使用类似 R R T ∗ RRT* RRT的方法生成速度要快。


    在这里插入图片描述


  • 相关阅读:
    SpringBoot 集成 IBMMQ 代码示例教程
    CSharp Library develop histroy
    Android 13.0 Launcher3中去掉Hotseat功能实现
    ThreadLocal类
    angular:简单实现图片如果超过屏幕高度则滚动置顶;没超过则水平垂直居中
    ssm心理测验系统的设计与实现毕业设计-附源码211710
    【wing】一款轻量快捷的团队开发工具
    激发客户潜在需求
    企业微信发消息通知-java
    大数据精品栏目介绍
  • 原文地址:https://blog.csdn.net/weixin_44673253/article/details/126656546