Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践1
文章目录
- 1. 控制理论简介
- 1.1 控制的作用
- 1.2 自动驾驶控制的目标
- 1.3自动驾驶控制器的设计
- 2. 汽车运动学与动力学
- 2.1 常用的自动驾驶控制算法
- 2.2 车辆运动学模型 Kinematics
- 2.3 车辆动力学模型 Dynamics
- 3. Apollo控制模块
- 3.1 Apollo控制模块
- 3.2 规划与控制相配合
- 3.3 Apollo控制模块的代码结构
- 3.3.1 代码文件与目录结构
- 3.3.2 如何创建和使用自己的控制器
- 4. 参数调节与分析工具
- 4.1 Apollo控制参数配置
- 4.2 Apollo控制分析工具
- 参考文献
1. 控制理论简介
1.1 控制的作用
1.环境感知:激光雷达(Lidar)、雷达(Radar)、超声波、视觉相机、惯导(IMU)等
2.高精度地图(HD Map):周围环境及地形的高精度建模(10cm左右的精度)0
3.控制规划及决策:对汽车进行智能控制
思想实验:
- 可以睁开眼睛,但是换成更小的杯子
- 闭上眼睛,往杯子里面倒水,要求不能洒出来
- 如果眼睛是不能睁开的?找一个人在旁边指导,通过触觉系统感知,多试错几次
1.2 自动驾驶控制的目标
1.3自动驾驶控制器的设计
对于控制理论方面,如果想要进一步了解,可以参考胡寿松的《自动控制原理》这本书以及现代控制论的有关知识。
2. 汽车运动学与动力学
2.1 常用的自动驾驶控制算法
PID 控制无需基于模型。对于PID在车道保持方面的应用。自动驾驶之PID原理简述(简单易懂)
控制油门和刹车可以控制车的纵向速度和位移,而横向控制不仅依赖于车辆转向还依赖于横向速度.纵向控制与横向控制无法完全解耦。
2.2 车辆运动学模型 Kinematics
对于运动学与动力学的基本概念自动驾驶路径跟踪控制——车辆动力学建模基本概念这篇文章有所介绍。
两轮车模型(自行车模型)自动驾驶路径跟踪控制——纯追踪控制之前这篇文章对自行车模型以及纯追踪控制有所介绍。
- 只考虑车辆的平面运动
- 左右车辆合并,不考虑转向时候左右轮子的转角差
ooo:车辆瞬心
zzz:车辆质心
RRR:转弯半径
βββ:速度与车辆纵轴的侧偏角(车身坐标系)
δδδ:车辆转角(车身坐标系)
ψψψ:车身横摆角(世界坐标系)
lll:前后轮轴质心距
LLL:前后轮轴距
当车速比较慢时有βββ→0,前轮转向 δf{\delta _f}δf→0
只考虑运动学的缺点:
- 实际情况下βββ不一定为0
- 车辆速度方向不一定与轮胎方向一致
- 模型完全由几何关系确立,没有考虑
到运动过程中力的影响。
2.3 车辆动力学模型 Dynamics
二自由度侧向动力学模型
- 考虑轮胎侧偏特性(轮胎受力变形)
- 不考虑路面坡度影响
当轮胎受到横向力时,轮胎由于形变产生侧滑。
Fy=Cθ{F_y}={C\theta}Fy=Cθ
CCC: 侧偏刚度(负值)
θθθ: 侧偏角(逆时针为正)
受力分析中,第一条式子是对力的平衡进行分析;第二条式子是对力矩的分析。
根据角度关系可以得到下列关系式。 根据上述公式,可以得到二自由度侧向动力学模型。
缺点:
- 没有考虑坡度的影响(模型扩展:侧倾动力学模型)
- 侧偏角较大时,轮胎侧向力与侧偏角不成正比。
侧向力的大小取决于侧偏角,轮胎载荷,摩擦系数和轮胎纵向受力
该模型并不是这么精确。
3. Apollo控制模块
3.1 Apollo控制模块
3.2 规划与控制相配合
3.3 Apollo控制模块的代码结构
3.3.1 代码文件与目录结构
/apollo/modules/control
- common (可复用的基础运算,包括差值计算,PID运算,超前滞后运算,轨迹分析计算等)
- conf (配置文件)
- controller (控制器,包括纵向控制器,横向控制器,MPC控制器)
- dag (CyberRT组件启动配置)
- proto
- submodules
- control_component (程序入口)
3.3.2 如何创建和使用自己的控制器
- 在/apollo/modules/control/controller文件夹中
创建控制器文件,继承controller.h,实现里面的接口
2. 修改control_conf.proto文件,添加新的控制器名称
enum ControllerType {LAT_CONTROLLER = 0;LON_CONTROLLER = 1;MPC_CONTROLLER = 2;XXX_CONTROLLER = 3;}
- 在ControllerAgent中注册新的控制器
在ControllerAgent::RegisterControllers() 函数中添加
case ControlConf::XXX_CONTROLLER:controller_factory_.Register(ControlConf::XXX_CONTROLLER,[]() -> Controller * { return new xxxController(); });break;
- 修改control_conf.pb.txt配置文件
active_controllers: XXX_CONTROLLER
4. 参数调节与分析工具
4.1 Apollo控制参数配置
注意:
/apollo/modules/control/conf/control_conf.pb.txt 只是一个临时文件
配置文件改完记得保存到 /apollo/modules/calibration/ 对应的车辆文件夹中
(如:/apollo/modules/calibration/data/Lincoln2017MKZ_LGSVL/control_conf.pb.txt)
在DreamView切换车辆的时候,DreamView会从选中的车辆文件夹中拿到实际的配置文件来覆盖临时文件.
4.2 Apollo控制分析工具
实时分析工具:DreamView PNC Monitor
注意不同段曲线的含义
纵向误差
横向误差
方位角误差
离线分析:输出CSV文件
修改配置 /apollo/modules/control/conf/control_conf.conf
添加 --enable_csv_debug=true。
运行代码之后会生成两个csv文件。
/tmp/steer_log_simple_optimal_2022-xx-xx_xxxxxx.csv
/tmp/speed_log__2022-xx-xx_xxxxxx.csv
以protobuffer的方式输出到Channel中,然后Python进行数据分析,用Matplotlib做可视化。
- 创建一个节点实时监听Channel中的数据
参考代码
/apollo/modules/tools/plot_control/plot_control.py - 使用Cyber Recorder把数据录下来,然后使用Python解读
还可以使用python进行数据分析。
参考文献
《车辆动力学及控制》
Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践1相关推荐
- Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践2
文章目录 前言 1. Apollo控制框架介绍 1.1 控制模块的功能和性能要求 1.2 控制模块的总体框架 1.3 控制模块的代码结构 1.3.1 control -> common 中的主要 ...
- 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 ...
最新文章
- php 空格zhuanyi,php写的将逗号、空格、回车分...-php字符转义的相关注意事项-IIS环境中防止本地用户用fsockopen进行DDOS攻击的方法_169IT.COM...
- Maven向本地仓库导入官方仓库没有的jar包
- Tomcat 与 Resin PK大战
- 精准评论是如何在娱乐类产品中大放异彩?
- POJ 1556 The Doors (未完)
- BBR及其在实时音视频领域的应用
- 数据结构6——回文树
- App html5 本地化(Web App转为 Hybird app或新建一个 Hybird app)phonegap篇 (1) iOS
- H3C GRE over IPSec配置(comware v7)
- 精益思想,从哪里开始?
- 基于排队论模型的收银台服务系统的分析及可视化设计
- 图灵 数理逻辑 人工智能 图灵机与计算问题 论文
- 再谈数据标准落标,论数据模型设计工具
- 网络工程师常备工具_网络安全工程师应该知道的10种工具
- 让你聪明10倍的哈佛学习力,颠覆脑力,做情智双高的“少数派”!
- 影集制作php源码_2018最新仿720全景在线制作云平台网站PHP源码(新增微信支付+打赏+场景红包+本地存储)...
- 树莓派 OV5647摄像头 安装、使用过程中如何避坑
- 邱若辰:做微博年入100W,微博赚钱的全套攻略
- 通过Horizon Connection 下载Horizon Client(含UAG场景)
- 指针数组和数组指针的区别及其详解
热门文章
- 网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目
- Laravel中pluck的使用——返回指定的字段值信息列表
- Python练习task2:条件与循环
- 关于travis scott的网名_小仙女可爱单纯的网名
- 信息系统项目管理师必背核心考点(四)UML类与类之间的关系
- 第四章第6节水管工游戏
- 串口转以太网项目开发(1)-- 修改默认的设备树文件
- filecoin-存储证明子系统(rust-fil-proofs)[翻译]
- stm32h7xx_hal_conf.h讲解
- gulp minify-css 压缩之后删除calc所在行解决