愿你前行的道路有群星闪耀。愿你留下的足迹有百花绽放。

基于Minimumsnap的轨迹优化

概述以及基础

轨迹优化的作用:提高解的质量

  • Path quality
  • Time efficiency

image

边界条件:起点、终点

中间条件:路点(前段路径规划生成的中间节点)

平滑准则

image

全维度的状态空间(XX)里的路径规划问题可以转化为低维度的平坦的输出空间(σ\sigma)里的路径规划问题(要求:全维度的状态空间(XX)可以被平坦的输出空间(σ\sigma)以代数组合的形式表示)

对于欠驱动的四旋翼来说,可以选择σ=[x,y,z,ψ]τ\sigma=[x,y,z,\psi]^{\tau}来作为平坦的输出空间(SE(3):旋转加上位移、SO(2):yaw方向上的旋转)

  • 示例

    image

    四旋翼产生的推力的方向垂直于自身桨平面

    M1、M2、M3、M4是由四个螺旋桨旋转时所受的阻力矩产生的

    image

    ZBZ_B是利用前面所说的四旋翼的加速度方向垂直于桨平面来推导的(ZBZ_B的方向为垂直于桨平面的方向);σ1\sigma_1表示xxσ2\sigma_2表示yyσ3\sigma_3表示zz

    定义中间坐标系C(C和世界坐标系W差一个偏航角ψ\psi),ZBZ_BXCX_C构成的平面垂直于YBY_B(注意是Z-X-Y;XBX_BXCX_C只差最后一次YBY_B轴的转动,因此ZBZ_BXCX_C所在的平面垂直于YBY_B)。故pitch、yaw、raw可以被σ\sigma空间表示

    image

    image

    知道ωBW\omega_{BW}后,先对其叉乘zBz_B,变成hω=ωxyB+ωyxBh_{\omega}=-\omega_xy_B+\omega_yx_B

    再对左右点乘yBy_B或者xBx_B,可以分离出ωx\omega_xωy\omega_y

    image

    image

凸优化

image

凸函数、凸集

任何凸问题的局部最优解是全局最优解

image

凸优化问题的标准形式

最小化、等式约束、不等式约束

f0(x),,fm(x)f_0(x),…,f_m(x)均为凸函数,且等式约束左侧的函数为仿射变换(线性变换)的函数

image

线性优化(LP)、二次规划(QP)、有二次不等式约束的二次规划(QCQP)、二阶锥优化问题(SOCP)(可以包含LP、QP、QCQP)

image

半正定优化问题

Minimumsnap

Minimumsnap的阐述

使用多项式函数的好处:

  • 多项式阶数可以保证平滑性准则
  • 推导计算方便
  • 可以把三维的轨迹生成解耦

image

一维的多段平滑轨迹(考虑初末速度)

每一段的初末速度由求解优化问题指定更为合理(引入Minimumsnap)

image

Minimum jerk:最小化角速度,利于视觉跟踪

Minimum snap:最小化推力变化,节省能量

image

每一段轨迹阶数不一定相同,阶数相同可以简化

每段时间必须已知——时间分配

image

image

一般认为,对于单段的轨迹来说,最小化jerk要保证首末p、v、a已知,共有6个约束,故多项式至少为5阶(要解最优化问题——保证自由度≥约束数,否则没有意义)

对于k段的轨迹来说,最小化jerk要求保证首末p、v、a已知,以及中间的k-1个位置约束

image

时间线用相对时间线更好,每一段时间都从0开始,数值上更加稳定

Minimumsnap的求解

最小化J值

image

二次型矩阵

整个轨迹上的目标函数形如J=Q1000Q2000Q3J=\begin{vmatrix}Q_1 & 0 &0\\ 0 & Q_2&0\\0&0&Q_3 \end{vmatrix} ,也是一个二次型矩阵

导数约束(首末两点的p、v、a、j,以及中间节点的p约束)

image

只跟当前段有关

连续性约束

image

跟前一段和当前段有关

image

导数约束和连续性约束可以化成一个大矩阵

二次优化问题——QP问题(典型的凸优化问题)

转化成凸优化问题后可以用凸优化求解器求出数值解

把多项式系数转化为各阶导数

image

直接优化多项式轨迹容易数值不稳定(比如T很大时,高阶项系数往往很小)

利用映射矩阵M,将多项式系数转化为导数(v、a),而这些导数理论上是数值稳定的(正常机器人运动时v、a并不会太大)

image

分离固定和自由变量(要优化的变量相当于中间节点的v、a)

image

利用选择矩阵C,分离出受约束的导数(dFd_F)和需要被优化的导数(dPd_P

dFd_F相当于已经添加了导数约束,而连续性约束可以通过选择矩阵来进行保证dN1d_{N-1}的末尾时刻等于dNd_N的初始时刻

将带约束条件的优化问题转为不带约束条件的优化问题(对dPd_P求偏导,利用导数等于0)

image

构造CTC^T——闭式求解Minimumsnap的关键

Others

安全性问题:轨迹优化后可能超调,与障碍物发生碰撞

image

轨迹和障碍物发生碰撞时,可以在中点处添加一个新的路点,对碰撞端的轨迹进行局部的重新生成。重复这一步骤,直至不会发生障碍物的碰撞

image

利用bounding box施加约束(每段轨迹必须在bounding box里)

image

保证轨迹在bounding box的解决方案

  • 迭代地求解轨迹的极值(如果超过bounding box,施加额外的约束,继续求解)
  • 密集生成bounding box

image

一些凸优化求解器:CVX(Matlab wrapper)、Mosek(好用,但只能在x86架构运行——官方只给了x86的library)、OOQP(求解QP问题很快,代码开源)、GLPK(求解LP问题)、OSQP

image

数值稳定性问题

  • 时间稳定性
    • 使用相对时间轴(可以解决多段路径累计时间开销长,导致的数值不稳定的问题)
    • 将时间轴进行放缩,每一段的时间归一化(1.0)(可以解决单段时间开销和很小或很大,导致的数值不稳定的问题)
  • 空间稳定性
    • 如果是大规模场景,空间开销较大,导致数值不稳定的问题,可以对空间进行归一化——等比例缩小成一个场景,求解小场景中的问题

image

问题1:一般情况下,独立的求解三个单轴的优化问题比直接求解一个三轴的优化问题的效果好;但在软约束的条件下,最小化的量包含距离信息(x2+y2+z2\sqrt{x^2+y^2+z^2}),x、y、z三个轴不能单独优化,只能选择直接求解一个三轴的优化问题

问题2:闭式求解一般来说比直接数值求解更稳定,但当矩阵大的时候闭式求解可能会导致不稳定;而数值求解可以引入工程性操作来保证稳定性

问题3:最小化某一阶的平方时,多项式是问题的最优解;但在其他情况下,多项式可能只是最优解的一个子集

时间分配

image

每一段时间分配都是梯形规划,得到的时间较保守

bounding box提供了一个解空间的自由度,中间节点可以在两个bounding box交界处自由移动,一定程度上可以缓解时间分配不好导致的问题

image

最小化的值加上时间的权重:无法解析式求解、只能数值求解——不断迭代(梯度下降法)

如果优化出的时间不满足动力学可行性——则可以延长总时间,但保证各段时间之间的比例