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

news2024/11/16 5:54:21

文章目录

  • 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模块)生成的轨迹、车辆当前的位置和状态,计算出汽车的油门、刹车和方向盘信号,控制汽车按照规划的轨迹行驶。在这里插入图片描述

绿色的曲线是规划出来的轨迹。轨迹有两层概念:位置的概念,包括经纬度、坐标,路径规划;速度的概念,在相应的时间到达相应的位置,速度规划;黄色的曲线为实际的运动轨迹。
在这里插入图片描述    首先,输入参考轨迹、车辆当前位置以及车辆当前的状态,通过方向盘的转角、油门以及刹车的控制,以达到车辆实际的行驶轨迹。
    控制系统的性能要求: 快速、精确、稳定地输出控制指令,控制车辆 安全舒适地跟踪参考轨迹。 在这里插入图片描述

1.2 控制模块的总体框架

在这里插入图片描述在这里插入图片描述在这里插入图片描述    控制器接收来自定位轨迹以及底盘状态的输入,然后利用这些输入结合一些控制算法去分别控制车辆的横向运动和纵向运动。
    纵向运动控制:控制车辆的油门和刹车,确保车辆安全、舒适地加速和减速运动;
    横向运动控制:控制车辆的方向盘转角和转速,确保车辆安全、舒适地转向运动。

动力学标定表:车辆云标定是通过采集车辆底盘油门踏板量、刹车踏板量、车辆速度、加速度作为车辆纵向动力模型的输入,通过机器学习的方式,生成相应车辆的踏板标定表。
    生成的标定表数据量大,精度高,能提高车辆的控制精度。
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)在这里插入图片描述

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

CANBUSCanbus是车和自动驾驶软件之间的桥梁,主要作用是反馈车当前的状态(航向,角度,速度等信息)至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.

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

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

相关文章

Android 各镜像文件img详解

Android编译后生成文件,在out/target/product/lime下: cache.img、cust.img、metadata.img、misc.img(本地无)、recovery.img、super.img、userdata.img、vbmeta.img、vbmeta_system.img(仅测试适配工作,而…

Python处理Excel比Vba快100倍,媳妇连连夸赞今晚不用再跪搓衣板----python实战

最近经历了一次把vb脚本改造成python脚本,并获得性能提升数倍的过程,当然,这个过程也不是一帆风顺,中间也经历了一些波折,但是,也收获了一波新的认知。正好最近有时间,姑且写下来记录一下。 什…

水一篇,VB+python实现智能聊天机器人案例

1.分工 理论上单python也能写,但是做gui开发,python要用到thinter库/qt库,稍微麻烦一点。这个案例是python做json截取,VB做gui开发截取json字符。 2.准备工作 编写生成file_controlv2.dll并注册,编写speaker.vbs,准备…

java实现获取当前日期、农历、周

大家好,我是雄雄。 前言 大家先看下面的一段话: 今天是:2022年12月18日,星期日,农历十一月廿五,早安🌞🌞🌞 1.讣告 | 我国著名眼科专家兰绪达在南昌逝世,享…

Linux 多线程(附带线程池代码加注释)

目录 01. Linux线程概念 01.1 什么是线程 01.1.1 轻量级进程ID与进程ID之间的区别 01.1.2 总结(重点) 01.2 线程的优点 01.3 线程的缺点 01.4 线程异常 01.5 线程用途 02. Linux进程VS线程 02.1 进程和线程 02.2 关于多线程和多进程编程 03…

Pytorch中的卷积与反卷积(conv2d和convTranspose2d)

卷积 卷积是特征提取的常用操作,卷积可以改变图片的通道和大小,相比全连接操作,卷积可以减少计算量,并且充分融合图像的局部特征。 import torch import torch.nn as nnx torch.randn(1,1,4,4) model nn.Conv2d(in_channels1,o…

Spring MVC学习 | 注解配置Spring MVC总结

文章目录一、注解配置Spring MVC1.1 初始化类1.2 Spring MVC配置类1.3 完整配置过程二、总结2.1 常用组件2.2 执行流程学习视频🎥:https://www.bilibili.com/video/BV1Ry4y1574R 一、注解配置Spring MVC 1.1 初始化类 🔑注解配置的原理 在…

非零基础自学Golang 第10章 错误处理 10.1 错误处理的方式 10.2 自定义错误

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.1 错误处理的方式10.2 自定义错误10.2.1 错误类型10.2.2 创建错误10.2.3 自定义错误格式第10章 错误处理 我们在编写程序时,为了加强程序的健壮性,往往会考虑到对程序中可能出现的错误…

大数据必学Java基础(一百一十三):监听器概念引入

文章目录 监听器概念引入 一、什么是监听器? 二、监听器怎么分类?

SQL - MySQL深分页

一、MySQL深分页问题 我们在日常开发中,查询数据量比较大的时候,后端基本都会通过前端,移动端传过来的页码,每页数据行数,通过SQL中的 limit 进行分页,如果查询页数比较小的时候,不会出现太大问…

【有营养的算法笔记】 二分+排序/堆 求解矩阵中战斗力最弱的 K 行

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:有营养的算法笔记 ✉️分类专栏:题解 文章目录一、题目描述二、思路及代码实现1. 二分 排序2.…

【学习笔记】JDK源码学习之Vector(附带面试题)

【学习笔记】JDK源码学习之Vector(附带面试题) 什么是 Vector ?它的作用是什么?它的底层由什么组成?是否是线程安全的? 老样子,跟着上面的问题,我们层层深入了解 Vector 吧。 1、…

Linux——linux面试题

cat a.txt | cut -d "/" -f 3 | sort | uniq -c |sort -nrgrep ESTABLISHED | awk -F " " {print $5} |cut -d ":" -f 1 | sort |uniq -c | sort -nr找回mysql的root用户的密码 首先,进入到/etc/my.cnf,插入一句skip-gra…

Apache Hudi Timeline

Timeline | Apache Hudi Hudi维护了在不同时刻在表上执行的所有操作的时间线,这有助于提供表的即时视图,同时也有效地支持按到达顺序检索数据。Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴&#xff08…

windows下配置chrome浏览器驱动的详细攻略

要想使用python去爬取互联网上的数据,尤其是要模拟登录操作。那么selenium包肯定是绕不过的。 selenium包本质上就是通过后台驱动的方式驱动浏览器去。以驱动chrome浏览器为例,搭建环境如下: 1、查看本机chrome浏览器的版本。 方式是&#x…

第三十二章 linux-模块的加载过程二

第三十二章 linux-模块的加载过程二 文章目录第三十二章 linux-模块的加载过程二HDR视图的第二次改写模块导出的符号HDR视图的第二次改写 在这次改写中,HDR视图中绝大多数的section会被搬移到新的内存空间中,之后会根据这些section新的内存地址再次改写…

[附源码]计算机毕业设计Python“小世界”私人空间(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

知到/智慧树——程序设计基础(C语言)进阶篇

目录 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第一章测试 第1部分总题数: 10 1 【单选题】 (10分) 在C语言中,将属于不同类型的数据作为一个整体来处理时,常用( )。 A. 简单变量 B. 数组类型数据 C. 结…

论文投稿指南——中文核心期刊推荐(力学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

10.union all、N天连续登录

有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户) 数据准备 最后需完成的结果表 步骤1,所有用户的总数及平均年龄 (1). 将数据去重 with t1 as (select distinctuser_i…