1. // Piece(t) = c5*t^5 + c4*t^4 + ... + c1*t + c0
  2. // The natural coefficient matrix = [c5,c4,c3,c2,c1,c0]
  3. // Any time in [0, T] is normalized into [0.0, 1.0]
  4. // Therefore, nCoeffMat = [c5*T^5,c4*T^4,c3*T^3,c2*T^2,c1*T,c0*1]
  5. // is used for better numerical stability

Am_traj公式推导 - 图1
Am_traj公式推导 - 图2
Am_traj公式推导 - 图3
Am_traj公式推导 - 图4
转为时间[0,1];
则:Am_traj公式推导 - 图5
Am_traj公式推导 - 图6
Am_traj公式推导 - 图7

Am_traj公式推导 - 图8求导,得Am_traj公式推导 - 图9

而将Am_traj公式推导 - 图10带入Am_traj公式推导 - 图11
Am_traj公式推导 - 图12
Am_traj公式推导 - 图13
对比Am_traj公式推导 - 图14可知,
Am_traj公式推导 - 图15
同理:
Am_traj公式推导 - 图16

其中
Am_traj公式推导 - 图17
Am_traj公式推导 - 图18

  1. //调整轨迹曲线以满足动力学要求
  2. //调整方法:
  3. //1.获取每段轨迹起始位置的位置速度加速度,强制使其小于(1-esp)*max
  4. //2.对于每段轨迹,checkMaxAccRate/checkMaxVelRate,不满足条件,则时间*2,速度和加速度/2
  5. //3.将新的时间,速度,加速度赋值给traj,迭代2-3,直到满足条件
  6. bool enforceIniTrajFeasibility(Trajectory &traj, int tryOut) const
  7. //检查是否超过最大速度
  8. inline bool checkMaxVelRate(double maxVelRate) const
  9. //检查是否超过最大加速度
  10. //1.判断起点终点的加速度^2是否大于最大速度^2,
  11. TODO:小车的前后加速度不同,不能用^2的方式需要分别讨论
  12. TODO:起点有很大的加速度,以至于始终检测不通过
  13. //2.对轨迹中间段,采取求极值的方法,极值点 - max,,判断是否
  14. inline bool checkMaxAccRate(double maxAccRate) const

checkMaxAccRate()中求根公式解读

判断Am_traj公式推导 - 图19轨迹上是否存在点大于maxAcc

  1. 已知Am_traj公式推导 - 图20
  2. 由(2)式可知,maxAcc在Am_traj公式推导 - 图21上对应的根为 Am_traj公式推导 - 图22
  3. 公式转化为求Am_traj公式推导 - 图23是否存在根
  4. 判断端点处是否有解,在Am_traj公式推导 - 图24处,acc的值是否小于maxAcc
  5. 对于三维点,即求下式的根Am_traj公式推导 - 图25image.png