点到点轨迹规划【1】——梯形速度曲线规划

本文介绍了梯形速度曲线轨迹规划的基本原理,包括加速度、减速率的设定,如何根据用户给定参数计算加减速时间和位移,以及在实际应用中的案例。重点在于解决最大速度限制下的轨迹调整策略。

【声明】实验中用到梯形速度规划相关知识,发现关于梯形速度规划的这篇知乎文章资料很好,特此做的归纳笔记,原文中的公式稍有错误,本人已在下面博文中更正,打算整理一个经典点到点轨迹规划方法的专栏。如有侵权,请告知删除!参考文章原文链接奉上

1、简介

梯形速度曲线轨迹规划算法是工业控制领域应用最为广泛的速度控制策略之一,标准形式的梯形速度规划包含匀加速匀速匀减速三个阶段,在变速过程中,加速度始终是人为设定的固定值。

首先定义变量:
q 0 q_0 q0:初始位置; t 0 t_0 t0:初始时间; v 0 v_0 v0:初始速度;
q 1 q_1 q1:结束位置; t 1 t_1 t1:结束时间; v 1 v_1 v1:结束速度;
a a a_a aa:最大加速度;
a d a_d ad:最大减速度;
v m a x v_{max} vmax:用户输入最大速度;
v v v_v vv:实际最大速度;
T a T_a Ta:匀加速段时长;
T d T_d Td:匀减速段时长;

匀加速段: 加速度为恒定的正直,速度随时间线性增加,位移是时间的抛物线函数;
匀速段: 加速度为零,速度恒定,位移是时间的线性函数;
匀减速段: 加速度为恒定的负值,速度随时间线性减小,位移是关于时间的二次多项式。

2、通用梯形速度曲线算法

在实际的机电系统中,其执行部件(一般是电机)允许的最大速度、最大加速度、启动速度、停车速度等会受到自身的物理条件约束,不可以人为改变。因此,实际点到点轨迹规划任务中,用户一般指定起始点位置、速度、最大速度、最大加速度、终止点位置、速度来计算梯形速度轨迹。

因此,通用梯形速度曲线为已知初始速度,终止速度,加速度,减速度,最大速度,位移。要确定轨迹,关键是计算出加速度段,匀速段,减速度段对应的时间 T a T_a Ta T v T_v Tv T d T_d Td,然后就可以计算任意时刻 t ∈ [ 0 , T a + T v + T d ] t\in[0,T_a+T_v+T_d] t[0,Ta+Tv+Td] 对应的位移,速度,加速度。

用户给定的起始速度,终止速度,加速度,减速度,最大速度,位移参数,不一定都能满足,若给定的参数对应的的轨迹不存在,那么需要修改最大速度参数,优先满足位移条件(在实际的数控系统中常常是这么做),常常修改的是最大速度。因此,可以按照以下步骤计算梯形速度曲线:

(1)首先,根据 h h h v 0 v_0 v0 v 1 v_1 v1 a a a_a aa a d a_d ad,其中 h = q 1 − q 0 h=q_1-q_0 h=q1q0,计算能够达到的最大速度,要达到最大速度,只有加速度段和减速度段,没有匀速段,因此有:
h ≥ h a + h d = v f 2 − v 0 2 2 a a + v 1 2 − v f 2 2 a d h \geq h_a + h_d = \frac{v_f^2-v_0^2}{2a_a} + \frac{v_1^2-v_f^2}{2a_d} hha+hd=2aavf2v02+2ad

机械臂梯形速度规划具有重要意义,通过设定最大速度和加速度,能够确保机械臂在执行任务时既高效又稳定,体现了在轨迹规划速度和加速度规划的重要性,并且强调要根据优化结果进行实际轨迹绘制[^1]。 ### 原理 机械臂梯形速度规划的原理基于对速度、加速度的合理控制。在运动过程中,机械臂的速度变化呈现梯形特征。其运动过程一般分为加速阶段、匀速阶段和减速阶段。在加速阶段,机械臂以设定的最大加速度提升速度,直到达到最大速度;接着进入匀速阶段,保持最大速度运动;最后在减速阶段,以设定的最大加速度降低速度,直至停止。这种规划方式能使机械臂平稳地完成操作,避免因速度突变产生的冲击和震动。 ### 方法 在实际应用中,通过设定最大速度和加速度来实现梯形速度规划。根据任务需求和机械臂的性能,确定合适的最大速度和加速度值,以保证机械臂在不同阶段的运动符合梯形速度曲线的特征。 ### 实现 在代码实现上,可参考相关示例,按照设定的最大速度和加速度轨迹进行速度规划。同时,要依据优化结果进行实际轨迹绘制,确保机械臂按照规划速度曲线完成任务。 以下是一个简单的Python示例代码,用于演示机械臂梯形速度规划的基本实现: ```python import numpy as np import matplotlib.pyplot as plt # 设定参数 max_velocity = 1.0 # 最大速度 max_acceleration = 0.5 # 最大加速度 total_distance = 5.0 # 总距离 # 计算加速和减速时间 t_acc = max_velocity / max_acceleration t_dec = t_acc # 计算匀速阶段的距离 s_acc = 0.5 * max_acceleration * t_acc ** 2 s_dec = s_acc s_const = total_distance - s_acc - s_dec # 计算匀速阶段的时间 if s_const > 0: t_const = s_const / max_velocity else: t_const = 0 max_velocity = np.sqrt(max_acceleration * total_distance) t_acc = max_velocity / max_acceleration t_dec = t_acc # 总时间 total_time = t_acc + t_const + t_dec # 生成时间序列 t = np.linspace(0, total_time, num=1000) # 初始化速度数组 velocity = np.zeros_like(t) # 计算速度曲线 for i in range(len(t)): if t[i] < t_acc: velocity[i] = max_acceleration * t[i] elif t[i] < t_acc + t_const: velocity[i] = max_velocity else: velocity[i] = max_velocity - max_acceleration * (t[i] - t_acc - t_const) # 绘制速度曲线 plt.plot(t, velocity) plt.xlabel('Time (s)') plt.ylabel('Velocity (m/s)') plt.title('Trapezoidal Velocity Profile') plt.grid(True) plt.show() ```
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值