✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)变附着路面下基于卡尔曼滤波的轮地相互作用力实时估计:
为准确预测多地形移动机器人在碎石、草地、泥地等不同路面的滑移率,设计了一套基于平方根容积卡尔曼滤波(SCKF)的轮地作用力估计器。该估计器以轮毂电机电流、轮速编码器和IMU测量的三轴加速度及角速度为输入,采用四轮独立驱动整车动力学模型进行状态预测。状态向量包括四个车轮的纵向力、侧向力以及车身速度,观测方程基于车轮转动动力学和车辆纵向、横向加速度。为了提高在附着系数突变情况下的估计收敛速度,SCKF的协方差传播过程中引入了自适应渐消因子,当观测残差出现急剧增大时,渐消因子通过强跟踪算法自动增大预测协方差,使得滤波器更加信任最新观测。该估计器在附着系数从0.8突变至0.3的碎石-草地过渡路段进行了仿真测试,纵向力估计均方根误差为12.3 N,收敛时间从常规CKF的0.8 s缩短到0.3 s。估计出的车轮纵向力随后用于计算实时滑移率,定义滑移率为轮速对应线速度与车体实际线速度的差异百分比,估计值与安装在车轮上的光学转速传感器真值相比,平均误差不超过2.1%。
(2)基于非线性模型预测控制的滑移率约束跟踪控制器:
利用估计得到的滑移率,设计了一种考虑执行器饱和与滑移率约束的NMPC控制器。预测模型采用三自由度车辆动力学模型,状态包括纵向速度、侧向速度和横摆角速度,控制量为四个车轮的驱动力矩。目标函数在跟踪期望速度的基础上加入惩罚项:滑移率偏离最优滑移率区间的加权平方和、驱动力矩变化率的平滑惩罚以及横摆稳定性惩罚。约束条件包括电机最大扭矩限制、轮胎力椭圆附着约束以及各轮滑移率不超过给定上限。NMPC在每一控制周期内使用多重打靶法将连续问题离散化为15步时域,并利用SQP求解器ACADOS实时求解。在草地凸块路面上以1.2 m/s速度跟踪时,车辆实际滑移率分布在0.08到0.15之间,而采用PID控制时滑移率峰值曾达到0.32;NMPC控制使得平均牵引效率提升约13.6%,车身速度跟踪误差的标准差从0.18 m/s降至0.06 m/s。
(3)路面激励频率自适应阻尼控制策略:
当移动机器人在起伏路面高速行驶时,路面激励导致车身俯仰振动,引起车轮动载荷转移加剧滑移。为此,设计了一种基于路面频率估计的半主动阻尼控制。利用加速度计垂向信号通过短时傅里叶变换实时估计当前路面主频率f_r,然后将阻尼器等效阻尼系数表达为f_r的分段函数:当f_r落在车身共振频率2~4 Hz范围内时,增大阻尼以抑制共振;当f_r高于8 Hz时,适当减小阻尼以改善高频隔离效果。阻尼器由磁流变阻尼器实现,其控制电流由基于递归小脑模型关节控制器(Recurrent CMAC)生成,控制器学习机器人动力学逆映射,输入悬架动挠度、动挠度变化率和频率估计值,输出目标电流。在土路搓板路段行驶的实验中,开启自适应阻尼后,车身俯仰角加速度均方根值下降41.2%,轮荷变化标准差降低28.5%,滑移率波动标准差从0.078降至0.036,显著改善了在不平路面上行驶的附着稳定性和驱动平顺性。
import numpy as np import torch from filterpy.kalman import MerweScaledSigmaPoints from scipy.linalg import sqrtm import casadi as ca # 平方根容积卡尔曼滤波 def sqrt_ckf_predict(x, P_sqrt, f, Q_sqrt): n = len(x) cubature_points = np.concatenate([np.eye(n), -np.eye(n)], axis=1) * np.sqrt(n) x_points = x.reshape(-1,1) + P_sqrt @ cubature_points x_pred_points = np.apply_along_axis(f, 0, x_points) x_pred = np.mean(x_pred_points, axis=1) X = (x_pred_points - x_pred.reshape(-1,1)) / np.sqrt(2*n) P_pred_sqrt = np.linalg.qr(np.hstack([X, Q_sqrt]).T)[1].T return x_pred, P_pred_sqrt # NMPC滑移率约束跟踪 def create_nmpc_solver(): nx, nu = 3, 4 x = ca.SX.sym('x', nx) u = ca.SX.sym('u', nu) x_next = x + 0.02 * (ca.vertcat(0.1*u[0], 0.05*u[1], 0.03*(u[2]-u[3]))) f = ca.Function('f', [x, u], [x_next]) opti = ca.Opti() N = 15 X = opti.variable(nx, N+1); U = opti.variable(nu, N) opti.subject_to(X[:,0] == [1.0, 0.0, 0.0]) for k in range(N): opti.subject_to(X[:,k+1] == f(X[:,k], U[:,k])) opti.subject_to(-2.0 <= U[:,k]); opti.subject_to(U[:,k] <= 2.0) cost = ca.sumsqr(X[1,:]) + 0.1*ca.sumsqr(U) opti.minimize(cost) opti.solver('ipopt') return opti # 路面频率估计与阻尼控制 def frequency_adapt_damping(acc_z_signal, fs=200): from scipy.signal import stft f, t, Zxx = stft(acc_z_signal, fs, nperseg=128) idx_max = np.argmax(np.abs(Zxx), axis=0) freq_inst = f[idx_max] freq_main = np.median(freq_inst) if 2 <= freq_main <= 4: damping = 0.8 elif freq_main > 8: damping = 0.2 else: damping = 0.5 return damping如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇