Apollo MPC OSQP Solver

Apollo MPC算法原本使用qpOASES Solver,现改用OSQP以提高二次规划问题的求解速度。文章详细讨论了如何根据OSQP的标准形式构造优化问题,包括优化目标函数、约束条件以及如何处理等式约束。同时,介绍了如何调整Hessian矩阵P、Gradient Vector q、Equality Constraint Matrix Ac和Equality Constraint Vectors l, u以适配OSQP的CSC格式。通过改变目标函数形式和考虑干扰矩阵C,可以进一步优化MPC问题。" 114178441,10542288,Unity3D CPU卡顿排查与优化实践,"['Unity3D开发', '性能优化', '内存管理', '游戏开发']
摘要由CSDN通过智能技术生成

Apollo MPC算法之前使用qpOASES Solver, 现在替换为OSQP,  二次规划问题的求解速度和怎么构造优化问题有一定的联系, 要想提升整体的求解速度和求解成功率, 应该尽量少的使用等式约束。
OSQP Benchmark
使用qpOASES Solver构造二次规划问题的形式与OSQP Solver构造二次规划问题的形式不相同,关于qpOASES Solver是如何构造二次规划问题的可以参考:
qpOASES QP Formulation

关于Apollo使用的基于道路进行线性化的车辆动力学公式以及离散化方式请参考:
Linearized Lateral Error Dynamics
现在假设在采样时刻 k k k 我们已经得到如下车辆Error Dynamics 线性系统状态方程
x k + 1 = A ( k ) x k + B ( k ) u k + C ( k ) x_{k + 1} = A(k)x_{k} +B(k)u_{k} + C(k) xk+1=A(k)xk+B(k)uk+C(k)
同时, 我们状态量和输入量的上下限 x m i n x_{min} xmin, x m a x x_{max} xmax, u m i n u_{min} umin, u m a x u_{max} umax已经规定好, Q ( k ) Q(k) Q(k) R ( k ) R(k) R(k) k k k时刻的状态惩罚矩阵和输入惩罚矩阵。 A k A_{k} Ak, B k B_{k} Bk C k C_{k} Ck分别为 k k k时刻 Linearized Error Dynamics的系统矩阵, 输入矩阵和干扰矩阵。

k k k时刻,将这些量带入初始化OSQP Solver:


MpcOsqp::MpcOsqp(const Eigen::MatrixXd &matrix_a,
                 const Eigen::MatrixXd &matrix_b,
                 const Eigen::MatrixXd &matrix_q,
                 const Eigen::MatrixXd &matrix_r,
                 const Eigen::MatrixXd &matrix_initial_x,
                 const Eigen::MatrixXd &matrix_u_lower,
                 const Eigen::MatrixXd &matrix_u_upper,
                 const Eigen::MatrixXd &matrix_x_lower,
                 const Eigen::MatrixXd &matrix_x_upper,
                 const Eigen::MatrixXd &matrix_x_ref, const int max_iter,
                 const int horizon, const double eps_abs)
    : matrix_a_(matrix_a),
      matrix_b_(matrix_b),
      matrix_q_(matrix_q),
      matrix_r_(matrix_r),
      matrix_initial_x_(matrix_initial_x),
      matrix_u_lower_(matrix_u_lower),
      matrix_u_upper_(matrix_u_upper),
      matrix_x_lower_(matrix_x_lower),
      matrix_x_upper_(matrix_x_upper),
      matrix_x_ref_(matrix_x_ref),
      max_iteration_(max_iter),
      horizon_(horizon),
      eps_abs_(eps_abs) {
   
  state_dim_ = matrix_b.rows();
  control_dim_ = matrix_b.cols();
  ADEBUG << "state_dim" << state_dim_;
  ADEBUG << "control_dim_" << control_dim_;
  num_param_ = state_dim_ * (horizon_ + 1) + control_dim_ * horizon_;
}

参数对应表格:

参数 代码变量名称
A k A_{k} Ak matrix_a
B k B_{k} Bk matrix_b
Q k Q_{k} Qk matrix_q
R k R_{k} Rk matrix_r
x k x_{k} xk matrix_initial_x
x m a x x_{max} xmax matrix_x_upper
x m i n x_{min} xmin matrix_x_lower
u m a x u_{max} umax matrix_u_upper
u m i n u_{min} umin matrix_u_lower

优化目标函数和约束

Apollo MPC使用如下优化目标函数,
u 0 ∗ = min ⁡ x k , u k ∑ k = 0 N ( x k − x r ) T Q ( x k − x r ) + ∑ k = 0 N − 1 u k T R u k x k + 1 = A x k + B u k x m i n ≤ x k ≤ x m a x u m i n ≤ x k ≤ u m a x x 0 = x ˉ u_{0} ^{*} = \min_{x_{k}, u_{k}} \sum_{k=0}^{N} (x_k-x_r)^T Q (x_k-x_r) + \sum_{k=0}^{N - 1}u_k^T R u_k \\ x_{k+1} = A x_k + B u_k \\ x_{\rm min} \le x_k \le x_{\rm max} \\ u_{\rm min} \le x_k \le u_{\rm max} \\ x_{0} = \bar{x} u0=xk,ukmink=0N(xkxr)TQ(xkxr)+k=0N1ukTRukxk+1=Axk+Bukxminxkxmaxuminxkumaxx0=xˉ
其中 N N N为prediction horizon。

OSQP 二次规划标准形式

OSQP优化问题的标准形式如下:
min ⁡ x      1 2 x T P x + q T x s u b j e c t   t o   l ≤ A c x ≤ u \min_{x}~~~~\dfrac{1}{2}x^{T}Px + q^{T}x \\ subject~to~ l \leq A_{c}x \leq u xmin    21xTPx+qTxsubject to lAcxu
上述二次规划问题只包括不等式约束不包括等式约束,对于等式约束 A e q x = b e q A_{eq}x = b_{eq} Aeqx=beq,应该对其进行如下变换,将其化为不等式约束:
b e q ≤ A e q x ≤ b e q b_{eq} \leq A_{eq}x \leq b_{eq} beqAeqx

  • 24
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值