news 2026/4/18 0:25:18

自动驾驶纵向控制-复现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/4/16 18:00:46

企业HR招聘时如何看待CAIE认证,其企业认可度具体如何评估?

CAIE注册人工智能工程师认证&#xff08;全称Certificated Artificial Intelligence Engineer&#xff0c;中文简称“赛一”&#xff09;&#xff0c;是聚焦人工智能领域的技能等级认证&#xff0c;由CAIE人工智能研究院颁发&#xff0c;旨在培养和评估具备理论基础实战能力的复…

作者头像 李华
网站建设 2026/4/18 0:20:48

提示工程架构师如何用Agentic AI实现健康管理预测分析?

提示工程架构师如何用Agentic AI实现健康管理预测分析&#xff1f; 一、引言&#xff1a;健康管理的痛点与Agentic AI的破局之道 1.1 传统健康管理的三大“卡脖子”问题 作为一名长期关注医疗AI的技术博主&#xff0c;我经常听到医生、患者和健康管理师的抱怨&#xff1a; …

作者头像 李华
网站建设 2026/4/18 0:24:28

【YOLOv11多模态创新改进】联合Mamba创新首发| SCI 一 2025| 引入CMFM 跨模态特征融合Mamba模块,实现 RGB与红外等多模态特征的高效融合,含多种创新改进,顶会顶刊发文热点

一、本文介绍 🔥本文给大家介绍使用 CMFM 跨模态特征融合Mamba模块改进 YOLOv11 多模态融合目标检测框架,可在保持实时性的前提下实现高效稳定的跨模态特征融合,充分利用可见光与红外信息的互补优势,显著提升复杂环境下的检测鲁棒性。该模块基于 Mamba 状态空间模型进行…

作者头像 李华
网站建设 2026/4/17 17:16:34

3.3 可用性测试竟然还能这样玩?

3.3 重大发现!可用性测试竟然还能这样玩? 在构建高可用系统时,仅仅设计出高可用架构是不够的,还需要通过系统的测试和演练来验证架构的有效性。可用性测试和容灾演练是确保系统在真实故障场景下依然能够稳定运行的关键手段。本节将深入探讨如何设计和实施有效的可用性测试…

作者头像 李华
网站建设 2026/4/12 8:21:06

用 CANN ops-nn 提升 AI 性能:实操技巧与核心逻辑拆解

在昇腾 AI 生态中&#xff0c;CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是核心的异构计算架构&#xff0c;而 ops-nn 作为 CANN 针对神经网络算子的核心组件&#xff0c;直接决定了 AI 模型在昇腾硬件上的运行效率。本文将从核心逻辑、实操技巧、…

作者头像 李华