✨ 长期致力于Delta高速并联机器人、轨迹优化、轨迹跟踪、输入整形、一体化控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)运动学与凯恩方程动力学建模:
建立Delta并联机器人的运动学模型,通过几何法求解位置逆解,已知动平台中心点坐标计算三个主动臂的关节角度。动平台与静平台通过三组平行四边形连杆连接,每组包含两个从动臂。采用旋量理论描述各杆件运动旋量,计算主动臂和从动臂的广义速度。应用凯恩方程建立简化动力学模型,将系统动能对广义速度求偏导得到广义惯性力,主动力由电机力矩和重力构成。动力学方程形式为M(q)*q_ddot + C(q,q_dot)*q_dot + G(q) = tau,其中M为3x3惯性矩阵,C为科氏力和离心力项,G为重力项。在MATLAB中编程实现动力学模型,使用符号工具箱推导解析表达式。通过ADAMS多体动力学软件进行验证,给定相同的门型轨迹,对比关节力矩曲线,两者最大偏差小于5.2%,验证了模型的准确性。模型计算一次耗时0.3毫秒,可用于实时控制。
(2)改进蝴蝶优化算法的多目标轨迹优化:
以NURBS曲线拟合拾取和放置轨迹,控制点设8个,通过权重因子调整曲线局部形状。优化目标为时间最短和冲击最小,冲击定义为加加速度的平方对时间的积分。采用改进蝴蝶优化算法求解最优控制点参数。改进包括:Circle映射初始化种群使分布更均匀,分数阶微分更新蝴蝶位置以加快收敛,分数阶阶次alpha取0.7。目标函数加权系数时间0.4,冲击0.6。种群数60,迭代80次。仿真对比四种算法:标准BOA、粒子群、灰狼和所提IBOA。IBOA的收敛精度最高,目标函数值为124.7,标准BOA为156.2。优化后轨迹运行时间从0.78秒降至0.72秒,冲击峰值降低79.2%。末端动平台振动加速度均方根值从优化前的1.28m/s²降至1.09m/s²,降幅14.5%。将优化轨迹导入ADAMS进行动力学仿真,验证了冲击减小对抑制振动的正向作用。
(3)预定义时间滑模控制器与闭环输入整形一体化:
设计预定义时间非奇异终端滑模控制器用于轨迹跟踪控制,保证跟踪误差在指定时间T_s=0.002秒内收敛到零。滑模面设计为s = e_dot + beta*sig(e)^(p/q),其中p/q介于1到2之间。控制律包含等效控制和切换控制,切换增益自适应调整。在Simulink中搭建控制系统模型,与PID对比,所提控制器的最大跟踪误差0.015毫米,PID为0.12毫米。为进一步抑制残余振动,提出闭环最优输入整形器。首先通过六阶模态分析确定对动平台振动贡献最大的模态频率为22Hz和58Hz。针对主导频率设计ZV整形器和ZVD整形器,并将整形器嵌入到闭环反馈回路中,利用Smith预估器补偿时滞。仿真表明闭环最优输入整形器使残余振动幅值降低44.9%。最终将轨迹优化、轨迹跟踪和输入整形三者集成,实现一体化控制。搭建物理实验平台,包括Delta机器人样机、Beckhoff控制器和激光位移传感器。实验结果验证:一体化控制方法使末端动平台振动加速度变化范围从0.97m/s²降至0.35m/s²,降低63.4%,定位时间缩短28%。
import numpy as np import control as ct from scipy.optimize import minimize def delta_inverse_kinematics(x, y, z, L1=0.3, L2=0.5): R = 0.2 r = 0.05 theta = [0, 2*np.pi/3, 4*np.pi/3] angles = [] for i in range(3): xi = x - (R - r) * np.cos(theta[i]) yi = y - (R - r) * np.sin(theta[i]) zi = z E = 2 * L1 * yi F = 2 * L1 * xi G = xi**2 + yi**2 + zi**2 + L1**2 - L2**2 t1 = (G - np.sqrt(E**2 + F**2 - G**2)) / (E + F + 1e-6) angle_i = 2 * np.arctan(t1) angles.append(angle_i) return np.array(angles) class PredefinedTimeSMC: def __init__(self, Ts=0.002, beta=10.0, p=5, q=3): self.Ts = Ts self.beta = beta self.p = p self.q = q def control(self, q_des, q_dot_des, q, q_dot): e = q_des - q e_dot = q_dot_des - q_dot sig = np.sign(e) * np.abs(e)**(self.p/self.q) s = e_dot + self.beta * sig alpha = self.p/self.q * np.abs(e)**(self.p/self.q - 1) t = 0 rho = 0.1 + 0.5 * np.abs(s) K = 50.0 / (self.Ts * (1 - alpha)) + rho u_eq = -self.beta * alpha * e_dot + q_dot_des + K * s return np.clip(u_eq, -50, 50) def input_shaping_coeff(freq, zeta=0.1, type='ZVD'): omega = 2 * np.pi * freq T = 1.0 / freq if type == 'ZV': K = 1 / (1 + np.exp(-zeta * np.pi / np.sqrt(1-zeta**2))) return [K, 1-K], [0, T/2] elif type == 'ZVD': K = np.exp(-zeta * np.pi / np.sqrt(1-zeta**2)) A = 1 / (1 + 2*K + K**2) amps = [A, 2*A*K, A*K**2] times = [0, T/2, T] return amps, times smc = PredefinedTimeSMC() q_des = np.array([0.5, -0.3, 0.2]) q_dot_des = np.array([0.0, 0.0, 0.0]) q_cur = np.array([0.48, -0.28, 0.19]) q_dot_cur = np.array([0.1, -0.05, 0.03]) torque = smc.control(q_des, q_dot_des, q_cur, q_dot_cur) print(f'预定义时间滑模控制输出力矩: {torque}') amps, delays = input_shaping_coeff(freq=22.0, type='ZVD') print(f'ZVD整形器幅值: {amps}, 延迟: {delays}') " "标题","关键词","内容","代码示例