自动驾驶控制-二自由度横摆动力学MPC任意路径跟踪 可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意 要跟踪不同的轨迹同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳 Q矩阵增大可以保证侧向位置跟踪效果变好 R 矩阵增大可以保证前轮转角曲线效果变好。 同时调整输出值边界的约束 carsim 版本 2019.1 模型仿真效果可以b站搜up 阿Xin自动驾驶欢迎关注 单simulink仿真基于车辆二自由度动力学模型的mpc跟踪任意路径动力学模型和mpc算法均使用s函数构建。 蓝色为全局参考路径黄色为预测时域内的参考路径红色为车辆行驶轨迹。 也可以提供纯matlab和simulink联合仿真实现的。直接上干货。二自由度横摆动力学模型是路径跟踪的经典建模方式把车辆简化为质点运动学的同时兼顾了横摆特性。这个模型的魅力在于它用两个微分方程就能描述车辆横向运动的核心逻辑dx/dt v*cos(θβ)dθ/dt (v/l_r)*sin(β)其中βarctan((lr/(lflr))*tan(δf))这组方程构成了MPC控制器设计的基础。咱们在S函数里实现这个模型时重点要处理好前轮转角δ_f的非线性耦合。下面这段状态更新函数是核心function sysmdlDerivatives(t,x,u) delta_f u(1); v u(2); lf 1.2; % 前轴距 lr 1.5; % 后轴距 beta atan((lr/(lflr))*tan(delta_f)); sys(1) v*cos(x(3)beta); % X方向速度 sys(2) v*sin(x(3)beta); % Y方向速度 sys(3) (v/(lr))*sin(beta);% 横摆角速度 end这里有个坑点当车速v趋近于零时横摆角速度计算会出现奇点。实际工程中需要加个速度死区限制比如当v0.1m/s时直接令ω0。自动驾驶控制-二自由度横摆动力学MPC任意路径跟踪 可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意 要跟踪不同的轨迹同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳 Q矩阵增大可以保证侧向位置跟踪效果变好 R 矩阵增大可以保证前轮转角曲线效果变好。 同时调整输出值边界的约束 carsim 版本 2019.1 模型仿真效果可以b站搜up 阿Xin自动驾驶欢迎关注 单simulink仿真基于车辆二自由度动力学模型的mpc跟踪任意路径动力学模型和mpc算法均使用s函数构建。 蓝色为全局参考路径黄色为预测时域内的参考路径红色为车辆行驶轨迹。 也可以提供纯matlab和simulink联合仿真实现的。MPC控制器的设计重点在约束处理。咱们在构建优化问题时要把前轮转角变化率Δδ作为优化变量这样能直接约束方向盘的抖动幅度。目标函数长这样J Σ( Qe_y² RΔδ² )调参就像调音响得自己找感觉。上周做麋鹿测试时就发现当Q矩阵从diag([1,0.1])调到diag([5,0.1])后车辆在变道时的横向误差从15cm降到了8cm但方向盘开始出现轻微抖动。这时候把R从0.01调到0.05立马让转向动作顺滑了。路径预处理模块容易被忽视。对于任意外部导入的轨迹必须做等距采样处理。我们开发了个轨迹压缩算法用三次样条插值确保相邻路径点间距恒定function ref resample_ref(original_ref, ds) cum_dist [0; cumsum(sqrt(diff(original_ref(:,1)).^2 diff(original_ref(:,2)).^2))]; new_s 0:ds:cum_dist(end); ref(:,1) spline(cum_dist, original_ref(:,1), new_s); ref(:,2) spline(cum_dist, original_ref(:,2), new_s); end这个函数把原始路径按弧长ds重新采样避免了预测时域内参考点分布不均的问题。实测中发现当ds大于0.3m时MPC在弯道会出现明显的阶跃跟踪现象。仿真时还有个神坑Carsim的坐标系和Simulink默认的坐标系Y轴方向相反。有次调试时车辆轨迹总是镜像反转最后发现是没做坐标转换。解决方案是在接口模块插入carsim_y -simulink_y;现在的系统能在双移线工况下实现0.3m以内的跟踪精度不过遇到直角弯时还是得把前轮转角约束从±30度放宽到±35度。这活就像走钢丝要在控制性能和机械极限之间找平衡。完整工程文件已上传GitHub包含联合仿真配置说明需要的小伙伴可以私信获取。
自适应参数调节的自动驾驶控制系统——基于二自由度横摆动力学的MPC任意路径跟踪研究
发布时间:2026/5/25 0:38:18
自动驾驶控制-二自由度横摆动力学MPC任意路径跟踪 可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意 要跟踪不同的轨迹同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳 Q矩阵增大可以保证侧向位置跟踪效果变好 R 矩阵增大可以保证前轮转角曲线效果变好。 同时调整输出值边界的约束 carsim 版本 2019.1 模型仿真效果可以b站搜up 阿Xin自动驾驶欢迎关注 单simulink仿真基于车辆二自由度动力学模型的mpc跟踪任意路径动力学模型和mpc算法均使用s函数构建。 蓝色为全局参考路径黄色为预测时域内的参考路径红色为车辆行驶轨迹。 也可以提供纯matlab和simulink联合仿真实现的。直接上干货。二自由度横摆动力学模型是路径跟踪的经典建模方式把车辆简化为质点运动学的同时兼顾了横摆特性。这个模型的魅力在于它用两个微分方程就能描述车辆横向运动的核心逻辑dx/dt v*cos(θβ)dθ/dt (v/l_r)*sin(β)其中βarctan((lr/(lflr))*tan(δf))这组方程构成了MPC控制器设计的基础。咱们在S函数里实现这个模型时重点要处理好前轮转角δ_f的非线性耦合。下面这段状态更新函数是核心function sysmdlDerivatives(t,x,u) delta_f u(1); v u(2); lf 1.2; % 前轴距 lr 1.5; % 后轴距 beta atan((lr/(lflr))*tan(delta_f)); sys(1) v*cos(x(3)beta); % X方向速度 sys(2) v*sin(x(3)beta); % Y方向速度 sys(3) (v/(lr))*sin(beta);% 横摆角速度 end这里有个坑点当车速v趋近于零时横摆角速度计算会出现奇点。实际工程中需要加个速度死区限制比如当v0.1m/s时直接令ω0。自动驾驶控制-二自由度横摆动力学MPC任意路径跟踪 可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意 要跟踪不同的轨迹同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳 Q矩阵增大可以保证侧向位置跟踪效果变好 R 矩阵增大可以保证前轮转角曲线效果变好。 同时调整输出值边界的约束 carsim 版本 2019.1 模型仿真效果可以b站搜up 阿Xin自动驾驶欢迎关注 单simulink仿真基于车辆二自由度动力学模型的mpc跟踪任意路径动力学模型和mpc算法均使用s函数构建。 蓝色为全局参考路径黄色为预测时域内的参考路径红色为车辆行驶轨迹。 也可以提供纯matlab和simulink联合仿真实现的。MPC控制器的设计重点在约束处理。咱们在构建优化问题时要把前轮转角变化率Δδ作为优化变量这样能直接约束方向盘的抖动幅度。目标函数长这样J Σ( Qe_y² RΔδ² )调参就像调音响得自己找感觉。上周做麋鹿测试时就发现当Q矩阵从diag([1,0.1])调到diag([5,0.1])后车辆在变道时的横向误差从15cm降到了8cm但方向盘开始出现轻微抖动。这时候把R从0.01调到0.05立马让转向动作顺滑了。路径预处理模块容易被忽视。对于任意外部导入的轨迹必须做等距采样处理。我们开发了个轨迹压缩算法用三次样条插值确保相邻路径点间距恒定function ref resample_ref(original_ref, ds) cum_dist [0; cumsum(sqrt(diff(original_ref(:,1)).^2 diff(original_ref(:,2)).^2))]; new_s 0:ds:cum_dist(end); ref(:,1) spline(cum_dist, original_ref(:,1), new_s); ref(:,2) spline(cum_dist, original_ref(:,2), new_s); end这个函数把原始路径按弧长ds重新采样避免了预测时域内参考点分布不均的问题。实测中发现当ds大于0.3m时MPC在弯道会出现明显的阶跃跟踪现象。仿真时还有个神坑Carsim的坐标系和Simulink默认的坐标系Y轴方向相反。有次调试时车辆轨迹总是镜像反转最后发现是没做坐标转换。解决方案是在接口模块插入carsim_y -simulink_y;现在的系统能在双移线工况下实现0.3m以内的跟踪精度不过遇到直角弯时还是得把前轮转角约束从±30度放宽到±35度。这活就像走钢丝要在控制性能和机械极限之间找平衡。完整工程文件已上传GitHub包含联合仿真配置说明需要的小伙伴可以私信获取。