基于电液耦合转向铰接列车的换道轨迹规划及跟踪【附代码】
✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1电液耦合转向系统动力学建模与ADRC主动转角控制将EHCPS系统分解为机械、液压和电机三个子系统。机械部分包括转向横拉杆、齿条和轮轴等效为质量-阻尼-弹簧系统液压部分采用四通阀控对称缸模型阀芯位移至油缸压力传递函数由二阶环节近似电机为直流永磁电机电流环采用PI控制。在Amesim中搭建机械-液压联合模型Matlab/Simulink中建立电机模型与ADRC控制器。自抗扰主动转角控制器包括跟踪微分器产生平滑期望转角及其微分、非线性状态误差反馈控制律和扩张状态观测器估计总扰动。控制参数经仿真整定后转角阶跃响应无超调上升时间0.18秒稳态误差0.2度较PID控制器抗负载扰动能力提升约40%。2基于最优控制的铰接列车安全换道轨迹规划将换道轨迹规划建模为最优控制问题状态量为牵引车纵向位移、横向位移、航向角和铰接角控制量为牵引车前轮转角和纵向加速度。代价函数最小化轨迹长度和方向盘转角变化率。约束包括纵向速度约束不超过80km/h、横向加速度约束0.4g、铰接角幅值约束15度以及无碰撞约束。无碰撞约束通过将牵引车和半挂车轮廓分解为三角形利用三角形面积关系实时判断与障碍物是否相交。采用高斯伪谱法离散化后调用IPOPT求解生成5秒换道轨迹。该轨迹经Amesim/Simulink/Simscape联合仿真验证牵引车与半挂车之间最小间隙与障碍物边界的余量为0.35m。3双模糊变权重MPC横向轨迹跟踪与积分滑模速度控制针对铰接列车横向动力学耦合问题设计双模糊变权重模型预测控制器。第一个模糊器根据航向角偏差和铰接角速率动态调整MPC代价函数中航向误差的权重系数第二个模糊器根据车速和路径曲率调整控制增量权重以改善低速大曲率段的转向平顺性。MPC预测时域18步控制时域8步约束车轮转角在±32度。纵向速度跟踪采用积分滑模控制器滑模面包含速度偏差积分和偏差本身趋近律使用指数趋近律。联合仿真结果显示在50km/h换道工况下横向偏差最大值为0.12m铰接角偏差1.8度速度跟踪误差0.7km/h换道安全性满足要求。import numpy as np from casadi import * # ADRC转角控制器核心 class ADRC_SteeringController: def __init__(self, r, h0, b0): self.r r # 快速因子 self.h h0 # 积分步长 self.b0 b0 self.v1 0; self.v2 0; self.z10; self.z20; self.z30 def tracking_differentiator(self, ref): # 最速跟踪微分器 d self.r*self.h; d0 self.h*d y self.v1 - ref self.h*self.v2 a0 np.sqrt(d**2 8*self.r*np.abs(y)) a (self.v2 0.5*(a0-d)*np.sign(y)) if np.abs(y)d0 else self.v2 y/self.h self.v1 self.h*self.v2; self.v2 self.h*(-self.r*np.sign(a)*self.r) return self.v1, self.v2 def eso_update(self, u, y, delta): e self.z1 - y fe np.sign(e)*np.abs(delta)**0.5 # fal函数 self.z1 self.h*(self.z2 - 30*e) self.z2 self.h*(self.z3 - 300*fe self.b0*u) self.z3 self.h*(-500*fe) return self.z1, self.z2, self.z3 def control_law(self, ref): v1, v2 self.tracking_differentiator(ref) e1 v1 - self.z1; e2 v2 - self.z2 u0 20*e1 10*e2 return (u0 - self.z3)/self.b0 # 高斯伪谱法轨迹规划简化 def pseudo_spectral_planning(): opti Opti() N 20; X opti.variable(5, N1); U opti.variable(2, N) # 动力学约束略 opti.minimize(sumsqr(X[0,:]-X[0,-1]) 0.1*sumsqr(U)) opti.subject_to(X[:,0] [0,0,0,0,0]) # 碰撞约束三角形面积法 area (X[1,1]*X[3,0] - X[0,1]*X[2,0]) # 示意 opti.subject_to(area 0.5) opti.solver(ipopt); sol opti.solve() return sol.value(X) # 双模糊变权重MPC简 def dual_fuzzy_mpc_weights(yaw_err, curvature): w1 10 5*np.tanh(np.abs(yaw_err)) w2 30 if abs(curvature)0.1 else 10 return w1, w2如有问题可以直接沟通
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593374.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!