news 2026/6/4 18:07:12

自动驾驶纵向控制-复现Apollo双pid纵向位置跟踪 复现百度apollo纵向控制 纵向控制...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶纵向控制-复现Apollo双pid纵向位置跟踪 复现百度apollo纵向控制 纵向控制...

自动驾驶纵向控制-复现Apollo双pid纵向位置跟踪 复现百度apollo纵向控制 纵向控制已经制作好油门刹车标定表,无需自己做标定。

凌晨三点半的显示器蓝光打在脸上,手指机械地敲着键盘。当我第N次看着测试车在Simulink里画出心电图般的速度曲线时,终于决定扒开Apollo的纵向控制黑盒子——不就是双PID吗?今天咱们就手撕这套经典结构。

先看整体架构,Apollo把纵向控制拆成位置和速度两个闭环。就像驾校教练同时管着方向盘和油门,位置PID负责告诉车该跑多快,速度PID实际踩油门刹车。这个结构妙在能处理不同控制模式的无缝切换,后面细说。

位置PID:导航小姐姐的唠叨

class PositionPID: def __init__(self, kp, ki, kd, max_integral): self.kp = kp # 0.3效果拔群 self.ki = ki # 0.01防止积分暴走 self.error_sum = 0.0 self.last_error = 0.0 def calculate(self, target_pos, current_pos, dt): error = target_pos - current_pos self.error_sum += error * dt self.error_sum = np.clip(self.error_sum, -max_integral, max_integral) d_error = (error - self.last_error) / dt output = self.kp*error + self.ki*self.error_sum + self.kd*d_error self.last_error = error return output

这个PID输出的其实是期望速度。注意max_integral这个参数,实测不加的话在长距离误差时会出现"油门踩穿底盘"的灵异现象。建议取期望最大速度的2倍左右。

自动驾驶纵向控制-复现Apollo双pid纵向位置跟踪 复现百度apollo纵向控制 纵向控制已经制作好油门刹车标定表,无需自己做标定。

速度PID:灵魂脚法控制器

当位置PID给出目标速度后,真正的重头戏来了:

double SpeedController::Update(double target_speed, double current_speed) { double error = target_speed - current_speed; // 动态调整积分系数,低速时加强控制 double adaptive_ki = ki * (1 + 2/(current_speed + 0.1)); // 带滤波的微分项 double d_error = LowPassFilter(error - last_error_, 0.2); double accel_cmd = kp_*error + adaptive_ki*integral_ + kd_*d_error; // 刹车油门模式切换 if (accel_cmd > 0) { return CalculateThrottle(accel_cmd); } else { return CalculateBrake(-accel_cmd); } }

这里有几个精妙设计:

  1. 低速时积分增强,解决蠕动工况的稳态误差
  2. 微分项经过低通滤波,避免速度传感器噪声被放大
  3. 根据加速度指令正负自动切换油门刹车,比单独控制更顺滑

模式切换的舞蹈

最让我头秃的是巡航模式与停车模式的切换逻辑。Apollo用状态机管理,这里简化版:

if target_speed < 0.3: # 进入停车模式 if abs(position_error) < 0.05: execute_full_stop() else: use_position_pid_only() elif current_speed < target_speed * 0.8: # 急加速模式 override_pid_with_wot() # 地板油策略 else: # 正常巡航 enable_speed_feedforward() # 预瞄补偿

注意从停车模式切回时要做积分重置,否则残留的积分项会让车像突然被踹一脚。实测加上reset_integral()后,起步顿挫减少了70%。

当我把这些模块拼装完成,看着测试车在弯道前自动降速入弯,出弯时平稳加速,终于理解了Apollo工程师的良苦用心——好的控制就像呼吸,你感觉不到它的存在,但一旦失调就会窒息。下次试试加入坡度补偿,应该能让长上坡路段不再喘得像老拖拉机...(查看GitHub仓库的兄弟们,记得把标定表路径改对,血的教训!)

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

MATLAB鸟鸣识别系统截图](https://example.com/gui_screenshot.png

基于MATLAB的鸟鸣识别系统gui 传统声音特征&#xff0c;如MFCC机器学习分类器 分类器有支持向量积svm&#xff0c;邻近knn&#xff0c;分类树tree等 深度学习方法主要是先提取语谱图&#xff0c;有短时傅立叶时频图&#xff0c;和梅尔时频图 然后用googlenet进行深度学习训练 结…

作者头像 李华
网站建设 2026/6/1 19:03:52

数据立方体技术演进:从传统BI到大数据分析的跨越

数据立方体技术演进&#xff1a;从传统BI到大数据分析的跨越 关键词&#xff1a;数据立方体、OLAP、大数据分析、维度建模、实时计算 摘要&#xff1a;数据立方体是数据分析领域的"瑞士军刀"&#xff0c;它用"多维切片"的魔法让复杂数据变得可感知、可操作…

作者头像 李华
网站建设 2026/5/26 22:02:36

multi function vehicle inverter

multi function vehicle inverter 车载多功能逆变器然后就有三角插了&#xff0c;可以插笔记本电脑&#xff0c;或者其他&#xff0c;但是不知道对车的电池损害大不大&#xff0c;比较接出来变成高电压了。

作者头像 李华
网站建设 2026/5/20 13:01:41

Claude Opus 4.6接入VSCode完全指南:从零到精通!

Claude Opus 4.6接入VSCode完全指南&#xff1a;从零到精通&#xff01;Claude Opus 4.6接入VSCode&#xff0c;是目前最强的AI编程组合。 但很多人不知道怎么配置。 今天写一篇完全指南&#xff0c;从零开始&#xff0c;手把手教你。为什么要接入VSCode&#xff1f; 优势1&…

作者头像 李华
网站建设 2026/5/27 22:18:42

GitHub Pages 技术文档站点搭建实践指南

GitHub Pages 技术文档站点搭建实践指南 1. 开发者的实际需求 作为开发者&#xff0c;我们经常需要将技术笔记、项目文档或学习成果以网站形式对外展示。这种展示方式相比简单的代码仓库浏览具有明显优势&#xff0c;包括统一的导航结构、专业的视觉呈现、便捷的搜索功能以及…

作者头像 李华
网站建设 2026/5/19 18:42:54

6343456345

464564564

作者头像 李华