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

news2024/9/25 17:21:26

文章目录

  • 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. 左右车辆合并,不考虑转向时候左右轮子的转角差

o o o:车辆瞬心
z z z:车辆质心
R R R:转弯半径
β β β:速度与车辆纵轴的侧偏角(车身坐标系)
δ δ δ:车辆转角(车身坐标系)
ψ ψ ψ:车身横摆角(世界坐标系)
l l l:前后轮轴质心距
L L L:前后轮轴距
    当车速比较慢时有 β β β→0,前轮转向 δ f {\delta _f} δf→0
在这里插入图片描述在这里插入图片描述只考虑运动学的缺点:

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

2.3 车辆动力学模型 Dynamics

二自由度侧向动力学模型

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

在这里插入图片描述    当轮胎受到横向力时,轮胎由于形变产生侧滑。在这里插入图片描述
F y = C θ {F_y}={C\theta} Fy=
C C C: 侧偏刚度(负值)
θ θ θ: 侧偏角(逆时针为正)
在这里插入图片描述在这里插入图片描述
    受力分析中,第一条式子是对力的平衡进行分析;第二条式子是对力矩的分析。

在这里插入图片描述    根据角度关系可以得到下列关系式。在这里插入图片描述    根据上述公式,可以得到二自由度侧向动力学模型。在这里插入图片描述
缺点:

  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进行数据分析。

参考文献

《车辆动力学及控制》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础学习编程,选择什么编程语言比较合适?

随着互联网的兴起,越来越多的人想要学习编程,却不知道该从哪开始学,小编就通过以下几点给大家分析一下,零基础入门学习编程,该如何选择编程语言。 1、哪一门语言容易入门! 所有语言的知识体系分为三大块&…

SAP ABAP 物料主数据的视图维护状态

SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由。 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录SAP ABAP 物料主数据的视图维护状态1. 技术说明2. 维护状态3. 维护记录…

Linux——实用指令

帮助指令 man 获得帮助信息 基本语法 man [命令或配置文件] 注意:命令可以组合使用,比如ls -al,ls -la help 获得shell内置命令的帮助信息 基本语法 help命令 时间日期类 date指令 显示当前日期 基本语法 date(显示…

【细胞分割】原子力显微镜图像分析【含GUI Matlab源码 1371期】

⛄一、AFM简介 理论知识参考文献:原子力显微镜(AFM)图像的计算机辅助分析 ⛄二、部分源代码 function varargout AFManalysis(varargin) % AFMANALYSIS M-file for AFManalysis.fig % AFMANALYSIS, by itself, creates a new AFMANALYSIS…

【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

10年经验Python老司机分享:转行如何自学Python并且找到工作?

目前信息化产业发展势头很好,互联网就成为了很多普通人想要涉及的行业,因为相比于传统行业,互联网行业涨薪幅度大,机会也多,所以就会大批的人想要转行来学习Python开发。 零基础学习Python必须明确的几点: …

5个千兆网口,将有什么样高速网络传输体验?——米尔MYD-J1028X开发板实测分享

本篇测评由电子工程世界的优秀测评者“HonestQiao ”提供。 此次的板卡测试,是米尔MYD-J1028X开发板的高速网络数据传输测试体验。 01 本次测试的主角 米尔MYD-J1028X开发板提供了5个超级给力的最高支持千兆网络接口,具体如下: 通过查看官…

基于AD936X+Intel FPGA的射频方案

基于ADI AD936X和Intel Cyclone V FPGA的射频方案,适合于无线通信基础设施、防务电子系统、RF测试设备和仪器以及通用软件定义无线电平台等应用。 关于ADI AD936X系列射频收发器 AD936X系列的工作频率范围覆盖从70 MHz到6 GHz。它是一系列完整的无线电设计&#x…

底层网络知识详解:最重要的传输层-第11讲-TCP协议(上):因性恶而复杂,先恶后善反轻松

上一节,我们讲的UDP,基本上包括了传输层所必须的端口字段。它就像我们小时候一样简单,相信“网之初,性本善,不丢包,不乱序”。 后来呢,我们都慢慢长大,了解了社会的残酷,变得复杂而成熟,就像TCP协议一样。它之所以这么复杂,那是因为它秉承的是“性恶论”。它天然认…

Dubbo 4 Dubbo 高级特性 4.2 Dubbo 常用高级配置 4.2.7 集群容错 4.2.8 服务降级

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.2 Dubbo 常用高级配置4.2.7 集群容错4.2.8 服务降级4.2 Dubbo 常用高级配置 4.2.7 集群容错 【一个场景】 现在 服务 提供者 部署成 了一个集群&a…

痞子衡嵌入式:我被邀请做科锐国际旗下数科同道主办的技术沙龙嘉宾

「数科同道」是「科锐国际」旗下的面向技术开发者的专属垂直招聘平台。《数科同道技术沙龙》是由数科同道主办的活动,每期活动邀请行业内及其他知名公司的技术专家分享来自一线的实践经验。自2022年12月起,数科同道将在苏州,聚焦嵌入式行业及…

【Cadence Virtuoso】IC617 入门操作 (MOS特性分析)

Cadence Virtuoso IC617 入门操作篇前言一、软件操作(1)创建自己的Library(2)创建Library下的 Cell二、电路搭建(1)调出器件三、电路仿真(1)打开仿真工具“ADE L”(2) 对参数进行赋值…

【MATLAB教程案例63】学习如何建立自己的深度学习训练样本库,包括分类识别数据库和目标检测数据库

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.建立自己的深度学习训练样本库1——分类识别数据库

纯精华、二十八道BATJ大厂Java岗之“多线程与并发“面试题分享

年底了,又到了跳槽季啦,该刷题走起了。这里总结了一些被问到可能会懵逼的面试真题,有需要的可以看下~ 一、进程与线程 进程是资源分配的最小单位,线程是cpu调度的最小单位。线程也被称为轻量级进程。 所有与进程相关…

内存读写指令 —— LDR / STR

CPU在处理C语言的 a 操作时,变量a因为是放在在内存里的,需要先把a从内存中读取到寄存器中,运算完毕后再保存到内存中。 因此,这个过程中肯定需要用到内存的读写指令。 目录 1、基本内存读写指令(4个字节读写&#xf…

路由声明式传参和编程式传参

声明式传参(使用带href /或本质上是a标签的时候) 直接带路径里带携带参数 下例 在地址栏是可以看到参数的(querys传参) 在vue.tools插件里可以观察到 取出路径参数的方式 params传参 首先需要在路由规则里配置 下图(复制这行路由规则&am…

Day43——Dp专题

文章目录股票问题篇21、买卖股票的最佳时机22、买卖股票的最佳时机II23、买卖股票的最佳时机Ⅲ24、买卖股票的最佳时机Ⅳ25、最佳买卖股票时机含冷冻期26、买卖股票的最佳时机含手续费股票问题总结篇股票问题篇 21、买卖股票的最佳时机 力扣题目链接 动态规划 定义二维数组…

【GRU回归预测】基于matlab粒子群算法优化门控循环单元PSO-GRU神经网络回归预测(多输入单输出)【含Matlab源码 2286期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据,用一维卷积核对数据进行卷积处理,以获取数据的特征。 现设定卷积核的维度为3,移动步长为1,对输入数据进行卷积,以获得特征图图谱,即…

WordCount 案例实操

文章目录WordCount 案例实操一、案例需求二、案例分析三、代码实现1、Map阶段代码WordCount 案例实操 一、案例需求 1、需求:在给定的文本文件中统计输出每一个单词的总次数 2、期望输出数据 atguigu 2 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 二、案例分…

java和springboot开发祭祀小程序扫墓系统代祭小程序

介绍 绿色祭祀小程序,用户微信授权登录后可以发布纪念馆(祭祀名人,祭祀英烈,祭祀个人,可以设置成公开状态或者隐私状态)购买祭祀礼物和留言,用户还可以发布代祭的信息 演示视频 小程序 https:…