news 2026/3/29 21:26:53

直接给各位上点轨迹跟踪的干货。这次咱们玩个能自定义参考轨迹的二自由度MPC控制器,重点说说怎么让这铁疙瘩在不同路况下都跟得稳当。先整杯咖啡,咱们边调参边唠

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直接给各位上点轨迹跟踪的干货。这次咱们玩个能自定义参考轨迹的二自由度MPC控制器,重点说说怎么让这铁疙瘩在不同路况下都跟得稳当。先整杯咖啡,咱们边调参边唠

可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意= 要跟踪不同的轨迹,同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳: Q矩阵增大可以保证侧向位置跟踪效果变好, R 矩阵增大可以保证前轮转角曲线效果变好。 同时调整输出值边界的约束 carsim 版本 2019.0

二自由度模型这玩意儿大家都熟吧?横向运动方程写成离散状态空间就是:

% 模型参数 m = 1573; % 质量 Iz = 2873; % 转动惯量 lf = 1.34; % 前轴距 lr = 1.43; % 轮胎侧偏刚度 Ts = 0.1; % 控制周期 A = [1, Ts; -2*(Caf+Car)/(m*vx)*Ts, 1-2*(lf*Caf-lr*Car)/(Iz*vx)*Ts]; B = [0; 2*Caf/(m*vx)*Ts];

重点在状态矩阵里的速度项vx——这货要是没处理好,换条轨迹准翻车。实测发现参考轨迹曲率越大,预测时域得适当缩短,不然求解器直接给你摆烂。

调参这事真得看手感,上周在秋名山实测时发现个邪乎现象:同一组Q、R参数在直道表现完美,到了发夹弯直接推头。后来悟了——Q矩阵里给横向误差的权重得跟着曲率动态变化。举个栗子:

# 动态权重调整示例 curvature = abs(ref_traj['kappa'][current_index]) Q_scale = 1 + 10 * curvature # 曲率越大,横向误差权重越高 Q = np.diag([Q_scale, 0.1]) # 状态权重矩阵 R = np.array([[0.01]]) # 控制量权重

这么整之后,方向盘的修正动作明显更跟脚。不过要注意R矩阵别调太小,上次手贱设成0.001,结果前轮摆角曲线抖得跟帕金森似的。

约束边界这事容易被新手忽略。实测发现输出约束不能只设固定值:

// 根据车速调整前轮转角约束 double delta_max = 0.6 - 0.15 * fabs(current_speed/40); if(delta_max < 0.3) delta_max = 0.3; // 设置MPC约束 mpc.setConstraint(-delta_max, delta_max);

速度越快,允许的最大转角越小,这招对防止高速甩尾贼管用。不过要注意别矫枉过正,有次把delta_max压到0.2,结果在U型弯直接冲出赛道。

最后给个CarSim联调的小技巧:把预测时域内的参考轨迹可视化到CarSim Scene中,效果拔群!具体操作是在Simulink里加个UDP发送模块,把预测轨迹打包发到CarSim的3D显示模块。调试时看着预测轨迹和实际轨迹慢慢重合,那成就感比通关老头环还带劲。

调完参记得做暴力测试——拿正弦波轨迹、阶跃轨迹、蛇形轨迹各跑一遍。别信仿真数据,真车测试时地面附着系数变化能让你参数当场破功。最近发现个玄学规律:Q矩阵权重开三次方后再用,鲁棒性莫名变好,原理还没搞懂,但真的好使。

好了,代码扔Github了,自己去扒拉。记住参数没有银弹,多调多翻车才是正道。下次聊聊怎么把MPC预测域玩出花,保准让你们方向盘的响应比女朋友还贴心(如果有的话)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 6:07:10

25、Linux 下卡拉 OK 系统搭建与文件处理全解析

Linux 下卡拉 OK 系统搭建与文件处理全解析 1. TiMidity 运行与配置 在尝试使用标准包 TiMidity v2.13.2 - 40.1 运行接口时,程序在内存释放调用中崩溃。由于代码经过剥离,很难追踪崩溃原因,而且也不确定该包编译时所依赖的库和代码版本。 为了解决这个问题,可以从源代码…

作者头像 李华
网站建设 2026/3/28 19:13:48

非结构化数据的隐私性较低吗?

从听过任何关于人工智能讨论的调查来看&#xff0c;我们都知道隐私很重要。我们一次又一次地听到人们谈论如何实现某种类型的人工智能系统&#xff0c;但他们担心涉及的隐私问题。有时候&#xff0c;从整体格局的细致角度来看&#xff0c;能让我们看到如何做得更好。例如&#…

作者头像 李华
网站建设 2026/3/27 3:44:59

29、基于 Java Sound 的卡拉 OK 应用与字幕处理

基于 Java Sound 的卡拉 OK 应用与字幕处理 1. SequenceInformation 类 SequenceInformation 类是一个便利类,被多个其他类使用。它存储了序列、歌词行和旋律音符的副本,用于通过用户界面展示歌词和旋律,还存储了歌曲标题、设置音符显示范围的最大和最小音符,以及旋律所…

作者头像 李华
网站建设 2026/3/13 11:31:53

QMCDecode音频格式转换终极指南:Mac音乐解密完整教程

QMCDecode音频格式转换终极指南&#xff1a;Mac音乐解密完整教程 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转…

作者头像 李华
网站建设 2026/3/25 19:24:47

基于Python+Vue开发的家具商城管理系统源码+运行步骤+计算机专业

项目简介 该项目是基于PythonVue开发的家具商城管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的家具商…

作者头像 李华
网站建设 2026/3/27 2:00:39

从零玩转RT-Thread(23):你必须知道的坑——定时器使用注意事项

本小节介绍定时器使用时的常见注意事项&#xff0c;从而避免常见错误和不当用法&#xff0c;实现学会在实际项目中更稳定、安全地使用定时器回调函数运行在中断/任务上下文对于HARD_TIMER模式的定时器&#xff0c;由系统时钟节拍中断处理程序扫描定时器列表并执行回调函数&…

作者头像 李华