Apollo星火计划学习笔记|控制模块

系列文章目录

L1 Apollo平台安装
L2 CyberRT学习
L5 Routing简介
L7 控制模块
L8 预测模块


目录

  • 系列文章目录
  • 简介
  • 控制算法
    • PID算法
    • LQR(MPC)
  • Apollo控制模块
    • Apollo纵向控制
  • 作业

简介

控制模块的作用是根据规划(planning模块)生成的轨迹,计算出汽车的油门,刹车和方向盘信号,控制汽车按照规定的轨迹行驶。
控制输入: Chassis(车辆状态信息), LocalizationEstimate(位置信息), ADCTrajectory(planning模块规划的轨迹)
控制输出:纵向控制(油门,刹车,档位) 横向控制(方向盘)

控制基于模型,可将车辆分为运动学建模和动力学建模。运动学模型相对简单,将汽车看为刚体,动力学模型相对复杂,基于车体受力状态来推导运动方程。动力学模型也可进一步分解为纵向动力学模型和横向动力学模型。具体可参考下面这个链接:车辆建模

控制算法

PID算法

经典控制算法,一般用于纵向控制。由比例§,积分(I),微分(D)单元组成。
Apollo星火计划学习笔记|控制模块_第1张图片 u ( t ) = K p e ( t ) + K i ∫ 0 t e ( τ ) d τ + K d d e ( t ) d t u(t)=K_{p} e(t)+K_{i} \int_{0}^{t} e(\tau) d \tau+K_{d} \frac{d e(t)}{d t} u(t)=Kpe(t)+Ki0te(τ)dτ+Kddtde(t)

LQR(MPC)

最优控制经典算法,基于车辆横向动力学算法,用于横向控制。

Apollo控制模块

Apollo纵向控制

Apollo星火计划学习笔记|控制模块_第2张图片坡度补偿:在有坡度时对刹车和油门进行补充。
标定工具:modules/tools/vehicles_calibration
Control模块的目录结构如下:

├── BUILD // bazel编译文件
├── common // PID和控制器的具体实现 — 算法具体实现
├── conf // 配置文件 — 配置文件
├── control_component.cc // 模块入口
├── control_component.h
├── control_component_test.cc
├── controller // 控制器 — 具体的控制器实现
├── dag // dag依赖
├── integration_tests // 测试
├── launch // launch加载
├── proto // protobuf文件,主要是各个控制器的配置数据结构
├── testdata // 测试数据
└── tools // 工具类

作业

1 遇到长下坡,PID调节是否会和人一样“不能长时间踩踏板”?
答:会,因为PID时基于误差进行调节,若想解决该问题,可以把误差阈值调高,同时取消PID的积分环节,这样就可以防止PID一直给出刹车指令。
2 高速和低速的PID是否应该一致?为什么?
答:不应该一致,因为高速情况下车辆的动力学特性会发生改变,相当于被控对象发生了变化,所以也应该调整相应的参数。

你可能感兴趣的:(apollo,自动驾驶,自动驾驶)