星火计划学习笔记——第八讲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 云平台实验

1. Apollo控制框架介绍

1.1 控制模块的功能和性能要求

    控制模块的功能是根据规划(planning模块)生成的轨迹、车辆当前的位置和状态,计算出汽车的油门、刹车和方向盘信号,控制汽车按照规划的轨迹行驶。星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第1张图片

绿色的曲线是规划出来的轨迹。轨迹有两层概念:位置的概念,包括经纬度、坐标,路径规划;速度的概念,在相应的时间到达相应的位置,速度规划;黄色的曲线为实际的运动轨迹。
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第2张图片    首先,输入参考轨迹、车辆当前位置以及车辆当前的状态,通过方向盘的转角、油门以及刹车的控制,以达到车辆实际的行驶轨迹。
    控制系统的性能要求: 快速、精确、稳定地输出控制指令,控制车辆 安全舒适地跟踪参考轨迹。 星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第3张图片

1.2 控制模块的总体框架

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第4张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第5张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第6张图片    控制器接收来自定位轨迹以及底盘状态的输入,然后利用这些输入结合一些控制算法去分别控制车辆的横向运动和纵向运动。
    纵向运动控制:控制车辆的油门和刹车,确保车辆安全、舒适地加速和减速运动;
    横向运动控制:控制车辆的方向盘转角和转速,确保车辆安全、舒适地转向运动。

动力学标定表:车辆云标定是通过采集车辆底盘油门踏板量、刹车踏板量、车辆速度、加速度作为车辆纵向动力模型的输入,通过机器学习的方式,生成相应车辆的踏板标定表。
    生成的标定表数据量大,精度高,能提高车辆的控制精度。
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)星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第7张图片

三维标定表——两个输入,一个输出

CANBUSCanbus是车和自动驾驶软件之间的桥梁,主要作用是反馈车当前的状态(航向,角度,速度等信息)至Apollo的上层软件模块,并且发送控制命令到车线控底盘。
    modules -> canbus -> vehicle 提供了多款车型的CAN总线协议 星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第8张图片

1.3 控制模块的代码结构

控制模块位置:Apollo -> modules -> control

  • common // 提供了包括PID在内的多种算法程序
  • conf // 控制模块的配置文件,用于控制参数的配置
  • controller // 提供了横纵向运动控制器的实现程序
  • dag // 定义实现控制器的依赖文件和路径
  • launch // 用于加载控制器的dag文件
  • proto // 定义各种控制器的信号列表和数据结构
  • control_component.cc // 控制模块的入口程序
  • README.md // 控制模块的说明文档
    星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第9张图片

1.3.1 control -> common 中的主要程序

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第10张图片

1.3.2 control -> conf 中的主要程序

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第11张图片

1.3.3 control -> controller 中的主要程序

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第12张图片

1.3.4 control -> proto 中的主要程序

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第13张图片

2. Apollo提供的控制器

2.1 Apollo 提供的控制器

  • 横向控制器 LAT_CONTROLLER
  • 纵向控制器 LON_CONTROLLER
  • 横纵向综合控制器 MPC_CONTROLLER

     Apollo中对于上述三种控制器,需要选择横向控制器+纵向控制器或单独MPC。
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第14张图片
Apollo 默认激活的控制器

  • active_controllers: LAT_CONTROLLER
  • active_controllers: LON_CONTROLLER

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第15张图片

2.2 纵向 PID 控制器简介

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第16张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第17张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第18张图片

  • Kp——调整系统对目标的响应速度,但过大的Kp可能会导致明显的超调和振荡,降低系统的动态性能。
  • Ki——有利于减小响应的超调量,减小系统的稳态误差,提高控制精度。
  • Kd——有利于减小系统超调量,提高系统稳定性。

     PID参数的调试是一个综合的、各参数互相影响的过程,实际调试过程中需要反复调试。大致先调Kp,后调Ki,先速度闭环,再位置闭环。
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第19张图片

2.3 横向 LQR 控制器简介

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第20张图片

横摆角不一定等于航向角,横摆角速度 = 航向角速度

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第21张图片
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第22张图片

3. 控制模块的执行流程

3.1 控制模块的总体执行流程

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第23张图片

3.2 控制模块的入口程序 control_component.cc 及主要函数

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第24张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第25张图片

3.3 控制器注册程序 controller_agent.cc 及主要函数

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第26张图片

3.4 纵向控制器程序 lon_controller.cc 及主要函数

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第27张图片

3.5 横向控制器程序 lat_controller.cc 及主要函数

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第28张图片

3.6 纵横向控制的总体流程

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第29张图片

4. 控制模块调试和数据分析

4.1 基于 Apollo Studio 的控制模块仿真

https://developer.apollo.auto/document_cn.html?target=/Apollo-Homepage-Document/Apollo_Doc_CN_6_0/
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第30张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第31张图片

4.2 云平台实验

Apollo控制之控制结果分析
主要用到两个包:bag1.bag(效果好) 和 bag2.bag(效果不好)
在这里插入图片描述
打开DreamView

 ./scripts/bootstrap_neo.sh  

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第32张图片
先播放第一个数据包

 cyber_recorder play -f bag1.bag  -l

在这里插入图片描述

另开终端,用cyber_monitor 查看数据,重点看control
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第33张图片
数据信号流
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第34张图片
ctrl + d 看下一页的数据
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第35张图片星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第36张图片
星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第37张图片

通过误差来观察其控制效果

星火计划学习笔记——第八讲Apollo控制模块解析与实践2_第38张图片
参考文献

  • 《车辆动力学及控制》
  • 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星火计划,学习,人工智能,自动驾驶)