工控领域经常会涉及速度加减速的算法:线性加减速,S曲线加减速(sin函数,拓展其他三角函数曲线), 贝塞尔曲线,等等。
线性加减速: 设定起始速度V0,目标速度V1,加速时间Ta(s,或加速度),这个的任务执行周期为ΔT( ms 级 或者设定定时器,定时时间必须大于任务周期否则还是按任务周期计算输出)。
int iCounter ;
iCounter = Ta/(ΔT/1000) ; //计算达到输出 任务需执行的 周期数。
for(int i =0; i
Vout = V0+i*(V1-V0)/iCounter; // Vout 为每个周期 输出 的 目标 速度。
S曲线加减速:设定起始速度V0,目标速度V1,加速时间Ta(s,或加速度),这个的任务执行周期为ΔT( ms 级 或者设定定时器,定时时间必须大于任务周期否则还是按任务周期计算输出)。
int iCounter ;
iCounter = Ta/(ΔT/1000) ; //计算达到输出 任务需执行的 周期数。
for(int i =0; i
Vout = V0+(V1-V0)(1+Sin( (pi/iCounter)*i-pi/2 )); // Vout 为每个周期 输出 的 目标 速度。
贝塞尔曲线:很少或者基本不用贝塞尔曲线来规划 曲线加减速,但是有必要了解贝塞尔曲线的原理,及其低阶曲线的算法(3、4控制点)。
贝塞尔曲线原理:
下面我们就通过例子来了解一下如何用 de Casteljau 算法绘制一条贝塞尔曲线。
在平面内任选 3 个不共线的点,依次用线段连接。
在第一条线段上任选一个点 D。计算该点到线段起点的距离 AD,与该线段总长 AB 的比例。