S形7段式曲线推导

7段式轨迹各个阶段公式推导
a)加加速阶段
在这里插入图片描述
在这里插入图片描述

b)匀加速阶段:
在这里插入图片描述
在这里插入图片描述

c)减加速阶段:加速度、速度反向计算,此时时间变为(Ta-t)。位移用加速阶段总位移减去(Ta-t)时间的位移。
在这里插入图片描述
在这里插入图片描述

d)匀速阶段:对速度曲线计算加速段面积和匀速段面积
在这里插入图片描述
在这里插入图片描述

e)加减速阶段:

在这里插入图片描述
在这里插入图片描述

f)匀减速阶段:
在这里插入图片描述

在这里插入图片描述

g)减减速阶段
在这里插入图片描述
在这里插入图片描述

好的,我们可以按照如下步骤进行: 1. 给定初始参数,包括起始速度、目标速度、最大加速度、最大减速度、运动时间等。 2. 编写三个函数,分别实现三种加减速算法。 3. 对比三种算法在同样的初始参数下的运动结果,包括运动时间、加速度曲线、速度曲线、位移曲线等。 以下是一个示例程序,采用 Python 语言实现: ```python import numpy as np import matplotlib.pyplot as plt # 定义初始参数 v0 = 0 # 起始速度 v1 = 10 # 目标速度 a_max = 2 # 最大加速度 d_max = 4 # 最大减速度 t = 5 # 运动时间 # 定义三种加减速算法 def s_curve_3(v0, v1, a_max, d_max, t): a = a_max / 2 d = d_max / 2 t1 = (v1 - v0) / a t2 = t - t1 s1 = v0 * t1 + 1 / 2 * a * t1 ** 2 s2 = v1 * t2 - 1 / 2 * d * t2 ** 2 if s1 + s2 <= v1 * t: t3 = 0 s3 = v1 * t - s1 - s2 else: t3 = (v1 - v0) / d s3 = (v0 + v1) / 2 * t3 return t1, t2, t3, s1, s2, s3 def s_curve_5(v0, v1, a_max, d_max, t): a = a_max / 2 d = d_max / 2 t1 = (v1 - v0) / a t2 = (t - 2 * t1) / 2 t3 = t1 s1 = v0 * t1 + 1 / 2 * a * t1 ** 2 s2 = v1 * t2 s3 = v1 * t3 - 1 / 2 * d * t3 ** 2 return t1, t2, t3, s1, s2, s3 def s_curve_7(v0, v1, a_max, d_max, t): a = a_max / 2 d = d_max / 2 t1 = (v1 - v0) / (3 * a) t2 = (t - 4 * t1) / 2 t3 = t1 s1 = v0 * t1 + 1 / 6 * a * t1 ** 3 s2 = v1 * t2 s3 = v1 * t3 - 1 / 6 * d * t3 ** 3 return t1, t2, t3, s1, s2, s3 # 计算三种算法的运动结果 t1, t2, t3, s1, s2, s3 = s_curve_3(v0, v1, a_max, d_max, t) print("三段式S曲线加减速:") print("t1 =", t1, "t2 =", t2, "t3 =", t3) print("s1 =", s1, "s2 =", s2, "s3 =", s3) t1, t2, t3, s1, s2, s3 = s_curve_5(v0, v1, a_max, d_max, t) print("五段式S曲线加减速:") print("t1 =", t1, "t2 =", t2, "t3 =", t3) print("s1 =", s1, "s2 =", s2, "s3 =", s3) t1, t2, t3, s1, s2, s3 = s_curve_7(v0, v1, a_max, d_max, t) print("七段式S曲线加减速:") print("t1 =", t1, "t2 =", t2, "t3 =", t3) print("s1 =", s1, "s2 =", s2, "s3 =", s3) # 绘制加速度曲线、速度曲线、位移曲线 t_acc = np.linspace(0, t1, 100) a_acc = a_max * np.ones_like(t_acc) v_acc = v0 + a_max * t_acc s_acc = v0 * t_acc + 1 / 2 * a_max * t_acc ** 2 t_const = np.linspace(t1, t1 + t2, 100) a_const = np.zeros_like(t_const) v_const = v1 * np.ones_like(t_const) s_const = s_acc[-1] + v_const * (t_const - t1) t_dec = np.linspace(t1 + t2, t, 100) a_dec = -d_max * np.ones_like(t_dec) v_dec = v1 - d_max * (t_dec - t1 - t2) s_dec = s_const[-1] + v1 * (t_dec - t1 - t2) - 1 / 2 * d_max * (t_dec - t1 - t2) ** 2 t_total = np.concatenate([t_acc, t_const, t_dec]) a_total = np.concatenate([a_acc, a_const, a_dec]) v_total = np.concatenate([v_acc, v_const, v_dec]) s_total = np.concatenate([s_acc, s_const, s_dec]) plt.figure() plt.subplot(3, 1, 1) plt.plot(t_total, a_total) plt.ylabel("Acceleration") plt.subplot(3, 1, 2) plt.plot(t_total, v_total) plt.ylabel("Velocity") plt.subplot(3, 1, 3) plt.plot(t_total, s_total) plt.xlabel("Time") plt.ylabel("Position") plt.show() ``` 在上面的程序中,我们定义了三个函数 `s_curve_3`、`s_curve_5`、`s_curve_7` 分别实现了三种加减速算法,然后计算了它们在同样的初始参数下的运动结果,并绘制了加速度曲线、速度曲线和位移曲线的图像。你可以根据需要修改初始参数以及绘图方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值