news 2026/10/1 3:43:25

自动驾驶纵向控制-复现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/9/30 10:27:26

93基于三菱PLC和组态王的兰花灌溉控制系统的农业农田应用

93基于三菱PLC和组态王的兰花灌溉控制系统的农业农田 兰花这种傲娇的植物&#xff0c;浇多了烂根&#xff0c;浇少了干枯&#xff0c;传统人工浇水能把种植户逼疯。去年在云南花卉基地看到师傅们凌晨三点打着手电筒浇水&#xff0c;我就琢磨着用三菱FX3U PLC搭个自动灌溉系统&…

作者头像 李华
网站建设 2026/9/27 18:40:39

专升本高数资源合集

2022专升本数学全程班&#xff08;完结&#xff09; 文件大小: 45.4GB内容特色: 2022专升本数学全程录播&#xff0c;45GB高清适用人群: 专科升本人群、数学基础薄弱需系统复习者核心价值: 考点全覆盖真题精讲&#xff0c;一站式冲刺高分下载链接: https://pan.quark.cn/s/05f…

作者头像 李华
网站建设 2026/9/27 20:41:08

动力学方程

考虑扰动的欠驱动船舶轨迹跟踪自适应滑模控制水面上的铁疙瘩要听话可不容易。三万吨的货轮在风浪里扭秧歌&#xff0c;舵机转得冒火星子还追不上预定航线&#xff0c;这场景让多少控制工程师头秃。传统PID那套在平静水域还行&#xff0c;遇上横风横流立马歇菜——这时候就得掏出…

作者头像 李华
网站建设 2026/9/30 13:16:29

基于博途1200 plc的V15软件邮件分拣控制系统

基于博途1200 plc的邮件分拣控制系统 软件版本:V15 凌晨三点的物流中心&#xff0c;传送带嗡嗡作响。三台S7-1200 PLC组成的控制系统正指挥着机械臂像老练的邮差&#xff0c;把不同地区的包裹准确投入对应格口。这套系统最有趣的地方在于——它把传统继电控制逻辑玩出了新花样…

作者头像 李华