• 参考线平滑-FemPosDeviation-Ipopt


    参考线平滑-FemPosDeviation-Ipopt

    FemPosDeviation参考线平滑方法是离散点平滑方法,FemFinite element estimate的意思。
    Apollo中使用Ipopt求解是因为增加了曲率约束,而曲率约束是非线性的,优化目标的设置同OSQP一致,只是增加了松弛因子。

    1. 优化目标

    在这里插入图片描述

    1.1 平滑性

    参考线平滑的首要目标当然是平滑性,使用向量的模 ∣ P 2 P 2 ′ ⃗ ∣ | \vec{P_2 P^{\prime}_2}| P2P2 来表示,显然 ∣ P 2 P 2 ′ ⃗ ∣ | \vec{P_2 P^{\prime}_2}| P2P2 越小,三个点 P 1 , P 2 , P 3 P_1,P_2,P_3 P1,P2,P3越接近一条直线,越平滑。
    J s m o o t h = ∑ i = 2 N − 1 ∣ P i P i ′ ⃗ ∣ 2 = ∑ i = 2 N − 1 ∣ P i P i − 1 ⃗ + P i P i + 1 ⃗ ∣ 2 = ∑ i = 2 N − 1 ( ( x i − 1 + x i + 1 − 2 x i ) 2 + ( y i − 1 + y i + 1 − 2 y i ) 2 ) (1-1) J_{smooth} = \sum^{N-1}_{i=2} | \vec{P_i P^{\prime}_i}| ^ 2 = \sum^{N-1}_{i=2} | \vec{P_i P_{i-1}} + \vec{P_i P_{i+1}} | ^ 2 = \sum^{N-1}_{i=2} {( (x_{i-1} + x_{i+1} - 2x_i)^2 + (y_{i-1} + y_{i+1} - 2y_i)^2 )} \tag{1-1} Jsmooth=i=2N1PiPi 2=i=2N1PiPi1 +PiPi+1 2=i=2N1((xi1+xi+12xi)2+(yi1+yi+12yi)2)(1-1)

    1.2 几何性

    平滑后的参考线,希望能够保留原始道路的几何信息,不会把弯道的处的参考线平滑成一条直线。使用平滑后点与原始点的距离来表示。
    J d e v i a t i o n = ∑ i = 1 N ∣ P r , 1 P 1 ⃗ ∣ 2 = ∑ i = 1 N ( ( x 1 − x 1 , r ) 2 + ( y 1 − y 1 , r ) 2 ) (1-2) J_{deviation} = \sum^{N}_{i=1} | \vec{P_{r,1} P_1}| ^ 2 = \sum^{N}_{i=1} ( (x_1 - x_{1,r})^2 + (y_1 - y_{1,r})^2) \tag{1-2} Jdeviation=i=1NPr,1P1 2=i=1N((x1x1,r)2+(y1y1,r)2)(1-2)

    1.3 均匀性

    平滑后的参考线的每两个相邻点之间的长度尽量均匀一直。
    J l e n g t h = ∑ i = 1 N − 1 ∣ P i P i + 1 ⃗ ∣ 2 = ∑ i = 1 N − 1 ( ( x i + 1 − x i ) 2 + ( y i + 1 − y i ) 2 ) (1-3) J_{length} = \sum^{N-1}_{i=1} | \vec{P_i P_{i+1}}|^2 = \sum^{N-1}_{i=1} ( (x_{i+1} - x_i)^2 + (y_{i+1} - y_i)^2 ) \tag{1-3} Jlength=i=1N1PiPi+1 2=i=1N1((xi+1xi)2+(yi+1yi)2)(1-3)

    因此,参考线平滑的优化目标可以定义为:
    J = w s m o o t h ∗ J s m o o t h + w d e v i a t i o n ∗ J d e v i a t i o n + w l e n g t h ∗ J l e n g t h (1-4) J = w_{smooth} * J_{smooth} + w_{deviation} * J_{deviation} + w_{length} * J_{length} \tag{1-4} J=wsmoothJsmooth+wdeviationJdeviation+wlengthJlength(1-4)

    2. 约束条件

    2.1 边界约束

    只考虑边界约束,即:
    x i , l o w e r ≤ x i ≤ x i , u p p e r y i , l o w e r ≤ y i ≤ y i , u p p e r (2-1) x_{i,lower} \leq x_i \leq x_{i,upper} \\ y_{i,lower} \leq y_i \leq y_{i,upper} \tag{2-1} xi,lowerxixi,upperyi,loweryiyi,upper(2-1)
    可以转化为:
    x i , r − b o u n d ≤ x i ≤ x i , r + b o u n d y i , r − b o u n d ≤ y i ≤ y i , r + b o u n d (2-2) x_{i,r} - bound \leq x_i \leq x_{i,r} + bound \\ y_{i,r} - bound \leq y_i \leq y_{i,r} + bound \tag{2-2} xi,rboundxixi,r+boundyi,rboundyiyi,r+bound(2-2)
    对参考线的起点和终点进行约束,令其等于原始参考线上的点:
    x 1 , r ≤ x 1 ≤ x 1 , r y 1 , r ≤ y 1 ≤ y 1 , r (2-3) x_{1,r} \leq x_1 \leq x_{1,r} \\ y_{1,r} \leq y_1 \leq y_{1,r} \tag{2-3} x1,rx1x1,ry1,ry1y1,r(2-3)

    2.2 曲率约束

    文章Apollo ReferenceLine Smooth–离散点平滑原理中详细叙述了曲率的计算过程。

    在这里插入图片描述

    ∣ P 1 P 3 ⃗ ∣ = Δ s 2 × κ ∣ P 1 P 3 ⃗ ∣ ≤ Δ s 2 × κ m a x (2-4) | \vec{P_1 P_3} | = \Delta s^2 \times \kappa \\ | \vec{P_1 P_3} | \leq \Delta s^2 \times \kappa_{max} \tag{2-4} P1P3 =Δs2×κP1P3 Δs2×κmax(2-4)
    因此中间的 N − 2 N-2 N2个点上的曲率应该满足约束:
    ( x i − 1 + x i + 1 − 2 x i ) 2 + ( y i − 1 + y i + 1 − 2 y i ) 2 ≤ ( Δ s 2 × κ m a x ) 2 , i = 1 , 2 , ⋯   , N − 1 (2-5) (x_{i-1} + x_{i+1} - 2x_i)^2 + (y_{i-1} + y_{i+1} - 2y_i)^2 \leq ( \Delta s^2 \times \kappa_{max} ) ^ 2, i = 1, 2, \cdots, N-1 \tag{2-5} (xi1+xi+12xi)2+(yi1+yi+12yi)2(Δs2×κmax)2,i=1,2,,N1(2-5)
    为了保证有解,增加了松弛因子 ε κ \varepsilon_{\kappa} εκ
    ( x i − 1 + x i + 1 − 2 x i ) 2 + ( y i − 1 + y i + 1 − 2 y i ) 2 − ε κ , i ≤ ( Δ s 2 × κ m a x ) 2 , i = 1 , 2 , ⋯   , N − 1 ε κ , i ≥ 0 , i = 1 , 2 , ⋯   , N − 1 (2-6) (x_{i-1} + x_{i+1} - 2x_i)^2 + (y_{i-1} + y_{i+1} - 2y_i)^2 - \varepsilon_{\kappa, i} \leq ( \Delta s^2 \times \kappa_{max} ) ^ 2, i = 1, 2, \cdots, N-1 \\ \varepsilon_{\kappa, i} \geq 0, i = 1, 2, \cdots, N-1 \tag{2-6} (xi1+xi+12xi)2+(yi1+yi+12yi)2εκ,i(Δs2×κmax)2,i=1,2,,N1εκ,i0,i=1,2,,N1(2-6)

    3. Ipopt

    由于曲率约束是非线性的,因此可以使用Ipopt进行求解。在进行曲率约束时,需要使用 Δ s \Delta s ΔsApollo使用了原始参考线两点之间的平均距离。

      // b. curvature constraints
      double ref_total_length = 0.0;
      auto pre_point = ref_points_.front();
      for (size_t i = 1; i < num_of_points_; ++i) {
        auto cur_point = ref_points_[i];
        double x_diff = cur_point.first - pre_point.first;
        double y_diff = cur_point.second - pre_point.second;
        ref_total_length += std::sqrt(x_diff * x_diff + y_diff * y_diff);
        pre_point = cur_point;
      }
      double average_delta_s =
          ref_total_length / static_cast(num_of_points_ - 1);
      double curvature_constr_upper =
          average_delta_s * average_delta_s * curvature_constraint_;
    
      for (size_t i = curvature_constr_start_index_;
           i < curvature_constr_end_index_; ++i) {
        g_l[i] = -1e20;
        g_u[i] = curvature_constr_upper * curvature_constr_upper;
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    Apollo中使用的ADOL-C自动求解优化目标的梯度向量函数、约束函数的雅可比矩阵和拉格朗日函数的黑森矩阵。可以参考文章Planning基础库——散点曲线平滑

  • 相关阅读:
    Element-UI框架下拉选择框el-select选择全部时,回显的是数字-1
    Spring Boot 如何使用Liquibase 进行数据库迁移
    超详细的文件上传和下载(Spring Boot)
    [MySQL]日期和时间函数
    LeetCode(力扣)77. 组合Python
    一种NR无线小站的同步设计与实现
    剑指 Offer II 041. 滑动窗口的平均值
    【AGC】目前云调试对于RPK软件包是否支持、素材测试服务如何使用、崩溃服务启用接入异常
    Triple-shapelet Networks for Time SeriesClassification(ICDM2020)
    KubeGems 启用 Nacos 配置中心
  • 原文地址:https://blog.csdn.net/mpt0816/article/details/127650709