自动驾驶:控制算法概述

自动驾驶:控制算法概述

  • 常见控制算法
    • PID算法
    • LQR算法
    • MPC算法
  • 自动驾驶控制算法
    • 横向控制
    • 纵向控制
  • 参考文献

常见控制算法

PID算法

PID(Proportional-Integral-Derivative)控制是一种经典的反馈控制算法,通常用于稳定性和响应速度要求不是特别高的控制系统。PID控制基于三个主要组成部分:比例项(P),积分项(I),和微分项(D)。比例项根据当前误差来产生控制输出,积分项处理历史误差的总和,微分项处理误差变化的速度。PID控制通常通过多次试验、调整参数来实现,通过对PID参数的调节进而改善系统的性能,如稳定性、超调和振荡等。

PID控制算法的控制输出计算如下:
u ( t ) = K p ⋅ e ( t ) + K i ⋅ ∫ 0 t e ( τ ) d τ + K d ⋅ d e ( t ) d t u(t) = K_p\cdot e(t) + K_i \cdot \int_0^t e(\tau)d\tau + K_d \cdot \frac{de(t)}{dt} u(t)=Kpe(t)+Ki0te(τ)dτ+Kddtde(t)

其中, u ( t ) u(t) u(t)是控制输出, K p K_p Kp K i K_i Ki K d K_d Kd分别是比例、积分和微分系数, e ( t ) e(t) e(t)是当前误差, d e ( t ) d t \frac{de(t)}{dt} dtde(t)是误差的变化率。

  • 比例项(P - Proportional):
    比例项与当前误差成正比,用来调整控制输出。当前误差是期望值与实际值之间的差值。
    比例项的作用是减小误差,使系统更快地接近期望值。
    比例系数(通常表示为 K p K_p Kp)用来控制比例项的影响,过大的 K p K_p Kp可能引起超调,而过小的 K p K_p Kp可能导致响应过慢。
  • 积分项(I - Integral):
    积分项用来处理历史误差的总和。它消除系统的稳态误差,确保系统最终稳定在期望值附近。
    积分项的作用是减小稳态误差,特别是在系统存在系统饱和或其他非线性问题时。
    积分系数(通常表示为 K i K_i Ki)控制积分项的影响,过大的 K i K_i Ki可能导致系统不稳定,而过小的 K i K_i Ki可能使响应过慢。
  • 微分项(D - Derivative):
    微分项用来处理误差变化的速度,预测未来误差趋势。它有助于减小振荡和改善系统的响应速度。
    微分项的作用是减小系统的振荡,尤其在系统响应速度需要控制的情况下。
    微分系数(通常表示为 K d K_d Kd)控制微分项的影响,过大的 K d K_d Kd可能引起噪声敏感性,而过小的 K d K_d Kd可能无法改善振荡问题。

PID控制对于线性系统和某些非线性系统非常有效,但不适用于所有类型的系统,而且它需要多次试验不断调參才能满足系统性能要求。对于一些复杂系统,更高级控制策略可能更为合适。

LQR算法

LQR(Linear Quadratic Regulator)控制算法是一种用于线性系统的最优控制方法,旨在寻找一种最优的控制策略,以最小化一个线性二次性能指标。LQR控制输入是系统状态的线性组合以及反馈信号,输出控制信号。它可以用于稳态和动态控制以及应用于多变量系统,通过权重矩阵调整性能指标,以满足特定需求。LQR的设计需要系统的状态空间模型和性能指标,通常使用状态反馈来调整系统行为,并可以提供最优的控制输入,使系统稳定并满足性能要求。

  1. 系统模型
    LQR控制的第一步是建立线性时间不变(LTI)系统的状态空间模型。这个模型通常由状态方程和输出方程组成。
    状态方程描述了系统状态(状态向量)如何随时间演变,通常用如下形式表示:
    x ˙ ( t ) = A x ( t ) + B u ( t ) \dot{x}(t) = Ax(t) + Bu(t) x˙(t)=Ax(t)+Bu(t)
    输出方程描述了系统状态和控制输入之间的关系,通常用如下形式表示:
    y ( t ) = C x ( t ) + D u ( t ) y(t) = Cx(t) + Du(t) y(t)=Cx(t)+Du(t)
    其中, x ( t ) x(t) x(t)是状态向量, x ˙ ( t ) \dot{x}(t) x˙(t)是状态向量的导数, u ( t ) u(t) u(t)是控制输入, y ( t ) y(t) y(t)是系统的输出, A A A B B B C C C D D D是系统的矩阵参数。
  2. 性能指标
    LQR控制的目标是最小化一个线性二次性能指标,通常称为LQR性能指标或成本函数。
    LQR性能指标的一般形式如下:
    J = ∫ 0 ∞ ( x T Q x + u T R u ) d t J = \int_0^\infty \left( x^T Q x + u^T R u \right) dt J=0(xTQx+uTRu)dt
    其中, Q Q Q是状态权重矩阵, R R R是控制输入权重矩阵。这些权重矩阵可以用来调整性能指标的权重,以满足特定的性能要求。
  3. 最有控制策略
    LQR控制通过求解Riccati方程来找到最优的控制策略。Riccati方程的一般形式如下:
    A T P + P A − ( P B ) R − 1 ( B T P ) + Q = 0 A^T P + PA - (PB)R^{-1}(B^T P) + Q = 0 ATP+PA(PB)R1(BTP)+Q=0
    这里, P P P是状态反馈矩阵,包含了最优控制策略的信息。 R R R Q Q Q是性能指标中的权重矩阵, A A A B B B是系统的状态方程参数。
    一旦求解了Riccati方程,最优的状态反馈矩阵 P P P就可以用来计算最优的控制输入,通常如下:
    u ( t ) = − R − 1 B T P x ( t ) u(t) = -R^{-1}B^T P x(t) u(t)=R1BTPx(t)
  4. 闭环控制
    一旦找到了最优的状态反馈矩阵PP,可以将其应用于系统,以实现闭环控制。
    最优的控制输入可以通过 u ( t ) = − R − 1 B T P x ( t ) u(t) = -R^{-1}B^T P x(t) u(t)=R1BTPx(t)计算,并用于调整系统状态,使系统的性能指标最小化。

然而,LQR控制也有一些限制,主要是它要求系统是线性的,且系统参数必须是已知的。对于非线性系统或具有参数不确定性的系统,可能需要使用其他控制策略,如模型预测控制(MPC)。

MPC算法

MPC(Model Predictive Control)控制算法是一种先进的模型预测控制策略,通常用于复杂、非线性、时变和多变量系统。MPC的核心思想是在每个时刻基于系统数学模型对未来的系统行为进行预测,并通过优化来选择最优的控制输入序列,以满足性能和约束要求。MPC允许系统在考虑约束条件下实时调整控制策略,以满足性能和操作限制,它处理复杂系统和需要考虑多种约束的情况下非常有效。

  1. 系统模型:
    MPC的核心是系统的动态模型,这个模型通常以状态空间形式表示,包括状态方程和输出方程。
    状态方程描述了系统状态如何随时间演变,通常表示为:
    x ( k + 1 ) = f ( x ( k ) , u ( k ) ) x(k+1) = f(x(k), u(k)) x(k+1)=f(x(k),u(k))
    输出方程描述了系统状态和控制输入之间的关系,通常表示为:
    y ( k ) = g ( x ( k ) ) y(k) = g(x(k)) y(k)=g(x(k))
    在MPC中,系统模型通常是非线性的,但也可以是线性的。
  2. 性能指标:
    MPC的目标是通过调整控制输入来最小化一个性能指标,通常是成本函数,以满足性能要求。
    一般性能指标的形式如下:
    J = ∑ k = 0 N − 1 ( ℓ ( x ( k ) , u ( k ) ) + m ( x ( N ) ) ) J = \sum_{k=0}^{N-1} \left( \ell(x(k), u(k)) + m(x(N)) \right) J=k=0N1((x(k),u(k))+m(x(N)))
    其中, N N N是控制预测的时域长度, ℓ ( ⋅ ) \ell(\cdot) ()表示每个时刻的瞬时成本, m ( ⋅ ) m(\cdot) m()表示终端成本。
  3. 控制预测:
    在每个时刻,MPC对未来的系统行为进行预测,计算一系列控制输入,通常称为控制输入序列。
    这些预测是通过模拟系统状态演变,基于当前状态和控制输入,利用系统模型来完成的。
    预测时域通常涵盖多个时刻,以确保系统在未来时间内满足性能指标。
  4. 优化问题:
    MPC使用一个优化算法来选择最优的控制输入序列,以最小化性能指标。
    优化问题的目标是在满足约束条件的情况下,最小化性能指标。
    优化问题通常是非线性的,并可以包括状态、控制输入和约束的非线性约束条件。
  5. 控制策略:
    一旦找到最优的控制输入序列,只应用第一个控制输入,然后在下一个时刻重新计算。
    这使得MPC成为一种适用于非线性系统和多变量系统的灵活控制策略,可以在实时中重新优化控制输入。
  6. 约束条件:
    MPC可以处理各种约束条件,包括状态、控制输入和输出的约束。
    这些约束可用于确保系统在操作限制内运行,以避免不稳定或不安全的操作。

然而,MPC控制算法需要较强的计算能力,因为它涉及到在线优化问题的求解。而且它对系统模型的准确性要求较高,可能需要对控制器的参数进行精细调整以实现所需的性能。

自动驾驶控制算法

自动驾驶控制往往是横纵向解耦控制,横向控制器一般采用LQR算法,而纵向控制器一般采用PID算法,下面将详细介绍横纵向控制。

横向控制

横向控制的输入车辆位置(定位信息)、车身参数信息(底盘信息)和规划轨迹,它主要通过改变方向盘扭矩或转角等进而控制车辆的前轮转角,使车辆按照规划的路径行驶。如下图所示,横向控制主要由前馈开环控制器和反馈闭环控制器构成。
在这里插入图片描述

纵向控制

纵向控制的输入为规划的位置、速度和加速度,它主要为速度控制,通过控制刹车和油门等实现对车速的控制,如下图所示,纵向控制主要由两个闭环控制和一个开环控制组成。
在这里插入图片描述

参考文献

Apollo代码学习(五)—横纵向控制

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

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

相关文章

ue5蓝图请求接口

安装与使用 1、在虚幻商城搜索 VaRest 插件 2、选择自己项目的对应版本安装 3、查看是否安装成功 4、进入项目后,分别启动VaRest、JSON Blueprint Utilities两个插件(勾选后会提示重启项目) 5、基本用法:打开关卡蓝图使用&#xf…

Android Studio SDK manager加载packages不全

打开Android Studio里的SDK manager,发现除了已安装的,其他的都不显示。 解决方法: 设置代理: 方便复制> http://mirrors.neusoft.edu.cn/ 重启Android Studio

【Java学习之道】TCPIP套接字编程实例

引言 网络编程是Java学习中不可或缺的一部分,而TCP/IP套接字编程又是网络编程的基础。那么,初学者如何才能快速掌握TCP/IP套接字编程呢?今天我们就来通过一个简单的实例,为你揭示TCP/IP套接字编程的奥秘! 一、什么是…

Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)

查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…

PyTorch 深度学习之循环神经网络(基础篇)Basic RNN(十一)

0.Revision: DNN dense 重义层 全连接 RNN处理带有序列的数据 1. What is RNNs? linear layer 1.1 What is RNN? tanh (-1, 1) 1.2 RNN Cell in PyTorch 1.3 How to use RNNCell *先把维度搞清楚 多了一个序列的维度 2. How to use RNN 2.1 How to use RNN - numLayers…

PC电脑 VMware安装的linux CentOs7如何扩容磁盘?

一、VM中进行扩容设置 必须要关闭当前CentOS,不然扩展按钮是灰色的。 输入值必须大于当前磁盘容量。然后点击扩展,等待扩展完成会提示一个弹框,点击确定,继续确定。 二、操作CentOS扩容——磁盘分区 第一步设置完成。那就启动 …

docker-compose部署elk(8.9.0)并开启ssl认证

docker部署elk并开启ssl认证 docker-compose部署elk部署所需yml文件 —— docker-compose-elk.yml部署配置elasticsearch和kibana并开启ssl配置基础数据认证配置elasticsearch和kibana开启https访问 配置logstash创建springboot项目进行测试kibana创建视图,查询日志…

微信小程序-3

一、交互 API - - - 界面 - - - 交互 功能&#xff1a;提示 是否删除 1.wx.showToast 显示消息提示框 <button type"primary" bindtapclickBtn>按钮</button> <input style"margin: 20rpx;height: 60rpx;background: gainsboro;" type&…

Docker逃逸---SYS_PTRACE浅析

一、产生原因 用户授予了容器SYS_PTRACE权限&#xff0c;并且与宿主机共享一个进程命名空间(--pidhost)&#xff0c;使得容器内可以查看到宿主机的进程&#xff0c;攻击者可以利用进程注入&#xff0c;反弹shell&#xff0c;从而实现逃逸 二、利用条件 1、容器有SYS_PTRACE权…

23基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。

基于MATLAB的小波降噪&#xff0c;默认阈值消噪&#xff0c;强制消噪&#xff0c;给定软阈值消噪方法&#xff0c;数据直接替换后就可以跑。 https://www.xiaohongshu.com/explore/652d57c600000

elasticsearch配置

Elasticsearch version: 5.1.1 Windows Java安装 版本&#xff1a;jdk8 Java Archive | Oracle 中国 安装elasticsearch-rtf Elasticsearch-RTF是针对中文的一个发行版&#xff0c;即使用最新稳定的elasticsearch版本&#xff0c;并且帮你下载测试好对应的插件&#xff0c;…

ppt怎么压缩到10m以内?分享ppt缩小方法

在日常工作中&#xff0c;我们常常需要制作和分享PowerPoint演示文稿&#xff0c;然而&#xff0c;有时候文稿中的图片、视频等元素会导致文件过大&#xff0c;无法在电子邮件或其他平台上顺利传输。为了将PPT文件压缩到10M以内&#xff0c;我们可以使用一些专门的文件压缩工具…

性能超越 Clickhouse | 物联网场景中的毫秒级查询案例

1 物联网应用场景简介 物联网&#xff08;Internet of Things&#xff0c;简称 IoT&#xff09;是指通过各种信息传感、通信和 IT 技术来实时连接、采集、监管海量的传感设备&#xff0c;从而实现对现实世界的精确感知和快速响应&#xff0c;继而实现自动化、智能化管理。在查…

2-k8s-控制器介绍

文章目录 一、控制器类型二、Deployment控制器三、SatefulSet控制器四、Daemonset控制器五、Job控制器六、CronJob 控制器 一、控制器类型 Deployment&#xff1a;适合无状态的服务部署StatefullSet&#xff1a;适合有状态的服务部署DaemonSet&#xff1a;一次部署&#xff0c…

时间复杂度为 O(n^2) 的排序算法

大家好&#xff0c;我是 方圆。对于小规模数据&#xff0c;我们可以选用时间复杂度为 O(n2) 的排序算法&#xff0c;因为时间复杂度并不代表实际代码的执行时间&#xff0c;而且它也省去了低阶、系数和常数&#xff0c;仅代表的增长趋势&#xff0c;所以在小规模数据情况下&…

python:使用卷积神经网络(CNN)进行回归预测

作者:CSDN @ _养乐多_ 本文详细记录了从Excel或者csv中读取用于训练卷积神经网络(CNN)模型的数据,包括多个自变量和1个因变量数据,以供卷积神经网络模型的训练。随后,我们将测试数据集应用于该CNN模型,进行回归预测和分析。 该代码进一步修改可用于遥感影像回归模型. …

【广州华锐互动】人体血管器官3D动态展示为医学生提供哪些便利?

人体血管器官3D动态展示是一种采用先进的计算机图形技术和立体成像技术&#xff0c;对人体内部结构和功能进行三维可视化的教学方法。这种教学方式以其独特的优势&#xff0c;正在改变传统的解剖学教学模式&#xff0c;为医学教育带来了革新。 首先&#xff0c;3D动态演示能够提…

基于nodejs+vue网课学习平台

各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改&#xff0c;以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…

解密JavaScript的异步机制:打破单线程限制,提升性能与用户体验

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、JavaScript的异步编步机制 二、事件循环…

剑指offer(C++)-JZ50:第一个只出现一次的字符(算法-其他)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1&#xff08;需要区分…