PX4(1.11.3正式版本)中与S曲线相关的函数库为"VelocitySmoothing.hpp"和“VelocitySmoothing.cpp”,以及内部测试文件“test_velocity_smoothing”

标题图片摘自多旋翼的加加速度限制型轨迹 | PX4 自动驾驶用户指南,他画的好看...

头文件的注释也非常形象:

PX4 头文件注释

其中两个重要函数:

void updateDurationsMinimizeTotalTime(); 根据最短时间规划S曲线

void updateDurationsGivenTotalTime(float T123); 根据给定时间规划S曲线

本文针对最短时间,介绍S曲线规划原理。

S曲线功能介绍

个人认为S曲线原理简单,但是十分开放,根据不同的输入、不同的约束、不同的输出,即可设计各种各样的曲线。在实际应用中,需要明确需求和所有约束条件,不然可能会产生非期望的结果。PX4中就是根据规划时间最小化规划S曲线。在推导完公式之后,即可转化为最小化问题,下面直接进行公式推导。

S曲线(最直观的例子)

下文变量均自带符号。

加加速度: [公式]

加速度:[公式]

速度: [公式]

T1时刻:

[公式]

[公式]

加加速度:[公式]

加速度:[公式]

速度:[公式]

T2时刻:

[公式]

[公式]

[公式]

加加速度:[公式]

加速度:[公式]

速度:[公式]

T3时刻:

[公式]

[公式]

[公式]

目标:已知当前状态和目标速度,如何规划时间最短S曲线路径达到目标设定

加速度变化曲线

[公式]

[公式]

[公式]

[公式]

[公式]

[公式]

[公式]

总时间:

[公式]

化简之后:

[公式]

求导、求极值点等等,可知

[公式]