Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践2
文章目录
- 前言
- 1. Apollo控制框架介绍
- 1.1 控制模块的功能和性能要求
- 1.2 控制模块的总体框架
- 1.3 控制模块的代码结构
- 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 提供的控制器
- 2.2 纵向 PID 控制器简介
- 2.3 横向 LQR 控制器简介
- 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 的控制模块仿真
- 4.2 云平台实验
前言
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模块)生成的轨迹、车辆当前的位置和状态,计算出汽车的油门、刹车和方向盘信号,控制汽车按照规划的轨迹行驶。
绿色的曲线是规划出来的轨迹。轨迹有两层概念:位置的概念,包括经纬度、坐标,路径规划;速度的概念,在相应的时间到达相应的位置,速度规划;黄色的曲线为实际的运动轨迹。
首先,输入参考轨迹、车辆当前位置以及车辆当前的状态,通过方向盘的转角、油门以及刹车的控制,以达到车辆实际的行驶轨迹。
控制系统的性能要求: 快速、精确、稳定地输出控制指令,控制车辆 安全、 舒适地跟踪参考轨迹。
1.2 控制模块的总体框架
控制器接收来自定位、轨迹以及底盘状态的输入,然后利用这些输入结合一些控制算法去分别控制车辆的横向运动和纵向运动。
纵向运动控制:控制车辆的油门和刹车,确保车辆安全、舒适地加速和减速运动;
横向运动控制:控制车辆的方向盘转角和转速,确保车辆安全、舒适地转向运动。
动力学标定表:车辆云标定是通过采集车辆底盘油门踏板量、刹车踏板量、车辆速度、加速度作为车辆纵向动力模型的输入,通过机器学习的方式,生成相应车辆的踏板标定表。
生成的标定表数据量大,精度高,能提高车辆的控制精度。
Throttle_cmdorBrake_cmd=f(vx,ax)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总线协议
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 控制器简介
横摆角不一定等于航向角,横摆角速度 = 航向角速度
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.
Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践2相关推荐
- Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践1
文章目录 1. 控制理论简介 1.1 控制的作用 1.2 自动驾驶控制的目标 1.3自动驾驶控制器的设计 2. 汽车运动学与动力学 2.1 常用的自动驾驶控制算法 2.2 车辆运动学模型 Kinema ...
- Apollo星火计划学习笔记第六讲——Apollo感知模块详解实践2感知基础
Apollo学习笔记 零.目录 一.Apollo感知框架介绍 1.1 检测和分类 1.2 跟踪 1.3 感知模块代码结构 1.3.1 感知模块入口 二.Lidar障碍物检测.红绿灯识别 2.1 Lid ...
- Apollo星火计划学习笔记第四讲2——高精地图定位模块
Apollo学习笔记 零.目录 一.定位的作用 二.定位用到的算法 2.1 GPS 2.2 IMU 2.3 GNSS(GPS+IMU) 2.4 先验地图定位 2.5 实时定位和建图 2.6 小结 三. ...
- Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理1
文章目录 前言 1. 规划技术功能概述 1.1 自动驾驶系统 1.2 规划的作用 1.3 规划主要功能 1.3.1 路由寻径(Routing) 1.3.2 行为决策 1.3.3 轨迹规划 2. Apo ...
- Apollo星火计划学习笔记第四讲1——Apollo高精地图模块
Apollo学习笔记 零.目录 一.高精地图的作用 1.1 相对于传统地图 二.高精地图介绍 2.1 高精地图构成 2.2 高精地图制作 2.2.1 地图采集 2.2.2 地图制作 2.2.3 地图标 ...
- Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理2
文章目录 前言 1. 泊车系统介绍 1.1 泊车任务 1.2 关键 Use Cas--车位类型 1.3 关键 Use Cas--环境条件 1.4 泊车过程描述 1.5 泊车状态操作和用户接口定义 1. ...
- Apollo星火计划学习笔记——第六讲上自动驾驶感知基础(I)
文章目录 1. 感知的作用 2. 常见传感器 2.1 相机 2.1.1 相机的种类 2.1.2 相机的特点 2.2 激光雷达 2.2.1 激光雷达系统构成与方案 2.2.2 激光雷达光源 2.2.3 ...
- Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)
文章目录 前言 1. Apollo感知框架介绍 1.1 Apollo感知模块概述 1.2 飞桨PaddlePaddle 1.3 跟踪 1.4 Apollo感知框架 2. Lidar障碍物检测 2.1 ...
- Apollo星火计划学习笔记——第四讲(Apollo自动驾驶高精地图)
文章目录 前言 1. 高精度地图的作用 1.1 高精度地图与传统地图的区别 1.2 为什么要使用高精度地图? 1.3 高精度地图面临的挑战和问题 2. 高精度地图的介绍 2.1 如何制作高精度地图 2 ...
最新文章
- plotly基于dataframe数据绘制股票K线图并过滤非交易时间
- 从《王者荣耀》谈游戏的帧同步
- 贪心算法--加油站问题
- Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
- 元胞自动机与相关理论和方法
- oracle修改表字段
- nodejs源码_nodejs之setTimeout源码解析
- 中国的房产市场和房产取向
- Android Multimedia框架总结(二十八)NuPlayer到OMX过程
- matlab如何动态输出很长的图片,Qt实现长图片的放大缩小以及动态显示
- sql语句日期格式转换
- vivado添加设计源文件
- python爬取上市公司年报信息_python3爬取巨潮资讯网的年报数据
- 【起航计划ObjC 002】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用MAC虚拟机
- SHIO世硕科技马新云携全体员工:2021,在此感谢所有的一切!
- 马云不再是蚂蚁集团实控人
- 生活心语--幸福在哪里
- 巧用计算机课件,如何用电脑录制ppt讲解视频?
- CGdiObject::DeleteObject的说法
- basler相机参数简要中文说明_basler设置相机参数
热门文章
- 用Java实现Google的“您是不是要找”功能
- 音乐制作软件中文版含乐器包-Avid Pro Tools 10.3.9 WiN
- RT1052 LPSPI1 dma传输和UART2 DMA传输实现不定长数据接收
- CERO用来分析曲柄连杆机构
- 华硕K40in成功安装Mountain Lion 10.8.2(12C54)
- 将立创商城上的原理图封装、2D、3D封装导入AD中
- Mifare 卡非接数据通信流程
- 什么是铁路信号安全计算机平台,铁路信号系统安全计算机平台配置工具软件设计.pdf...
- Cannot find module ‘***‘ ... Vetur(2307)
- bash单词合并_如何在Bash命令中快速更改第一个单词?