✨ 长期致力于多自由度、踝关节外骨骼、虚拟样机、无模型控制、人机交互研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1三自由度踝关节外骨骼机械结构与运动学建模设计一种三自由度踝关节外骨骼包含跖屈/背屈、内翻/外翻和内收/外展三个旋转自由度。采用双平行四连杆机构实现转动轴线与人体踝关节对齐减少穿戴不适。驱动元件为三个Maxon直流无刷电机分别通过谐波减速器减速比50:1传递扭矩。结构材料选用7075铝合金和碳纤维总质量控制在1.2kg以内。基于改进D-H参数法建立运动学模型正运动学通过齐次变换矩阵计算末端足底位姿逆运动学采用几何法求解各关节角。在MATLAB Robotics Toolbox中验证末端工作空间覆盖了人体踝关节正常活动范围的120%。蒙特卡洛法分析表明在关节角度限制跖屈-45°到20°内翻-15°到30°内收-10°到15°)内无奇异位形。2基于时延估计与RBF神经网络的无模型轨迹跟踪控制器设计一种无模型控制器它将外骨骼动力学分解为时延估计项和神经网络补偿项。时延估计利用上一时刻的输入和输出近似当前时刻的动力学逆模型RBF神经网络实时补偿时延估计误差和建模不确定性。网络输入为关节位置误差和速度误差输出为补偿力矩。网络权重自适应律由李雅普诺夫稳定推导确保误差收敛。控制器中还包括一个自适应增益矩阵用于调节控制通道。在Simscape Multibee虚拟样机中模拟被动康复训练正弦轨迹幅值15度频率0.3Hz控制器最大跟踪误差为0.62度均方根误差0.18度。加入模拟人体交互力矩幅值5Nm随机变化后误差仅增加0.1度显示出强鲁棒性。3自适应导纳控制实现运动辅助柔顺交互为运动辅助模式设计基于时延估计的无模型自适应导纳控制器。外环导纳模型将人机交互力通过六维力传感器测量映射为期望轨迹修正量内环采用无模型控制器跟踪修正后的轨迹。导纳参数中的刚度和阻尼通过粒子群算法离线预优化而惯量系数则由穿戴者步态周期内的平均交互力在线调整。设计一个自适应参数辨识器利用递推最小二乘估计穿戴者小腿的刚度和期望运动角度用于生成参考轨迹。人机耦合虚拟样机仿真中模拟穿戴者主动做踝关节跖屈动作期望角度峰值20度实际发力变化。控制器辅助后穿戴者实际输出力降低42%运动轨迹平滑跟随期望且未出现震荡或迟滞。import numpy as np import tensorflow as tf from scipy.optimize import differential_evolution class TimeDelayEstimator: def __init__(self, dt0.001, alpha0.5): self.dt dt self.alpha alpha # 滤波器系数 self.u_prev 0.0 self.q_prev 0.0 self.qd_prev 0.0 def estimate(self, q, qd, qdd, u): # 时延估计 F ≈ (u_prev - M0*qdd_prev) / alpha M0 0.05 # 名义惯量 delay 0.002 # 2ms延迟 steps int(delay / self.dt) # 简化用前一时刻 F_est (self.u_prev - M0 * self.qd_prev) / (self.alpha 1e-6) self.u_prev u self.q_prev q self.qd_prev qd return F_est class RBFCompensator: def __init__(self, n_centers5, input_dim2): self.centers np.random.randn(n_centers, input_dim) * 2.0 self.sigma 1.0 self.weights np.zeros(n_centers) self.lr 0.01 def basis(self, x): diffs x - self.centers norms np.linalg.norm(diffs, axis1) return np.exp(-norms**2 / (2*self.sigma**2)) def compute(self, x): phi self.basis(x) return np.dot(phi, self.weights) def update(self, x, error): phi self.basis(x) self.weights self.lr * error * phi # 权重裁剪防止过大 self.weights np.clip(self.weights, -10, 10) class AdaptiveImpedancePSO: def __init__(self, M02.0, B015.0, K080.0): self.M M0; self.B B0; self.K K0 self.rls_gain 0.98 self.P np.eye(2)*1000 self.theta np.zeros(2) # [k_stiffness, angle_des] def adapt_impedance(self, F_measured, error_vel): # 根据力调整惯量 if abs(F_measured) 20: self.M min(5.0, self.M * 0.98) else: self.M max(0.5, self.M * 1.02) # 阻尼根据速度误差调整 self.B 15.0 5.0 * abs(error_vel) return self.M, self.B, self.K def rls_identify(self, phi, y): # phi [theta_actual, 1]^T, y 关节力矩 K self.P phi / (self.rls_gain phi.T self.P phi) self.theta K * (y - phi.T self.theta) self.P (self.P - np.outer(K, phi.T self.P)) / self.rls_gain return self.theta class AnkleExoController: def __init__(self): self.tde TimeDelayEstimator() self.rbf RBFCompensator() self.impedance AdaptiveImpedancePSO() def control(self, q_des, q, qd, qdd, F_int, dt): e_pos q_des - q e_vel -qd # 导纳外环 M,B,K self.impedance.adapt_impedance(F_int, e_vel) x_corr F_int / (M*(1/dt**2) B/dt K) # 简化位置修正 q_ref q_des x_corr # 内环无模型控制 F_est self.tde.estimate(q, qd, qdd, 0) tau_rbf self.rbf.compute(np.array([e_pos, e_vel])) tau F_est tau_rbf 10.0 * e_pos 2.0 * e_vel # 更新RBF self.rbf.update(np.array([e_pos, e_vel]), tau - F_est) return tau def test_ankle_control(): controller AnkleExoController() t 0; dt 0.001 q 0.0; qd 0.0 for step in range(5000): t dt q_des 15 * np.sin(2*np.pi*0.3*t) # 正弦轨迹 F_int 3*np.sin(2*np.pi*1.2*t) 1 # 模拟交互力 tau controller.control(q_des, q, qd, 0, F_int, dt) # 简单动力学模型 qdd (tau - 0.1*qd - 2*q) / 0.05 qdd (tau - 0.1*qd - 2*q) / 0.05 qd qdd * dt q qd * dt print(fFinal q{q:.2f}, q_des{q_des:.2f}, error{abs(q_des-q):.3f} deg) if __name__ __main__: test_ankle_control()