考虑我们有以下时间点:
t0 = 0 is the beginning of the movement
ta is the point when acceleration ends
td is the point when decceleration begins
T is the end of the movement
然后我们有运动的三个部分。[t0, ta], (ta, td], (td, T]
. 每个都可以单独指定。对于加速度/减速度,我们需要计算加速度aa
和减速度ad
如下:
aa = (v - vi) / (ta - t0)
ad = (vf - v) / (T - td)
根据您的问题,所有值都已给出。
那么运动可以表示为:
P(t) :=
if(t < ta)
1 / 2 * aa * t^2 + vi * t + A
else if(t < td)
v * (t - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
// this is the length of the first part
else
1 / 2 * ad * (t - td)^2 + v * (t - td)
+ v * (td - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
//those are the lengths of the first two parts
如果我们预先计算零件的长度为
s1 := 1 / 2 * aa * ta^2 + vi * ta + A
s2 := v * (td - ta)
然后公式变得有点短:
P(t) :=
if(t < ta)
1 / 2 * aa * t^2 + vi * t + A
else if(t < td)
v * (t - ta) + s1
else
1 / 2 * ad * (t - td)^2 + v * (t - td) + s1 + s2
这是一个示例图:
B
但是,T
除非您选择了正确的值,否则很可能不会发生运动。那是因为方程被过度指定了。例如,您可以v
基于 B 计算而不是指定它。
编辑
v
达到特定的计算B
是:
v = (2 * A - 2 * B - td * vf + T * vf + ta * vi) / (ta - td - T)