在轨捕获场景下的软对接手腕设计及复合体镇定控制【附算法】
✨ 长期致力于软对接手腕、刚度优化、复合体、参数辨识、协同镇定控制研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1全向柔顺软对接手腕的刚柔耦合动力学建模与Kane方程求解设计了具有空间六维碰撞冲量缓冲能力的软对接手腕包含三个旋转自由度和三个平移自由度每个自由度均由柔性元件弹簧-阻尼组合提供被动柔顺性。采用Kane方法建立刚柔耦合动力学模型将系统划分为六个刚体连杆和六个柔性关节广义坐标选取各关节的位移和转角。首先计算每个刚体的偏速度与偏角速度然后推导广义主动力包含关节驱动力和柔性元件恢复力和广义惯性力。柔性元件的力-位移关系采用非线性模型F k1*x k2*x^3 c*x_dot其中k15000 N/mk22000 N/m^3c50 N·s/m。最终得到动力学方程形式为M(q)*q_ddot C(q,q_dot)*q_dot K(q) tau_ext其中M为质量矩阵C为科氏力矩阵K为柔性力向量。在单维极限碰撞沿x轴方向一百牛瞬时冲击条件下仿真得到手腕关节最大压缩位移为八点三毫米反弹速度为峰值速度的百分之十二表明缓冲有效。六维碰撞三个方向力各五十牛三个力矩各十牛米时各关节位移均在安全限位内能量吸收率达百分之八十七。2基于微粒群算法的多刚度参数全局寻优策略针对极限碰撞条件下软对接手腕某些关节可能出现超限位移的问题提出了以刚度参数为设计变量、以峰值位移最小化为目标的多目标优化策略。设计变量包括六个柔性关节的线性刚度系数k1_i和三次项系数k2_i共十二个变量。约束条件为各关节最大位移不超过机械限位的百分之九十且最大应力低于材料屈服强度。优化目标为六个方向峰值位移的加权和权重根据任务优先级设定轴向平移权重最高为0.3旋转方向各0.1。采用微粒群算法PSO种群规模八十迭代三百代惯性权重从零点九线性递减至零点四学习因子c1c21.5。算法中需要调用动力学模型评估每组刚度参数下的碰撞响应每次评估耗时约零点二秒总优化计算时间约四小时。优化后得到的最优刚度组合为轴向k17200 N/mk23100 N/m^3横向k15800 N/mk21900 N/m^3旋转方向k1800 N·m/radk2200 N·m/rad^3。与原设计相比最薄弱关节的峰值位移从十四毫米降低至九点五毫米满足限位要求。3无激励参数辨识与协同镇定控制策略捕获非合作目标后复合体动力学参数未知无法直接设计镇定控制器。提出了一种无激励参数辨识方法利用捕获瞬间动量守恒建立方程组无需对复合体施加主动激励。具体地利用双目视觉跟踪捕获后基座和非合作目标的运动轨迹采样频率二百赫兹获得线速度和角速度序列。根据动量守恒复合体总动量和总角动量在捕获前后保持不变从而列出关于非合作目标质量、质心和转动惯量的线性方程组。通过连续增维最小二乘求解当条件数小于阈值1e4时停止迭代。在仿真实验中非合作目标真实质量为五十千克辨识值为五十点八千克误差百分之一点六质心坐标误差小于三毫米。基于辨识参数设计了终端滑模协同镇定控制器。控制目标为基座姿态稳定指向误差小于零点一度、软对接手腕振动抑制关节角速度小于零点零一弧度每秒和非合作目标相对速度为零。控制器输出为反作用飞轮力矩和手腕可控阻尼器的控制电流。在复合体初始角速度为每秒五度的条件下镇定时间约为八点五秒振动残余能量衰减百分之九十九。地面微重力气浮平台实验验证了上述方法的有效性。import numpy as np from scipy.integrate import solve_ivp from pyswarm import pso class SoftDockingWrist: def __init__(self): # 质量矩阵 (简化6自由度) self.M np.diag([2.0, 2.0, 2.0, 0.1, 0.1, 0.1]) # kg, kg*m^2 # 刚度参数 (待优化) self.k1 np.array([5000, 5000, 5000, 300, 300, 300]) self.k2 np.array([2000, 2000, 2000, 100, 100, 100]) self.c np.array([50, 50, 50, 10, 10, 10]) self.q np.zeros(6) # 位移/角度 self.qd np.zeros(6) # 速度 def dynamics(self, t, state, F_ext): 状态空间动力学输入为外力/力矩 q state[:6] qd state[6:] # 非线性恢复力 F_spring -self.k1 * q - self.k2 * q**3 - self.c * qd # M * qdd F_ext F_spring - Coriolis (忽略科氏力简化) qdd np.linalg.solve(self.M, F_ext F_spring) return np.concatenate([qd, qdd]) def simulate_collision(self, F_impulse, duration0.5): 模拟碰撞响应返回峰值位移 def ode_func(t, state): # 碰撞力在t0.01s内施加 if t 0.01: F_ext F_impulse / 0.01 else: F_ext np.zeros(6) return self.dynamics(t, state, F_ext) state0 np.zeros(12) sol solve_ivp(ode_func, [0, duration], state0, methodRK45, max_step0.001) peak_displacement np.max(np.abs(sol.y[:6]), axis1) return peak_displacement def optimize_stiffness(): 微粒群优化刚度参数 bounds [(2000, 10000), (1000, 5000), # k1_x, k2_x (2000, 10000), (1000, 5000), # k1_y, k2_y (2000, 10000), (1000, 5000), # k1_z, k2_z (100, 1000), (50, 300), # 旋转 (100, 1000), (50, 300), (100, 1000), (50, 300)] def obj_func(x): wrist SoftDockingWrist() wrist.k1 np.array([x[0], x[2], x[4], x[6], x[8], x[10]]) wrist.k2 np.array([x[1], x[3], x[5], x[7], x[9], x[11]]) # 六维碰撞力 F np.array([100, 100, 100, 10, 10, 10]) peak wrist.simulate_collision(F) # 惩罚超限 penalty np.sum(np.maximum(peak - np.array([0.01,0.01,0.01,0.1,0.1,0.1]), 0)) * 1e3 return np.sum(peak) penalty # 使用pyswarm进行PSO优化 xopt, fopt pso(obj_func, [b[0] for b in bounds], [b[1] for b in bounds], swarmsize80, maxiter300) return xopt