当前位置: 首页 > news >正文

S曲线规划停止运动

S曲线停止运动的实现

在运动控制系统中,简单的急停会带来冲击和振动。S曲线停止运动(S-Curve Stop)通过在减速阶段平滑过渡加速度,让电机或运动部件优雅地停下来。本文将拆解核心算法,并给出代码框架。

1. S曲线停止原理

与梯形速度曲线不同,S曲线在减速阶段的加速度不是突变的,而是呈线性变化(加加速度 Jerk 恒定)。这样可以:

  • 减少机械冲击
  • 降低定位过冲
  • 提升运动平顺性

典型的 S 曲线减速过程分为三个阶段:

  1. 减加速度段— 加速度从 0 线性降至最大负加速度
  2. 恒减速段— 以最大负加速度匀速减速
  3. 加速度回升段— 加速度从最大负加速度线性回升至 0

匀速运动

减加速度段
Jerk -J

恒减速段
Acc = -Amax

加速度回升段
Jerk +J

停止

2. 核心参数

参数含义单位
v0当前速度count/s
Amax最大加速度count/s²
J加加速度 (Jerk)count/s³
T1减加速度段时间s
T2恒减速段时间s
T3加速度回升段时间s

3. 公式推导

假设从速度v0v_0v0减速到 0,加加速度恒定为JJJ

  • 减加速度段0≤t<T10 \le t < T_10t<T1):
    a(t)=−J⋅ta(t) = -J \cdot ta(t)=Jt
    v(t)=v0−12Jt2v(t) = v_0 - \frac{1}{2} J t^2v(t)=v021Jt2

  • 恒减速段T1≤t<T1+T2T_1 \le t < T_1 + T_2T1t<T1+T2):
    a(t)=−Amaxa(t) = -A_{max}a(t)=Amax
    v(t)=v(T1)−Amax⋅(t−T1)v(t) = v(T_1) - A_{max} \cdot (t - T_1)v(t)=v(T1)Amax(tT1)

  • 加速度回升段T1+T2≤t<T1+T2+T3T_1 + T_2 \le t < T_1 + T_2 + T_3T1+T2t<T1+T2+T3):
    a(t)=−Amax+J⋅(t−T1−T2)a(t) = -A_{max} + J \cdot (t - T_1 - T_2)a(t)=Amax+J(tT1T2)
    v(t)v(t)v(t)持续减小直至归零

实际实现中,通常用离散的方式在每个控制周期计算当前目标速度。

4. 代码实现

# -*- coding: utf-8 -*-importnumpyasnpfrommatplotlibimportpyplotaspltdefstop(q,v,a,a_max,j_max,step=0.0001):T_trans=0.0sign_a=0.0v1=v q1=qifabs(a)>1e-6:T_trans=abs(a)/j_max sign_a=1.0ifa>0else-1.0v1=v+a*T_trans-sign_a*j_max*T_trans**2/2q1=q+v*T_trans+a*T_trans**2/2-sign_a*j_max*T_trans**3/6v_abs=abs(v1)sign_v=1.0ifv1>0else(-1.0ifv1<0else0.0)ifv_abs<1e-6:T_decel=0.0Tj=0.0reached_a_max=Falseq_stop=q1elifv_abs*j_max<a_max**2:Tj=np.sqrt(v_abs/j_max)T_decel=2*Tj reached_a_max=Falseq_stop=q1+sign_v*v_abs*Tjelse:Tj=a_max/j_max T_decel=Tj+v_abs/a_max reached_a_max=Trueq_stop=q1+sign_v*v_abs*(v_abs/(2*a_max)+Tj/2)T_total=T_trans+T_decelifT_total<1e-6:return[q],[v],[0.0],[0.0],q t_list=np.arange(0,T_total+step,step)q_list,v_list,a_list=[],[],[]fortint_list:ifT_trans>0andt<T_trans:a_t=a-sign_a*j_max*t v_t=v+a*t-sign_a*j_max*t**2/2q_t=q+v*t+a*t**2/2-sign_a*j_max*t**3/6elifT_decel<1e-6:a_t=0.0v_t=v1 q_t=q1else:td=t-T_transiftd>=T_decel:a_t=0.0v_t=0.0q_t=q_stopelifnotreached_a_max:iftd<Tj:a_t=-sign_v*j_max*td v_t=v1-sign_v*j_max*td**2/2q_t=q1+v1*td-sign_v*j_max*td**3/6else:tau=T_decel-td a_t=-sign_v*j_max*tau v_t=sign_v*j_max*tau**2/2q_t=q_stop-sign_v*j_max*tau**3/6else:iftd<Tj:a_t=-sign_v*j_max*td v_t=v1-sign_v*j_max*td**2/2q_t=q1+v1*td-sign_v*j_max*td**3/6eliftd<T_decel-Tj:t_const=td-Tj v_const=v1-sign_v*a_max*Tj/2q_const=q1+v1*Tj-sign_v*j_max*Tj**3/6a_t=-sign_v*a_max v_t=v_const-sign_v*a_max*t_const q_t=q_const+v_const*t_const-sign_v*a_max*t_const**2/2else:tau=T_decel-td a_t=-sign_v*j_max*tau v_t=sign_v*j_max*tau**2/2q_t=q_stop-sign_v*j_max*tau**3/6q_list.append(q_t)v_list.append(v_t)a_list.append(a_t)returnq_list,v_list,a_list,t_list,q_stopif__name__=="__main__":a_max=200000j_max=2000000test_cases=[(0,10000,0,"v=10000, a=0"),(1000,20000,10000,"v=20000, a=10000"),(0,30000,0,"v=30000, a=0"),(0,10000,100000,"v=10000, a=100000"),(0,10000,-100000,"v=10000, a=-100000"),(0,-10000,-100000,"v=-10000, a=-100000"),]print("a_max={:.0f}, j_max={:.0f}".format(a_max,j_max))print("="*65)print("{:<30}{:>8}{:>12}{:>12}".format("场景","T(s)","q_stop","v_end"))print("-"*65)plt.figure(figsize=(14,10))plt.suptitle("Jerk-limited Stop Trajectory",fontsize=14)fori,(q,v,a,label)inenumerate(test_cases):ql,vl,al,tl,q_stop=stop(q,v,a,a_max,j_max)print("{:<30}{:>8.4f}{:>12.2f}{:>12.4f}".format(label,tl[-1],q_stop,vl[-1]))plt.subplot(3,2,i+1)plt.plot(tl,ql,'r',linewidth=1.2,label='pos')plt.plot(tl,vl,'g',linewidth=1.2,label='vel')plt.axhline(y=0,color='gray',linestyle='--',alpha=0.4)plt.title(label)plt.xlabel("Time (s)")plt.legend(loc='best',fontsize=8)plt.grid(True,alpha=0.3)print("="*65)plt.tight_layout()plt.show()

5. 总结

S曲线停止运动通过控制加加速度实现了平滑减速,是工业运动控制中的常用策略。你可以在上方代码块中填入自己的实现,结合具体硬件平台进行调试。

http://www.jsqmd.com/news/1033262/

相关文章:

  • 3种Ant Design紧凑模式实战指南:从空间优化到极致用户体验
  • 项目急用材料怎么办?这几家Nitronic60现货充足且支持快速发货 - 品牌2026
  • 多模型底层调度实测拆解:智能择优匹配全品类开发任务
  • 2026年更新:山东市场人物铜雕可靠厂家深度解析与格局洞察 - 品牌鉴赏官2026
  • 规格齐全更省心:如何筛选一家靠谱的4J36低膨胀合金生产商 - 品牌2026
  • 2026年呼叫中心系统行业报告:头部厂商技术能力与落地案例盘点
  • 线性回归的几何本质:从正交投影到梯度下降的直观理解
  • 如何选择iPhone信用卡读卡器?
  • 2026年当下常州食堂承包市场深度解析与实力服务商推荐 - 品牌鉴赏官2026
  • 不同需求怎么选MBA面试辅导机构?2026场景攻略
  • 选材不再迷茫:如何精准筛选口碑良好的17-4PH不锈钢源头厂商? - 品牌2026
  • Tensor数据设置的高效实现:优化内存管理的完整指南
  • Scrapling实战指南:构建智能反检测爬虫的终极解决方案
  • 2026年市场质量好的全彩屏生产厂家排行 - 品牌排行榜
  • pandas多维聚合实战:银行级时间+分组+业务逻辑聚合方法论
  • 边缘AI部署的技术抉择:mobilenetv3_small_100.lamb_in1k的架构权衡与实践指南
  • 2026市面上好用的轻钢龙骨厂家推荐 - 品牌排行榜
  • 设计Agent 生成代码的 Lint 规则体系,理解 Hook 机制
  • 软件测试入门——第十九课(http和https协议详解)
  • 分类变量编码方法全解析:从One-Hot到Target Encoding
  • 绘本和语文学习有什么关系?
  • 数据科学家能力校准:三门课跨越建模、落地与系统鸿沟
  • 川源(GSD)基于多年在真空负压产品领域的技术积累,产品线覆盖结构坚固的RSV真空风机、节能静音的IVR永磁变频罗茨真空机组、高效稳定的GVT空气悬浮真空泵,叠加全流程智能监控与远程管理平台,为纸巾生
  • Taskbar-Lyrics:Windows 11任务栏歌词显示的终极解决方案
  • 2026年婚姻家庭新趋势:廖佳律师解读法律保护伞
  • 零成本搭建企业级营销自动化系统:Mautic完整部署与实战指南
  • 2026年6月市面上优质的铝合金高压压铸销售厂家推荐,铝合金高压压铸/铝压铸件/铝合金压铸,铝合金高压压铸订做厂家推荐 - 品牌推荐师
  • 远景重磅发布全球首款AI光储一体化系统,以AI重构新型光储产业发展新格局
  • 从 CUDA 到 ROCm,用 HIPify 和 SGLang 跑通大模型迁移第一步
  • 想做数据分析师,高考应该报哪些专业?