文章目录

  • 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. 闭上眼睛,往杯子里面倒水,要求不能洒出来
  3. 如果眼睛是不能睁开的?找一个人在旁边指导,通过触觉系统感知,多试错几次

1.2 自动驾驶控制的目标

1.3自动驾驶控制器的设计


    对于控制理论方面,如果想要进一步了解,可以参考胡寿松的《自动控制原理》这本书以及现代控制论的有关知识。

2. 汽车运动学与动力学

2.1 常用的自动驾驶控制算法


    PID 控制无需基于模型。对于PID在车道保持方面的应用。自动驾驶之PID原理简述(简单易懂)

    控制油门和刹车可以控制车的纵向速度和位移,而横向控制不仅依赖于车辆转向还依赖于横向速度.纵向控制与横向控制无法完全解耦。

2.2 车辆运动学模型 Kinematics

    对于运动学与动力学的基本概念自动驾驶路径跟踪控制——车辆动力学建模基本概念这篇文章有所介绍。

    两轮车模型(自行车模型)自动驾驶路径跟踪控制——纯追踪控制之前这篇文章对自行车模型以及纯追踪控制有所介绍。

  1. 只考虑车辆的平面运动
  2. 左右车辆合并,不考虑转向时候左右轮子的转角差

ooo:车辆瞬心
zzz:车辆质心
RRR:转弯半径
βββ:速度与车辆纵轴的侧偏角(车身坐标系)
δδδ:车辆转角(车身坐标系)
ψψψ:车身横摆角(世界坐标系)
lll:前后轮轴质心距
LLL:前后轮轴距
    当车速比较慢时有βββ→0,前轮转向 δf{\delta _f}δf​→0
只考虑运动学的缺点:

  1. 实际情况下βββ不一定为0
  2. 车辆速度方向不一定与轮胎方向一致
  3. 模型完全由几何关系确立,没有考虑
    到运动过程中力的影响。

2.3 车辆动力学模型 Dynamics

二自由度侧向动力学模型

  1. 考虑轮胎侧偏特性(轮胎受力变形)
  2. 不考虑路面坡度影响

    当轮胎受到横向力时,轮胎由于形变产生侧滑。
Fy=Cθ{F_y}={C\theta}Fy​=Cθ
CCC: 侧偏刚度(负值)
θθθ: 侧偏角(逆时针为正)

    受力分析中,第一条式子是对力的平衡进行分析;第二条式子是对力矩的分析。

    根据角度关系可以得到下列关系式。    根据上述公式,可以得到二自由度侧向动力学模型。
缺点:

  1. 没有考虑坡度的影响(模型扩展:侧倾动力学模型)
  2. 侧偏角较大时,轮胎侧向力与侧偏角不成正比。
    侧向力的大小取决于侧偏角,轮胎载荷,摩擦系数和轮胎纵向受力

    该模型并不是这么精确。

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 如何创建和使用自己的控制器

  1. 在/apollo/modules/control/controller文件夹中
    创建控制器文件,继承controller.h,实现里面的接口
    2. 修改control_conf.proto文件,添加新的控制器名称
    enum ControllerType {LAT_CONTROLLER = 0;LON_CONTROLLER = 1;MPC_CONTROLLER = 2;XXX_CONTROLLER = 3;}
  1. 在ControllerAgent中注册新的控制器
    在ControllerAgent::RegisterControllers() 函数中添加
    case ControlConf::XXX_CONTROLLER:controller_factory_.Register(ControlConf::XXX_CONTROLLER,[]() -> Controller * { return new xxxController(); });break;
  1. 修改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做可视化。

  1. 创建一个节点实时监听Channel中的数据
    参考代码
    /apollo/modules/tools/plot_control/plot_control.py
  2. 使用Cyber Recorder把数据录下来,然后使用Python解读

     还可以使用python进行数据分析。

参考文献

《车辆动力学及控制》

Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践1相关推荐

  1. Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践2

    文章目录 前言 1. Apollo控制框架介绍 1.1 控制模块的功能和性能要求 1.2 控制模块的总体框架 1.3 控制模块的代码结构 1.3.1 control -> common 中的主要 ...

  2. Apollo星火计划学习笔记第六讲——Apollo感知模块详解实践2感知基础

    Apollo学习笔记 零.目录 一.Apollo感知框架介绍 1.1 检测和分类 1.2 跟踪 1.3 感知模块代码结构 1.3.1 感知模块入口 二.Lidar障碍物检测.红绿灯识别 2.1 Lid ...

  3. Apollo星火计划学习笔记第四讲2——高精地图定位模块

    Apollo学习笔记 零.目录 一.定位的作用 二.定位用到的算法 2.1 GPS 2.2 IMU 2.3 GNSS(GPS+IMU) 2.4 先验地图定位 2.5 实时定位和建图 2.6 小结 三. ...

  4. Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理1

    文章目录 前言 1. 规划技术功能概述 1.1 自动驾驶系统 1.2 规划的作用 1.3 规划主要功能 1.3.1 路由寻径(Routing) 1.3.2 行为决策 1.3.3 轨迹规划 2. Apo ...

  5. Apollo星火计划学习笔记第四讲1——Apollo高精地图模块

    Apollo学习笔记 零.目录 一.高精地图的作用 1.1 相对于传统地图 二.高精地图介绍 2.1 高精地图构成 2.2 高精地图制作 2.2.1 地图采集 2.2.2 地图制作 2.2.3 地图标 ...

  6. Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理2

    文章目录 前言 1. 泊车系统介绍 1.1 泊车任务 1.2 关键 Use Cas--车位类型 1.3 关键 Use Cas--环境条件 1.4 泊车过程描述 1.5 泊车状态操作和用户接口定义 1. ...

  7. Apollo星火计划学习笔记——第六讲上自动驾驶感知基础(I)

    文章目录 1. 感知的作用 2. 常见传感器 2.1 相机 2.1.1 相机的种类 2.1.2 相机的特点 2.2 激光雷达 2.2.1 激光雷达系统构成与方案 2.2.2 激光雷达光源 2.2.3 ...

  8. Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)

    文章目录 前言 1. Apollo感知框架介绍 1.1 Apollo感知模块概述 1.2 飞桨PaddlePaddle 1.3 跟踪 1.4 Apollo感知框架 2. Lidar障碍物检测 2.1 ...

  9. Apollo星火计划学习笔记——第四讲(Apollo自动驾驶高精地图)

    文章目录 前言 1. 高精度地图的作用 1.1 高精度地图与传统地图的区别 1.2 为什么要使用高精度地图? 1.3 高精度地图面临的挑战和问题 2. 高精度地图的介绍 2.1 如何制作高精度地图 2 ...

最新文章

  1. php 空格zhuanyi,php写的将逗号、空格、回车分...-php字符转义的相关注意事项-IIS环境中防止本地用户用fsockopen进行DDOS攻击的方法_169IT.COM...
  2. Maven向本地仓库导入官方仓库没有的jar包
  3. Tomcat 与 Resin PK大战
  4. 精准评论是如何在娱乐类产品中大放异彩?
  5. POJ 1556 The Doors (未完)
  6. BBR及其在实时音视频领域的应用
  7. 数据结构6——回文树
  8. App html5 本地化(Web App转为 Hybird app或新建一个 Hybird app)phonegap篇 (1) iOS
  9. H3C GRE over IPSec配置(comware v7)
  10. 精益思想,从哪里开始?
  11. 基于排队论模型的收银台服务系统的分析及可视化设计
  12. 图灵 数理逻辑 人工智能 图灵机与计算问题 论文
  13. 再谈数据标准落标,论数据模型设计工具
  14. 网络工程师常备工具_网络安全工程师应该知道的10种工具
  15. 让你聪明10倍的哈佛学习力,颠覆脑力,做情智双高的“少数派”!
  16. 影集制作php源码_2018最新仿720全景在线制作云平台网站PHP源码(新增微信支付+打赏+场景红包+本地存储)...
  17. 树莓派 OV5647摄像头 安装、使用过程中如何避坑
  18. 邱若辰:做微博年入100W,微博赚钱的全套攻略
  19. 通过Horizon Connection 下载Horizon Client(含UAG场景)
  20. 指针数组和数组指针的区别及其详解

热门文章

  1. 网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目
  2. Laravel中pluck的使用——返回指定的字段值信息列表
  3. Python练习task2:条件与循环
  4. 关于travis scott的网名_小仙女可爱单纯的网名
  5. 信息系统项目管理师必背核心考点(四)UML类与类之间的关系
  6. 第四章第6节水管工游戏
  7. 串口转以太网项目开发(1)-- 修改默认的设备树文件
  8. filecoin-存储证明子系统(rust-fil-proofs)[翻译]
  9. stm32h7xx_hal_conf.h讲解
  10. gulp minify-css 压缩之后删除calc所在行解决