前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12
1. Apollo控制框架介绍
1.1 控制模块的功能和性能要求
控制模块的功能是根据规划(planning模块)生成的轨迹、车辆当前的位置和状态,计算出汽车的油门、刹车和方向盘信号,控制汽车按照规划的轨迹行驶。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/606b0702ff96239609384f5785e9c5da.png#pic_center)
控制系统的性能要求: 快速、精确、稳定地输出控制指令,控制车辆 安全、 舒适地跟踪参考轨迹。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f4c03d14e402f2be91e2467d6e6f6f5f.png)
1.2 控制模块的总体框架
控制器接收来自定位、轨迹以及底盘状态的输入,然后利用这些输入结合一些控制算法去分别控制车辆的横向运动和纵向运动。
纵向运动控制:控制车辆的油门和刹车,确保车辆安全、舒适地加速和减速运动;
横向运动控制:控制车辆的方向盘转角和转速,确保车辆安全、舒适地转向运动。
动力学标定表:车辆云标定是通过采集车辆底盘油门踏板量、刹车踏板量、车辆速度、加速度作为车辆纵向动力模型的输入,通过机器学习的方式,生成相应车辆的踏板标定表。
生成的标定表数据量大,精度高,能提高车辆的控制精度。
T
h
r
o
t
t
l
e
_
c
m
d
o
r
B
r
a
k
e
_
c
m
d
=
f
(
v
x
,
a
x
)
Throttle\_cmd{\rm{ }}or{\rm{ }}Brake\_cmd{\rm{ }} = {\rm{ }}f{\rm{ }}(vx{\rm{ }},{\rm{ }}ax)
Throttle_cmdorBrake_cmd=f(vx,ax)
CANBUS: Canbus是车和自动驾驶软件之间的桥梁,主要作用是反馈车当前的状态(航向,角度,速度等信息)至Apollo的上层软件模块,并且发送控制命令到车线控底盘。
modules -> canbus -> vehicle 提供了多款车型的CAN总线协议
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4092727350c237890b2abe0b09edd70c.png#pic_center)
1.3 控制模块的代码结构
控制模块位置:Apollo -> modules -> control
- common // 提供了包括PID在内的多种算法程序
- conf // 控制模块的配置文件,用于控制参数的配置
- controller // 提供了横纵向运动控制器的实现程序
- dag // 定义实现控制器的依赖文件和路径
- launch // 用于加载控制器的dag文件
- proto // 定义各种控制器的信号列表和数据结构
- control_component.cc // 控制模块的入口程序
- README.md // 控制模块的说明文档
1.3.1 control -> common 中的主要程序
1.3.2 control -> conf 中的主要程序
1.3.3 control -> controller 中的主要程序
1.3.4 control -> proto 中的主要程序
2. Apollo提供的控制器
2.1 Apollo 提供的控制器
- 横向控制器 LAT_CONTROLLER
- 纵向控制器 LON_CONTROLLER
- 横纵向综合控制器 MPC_CONTROLLER
Apollo中对于上述三种控制器,需要选择横向控制器+纵向控制器或单独MPC。
Apollo 默认激活的控制器
- active_controllers: LAT_CONTROLLER
- active_controllers: LON_CONTROLLER
2.2 纵向 PID 控制器简介
- Kp——调整系统对目标的响应速度,但过大的Kp可能会导致明显的超调和振荡,降低系统的动态性能。
- Ki——有利于减小响应的超调量,减小系统的稳态误差,提高控制精度。
- Kd——有利于减小系统超调量,提高系统稳定性。
PID参数的调试是一个综合的、各参数互相影响的过程,实际调试过程中需要反复调试。大致先调Kp,后调Ki,先速度闭环,再位置闭环。
2.3 横向 LQR 控制器简介
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a35bd611d342e68ba543b1836c803bff.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fd0301c6ba1ed067cf38e50a645906ff.png)
3. 控制模块的执行流程
3.1 控制模块的总体执行流程
3.2 控制模块的入口程序 control_component.cc 及主要函数
3.3 控制器注册程序 controller_agent.cc 及主要函数
3.4 纵向控制器程序 lon_controller.cc 及主要函数
3.5 横向控制器程序 lat_controller.cc 及主要函数
3.6 纵横向控制的总体流程
4. 控制模块调试和数据分析
4.1 基于 Apollo Studio 的控制模块仿真
https://developer.apollo.auto/document_cn.html?target=/Apollo-Homepage-Document/Apollo_Doc_CN_6_0/
4.2 云平台实验
Apollo控制之控制结果分析
主要用到两个包:bag1.bag(效果好) 和 bag2.bag(效果不好)
打开DreamView
./scripts/bootstrap_neo.sh
先播放第一个数据包
cyber_recorder play -f bag1.bag -l
另开终端,用cyber_monitor 查看数据,重点看control
数据信号流
ctrl + d 看下一页的数据
通过误差来观察其控制效果
参考文献
- 《车辆动力学及控制》
- Wang, Y., Jiang, S., Lin, W., Cao,Y., Lin, L., Hu, J., Miao, J. and
Luo, Q., 2020, November. A Learning-Based Tune-Free Control Framework for Large Scale Autonomous Driving System Deployment, arXiv preprint arXiv:2011.04250.