自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
(七)CILQR约束条件下的ILQR求解
CILQR((Constrained Iterative Linear Quadratic Regulator)) 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下,系统不仅要优化控制输入以最小化代价函数,还需要满足各种物理约束,例如控制输入的限制(如力矩或速度的上下限)、状态的约束(如位置、速度的范围),甚至是复杂的非线性约束条件。
要在 iLQR 中处理约束,通常使用多种方法,包括:
- 投影法(Projection Method)
- 惩罚函数法(Penalty Method)
- 障碍函数法(Barrier Method)
- 拉格朗日乘子法(Lagrangian Method)
- QP 求解方法(Quadratic Programming for Constraints)
下面我们详细介绍这些方法在 iLQR 中的应用以及如何通过它们处理约束。
1. 投影法(Projection Method)
投影法 是一种简单的方法,主要用于处理控制输入或状态的上下限边界约束。它通过在每次迭代后将违反约束的控制输入或状态投影到可行域内,保证最终结果满足约束。
过程:
-
迭代更新控制输入:在优化的过程中,根据 iLQR 更新控制输入
和状态
。
-
投影回可行域:如果控制输入或状态超出给定的限制,则将其投影回到约束范围内:
-
继续迭代:在投影后继续下一步的前向和后向传播,直到控制输入和状态满足收敛条件。
优缺点:
- 优点:方法简单,易于实现;适合处理简单的线性约束(如上下限)。
- 缺点:对于复杂的非线性约束不适用,且强制投影可能会对算法收敛性和解的质量产生负面影响。
2. 惩罚函数法(Penalty Method)
惩罚函数法 是通过在代价函数中增加一个罚项,用于惩罚违反约束的行为,从而迫使解满足约束条件。罚项的大小取决于违反约束的程度,随着违反约束的增大,罚项的代价增加。
过程:
-
定义罚项:引入违反控制输入或状态约束的罚项,例如对于控制输入 uk\mathbf{u}_kuk 的上下限约束,可以定义一个惩罚项:
其中
是惩罚参数,用来调节约束的严格性。
-
更新代价函数:将惩罚项加入到原始代价函数中:
-
优化:通过 iLQR 的前向传播和后向传播最小化这个新的代价函数
,随着惩罚参数
的增大,解会更严格地满足约束条件。
优缺点:
- 优点:可以处理复杂的非线性约束,能够逐渐逼近约束条件。
- 缺点:需要调整惩罚参数 ρ\rhoρ,如果惩罚项选择不当,可能导致收敛缓慢或约束不精确。
3. 障碍函数法(Barrier Method)
障碍函数法 是一种特殊的惩罚函数法,通过引入障碍函数来处理约束条件。当控制输入或状态接近约束边界时,障碍函数的值会趋向无穷大,从而限制解靠近或超过约束边界。
过程:
-
定义障碍函数:常用的障碍函数是对数障碍函数,例如对于控制输入的上下限约束:
-
更新代价函数:将障碍函数加入到代价函数中:
其中
是障碍函数的权重,控制障碍的强度。
-
优化:通过 iLQR 最小化这个新的代价函数,使得解接近约束边界时,代价函数趋向无穷大,限制解超出可行域。
优缺点:
- 优点:能较好地处理边界约束,保证解在可行域内。
- 缺点:数值稳定性差,当解接近边界时,障碍函数趋向无穷大可能导致数值不稳定。
4. 拉格朗日乘子法(Lagrangian Method)
拉格朗日乘子法 通过引入拉格朗日乘子,将约束条件与目标函数相结合,转化为一个对偶优化问题。这种方法特别适用于等式约束问题。
过程:
-
定义拉格朗日函数:假设约束为 h(xk,uk)=0h(\mathbf{x}_k, \mathbf{u}_k) = 0h(xk,uk)=0,可以构造拉格朗日函数:
其中
是拉格朗日乘子。
-
优化问题:通过优化拉格朗日函数,使得原目标函数最优的同时满足约束条件。
-
更新拉格朗日乘子:迭代更新拉格朗日乘子 λk\lambda_kλk,逐步逼近约束条件。
优缺点:
- 优点:适合处理等式约束问题,尤其在严格的等式约束问题中具有良好的性能。
- 缺点:处理不等式约束较复杂,优化过程中计算量较大。
5. QP 求解方法(Quadratic Programming for Constraints)
QP 求解方法 是通过将 iLQR 的每次迭代转化为一个带有约束的 二次规划问题(Quadratic Programming, QP)。通过引入二次规划求解器,处理线性或二次型约束问题。
过程:
-
线性化和二次化:在每次迭代中,将非线性系统线性化,将代价函数二次化。对于每个时间步,代价函数可以近似为:
-
引入约束:将控制输入或状态的约束引入到二次规划问题中,例如:
-
求解 QP 问题:使用二次规划求解器(如 OSQP)来求解带有约束的二次规划问题,得到满足约束的最优解。
优缺点:
- 优点:可以精确处理线性或二次型约束问题,适用于更复杂的约束场景。
- 缺点:计算复杂度较高,每次迭代需要求解一个 QP 问题,适用于小规模系统或计算资源较充足的情况。
6. AL-iLQR求解方法(Augmented Lagrangian ILQR)
AL-iLQR通过引入 增广拉格朗日法(Augmented Lagrangian Method),将原始问题的约束条件通过拉格朗日乘子和惩罚项结合到代价函数中,逐步逼近最优解。
对于带有等式和不等式约束的最优控制问题,引入 增广拉格朗日函数:
其中:
是拉格朗日乘子,对应等式约束
。
是惩罚系数,用于控制惩罚项的强度。
总结:
- 如果约束较为简单(如上下限),优先使用 投影法。
- 如果需要处理较复杂的非线性约束,可以选择 惩罚函数法 或 障碍函数法。
- 如果约束是等式约束,且必须严格满足,拉格朗日乘子法 是一个较好的选择。
- 如果系统较小且有复杂的线性或二次型约束,QP 求解方法 能提供更精确的解。
相关文章:
自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
(七)CILQR约束条件下的ILQR求解 CILQR((Constrained Iterative Linear Quadratic Regulator)) 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下,系统不仅要优化控制输入以最小化代价函数&#x…...
随想录笔记-二叉树练习题
合并二叉树 617. 合并二叉树 - 力扣(LeetCode) dfs递归 class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1null||root2null){return root1null?root2:root1;}return dfs(root1,root2);}public TreeNode dfs(Tre…...
华雁智科前端面试题
1. var 变量的提升 题目: var a 1 function fun() {console.log(b)var b 2 } fun() console.log(a) 正确输出结果:undefined、1答错了,给一个大嘴巴子,错误答案输出结果为:2,1 此题主要考察 var 定义的变量&…...
【iOS】单例模式
【iOS】单例模式 什么是单例模式? 定义 单例模式,简单地说就是一个类只对应一个对象,每次使用这个类时,都只能获取到那一个对象。它的详细定义如下: 如果一个类始终只能创建一个实例,则这个类被称为单例…...
Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉
信号是 Linux 操作系统中非常重要的进程控制机制,用来异步通知进程发生某种事件。理解信号的产生、阻塞、递达、捕捉等概念,可以帮助开发者更好地编写健壮的应用程序,避免由于未处理的信号导致程序异常退出。本文将带你从基础概念开始&#x…...
递归的时间复杂度分析
确定回溯算法的时间复杂度通常比较复杂,因为它取决于搜索空间的大小以及你的剪枝效率。对于生成从1到n的所有长度为k的组合。分析这类算法的时间复杂度时,我们通常需要考虑递归树的所有可能路径。 组合数 生成的组合数量是从n个元素中选择k个的组合数&…...
C++: 二叉树进阶面试题
做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…...
【HarmonyOS NEXT】实现网络图片保存到手机相册
【问题描述】 给定一个网络图片的地址,实现将图片保存到手机相册 【API】 phAccessHelper.showAssetsCreationDialog【官方文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#showassetscreationdialog…...
Pytorch详解-数据模块
Pytorch详解-数据模块 torch.utils.data.Dataset数据交互模块—Dataset的功能示例系列APIsconcatSubsetrandom_splitsampler unsqueeze DataLoaderDataLoader功能支持两种形式数据集读取自定义采样策略自动组装成批数据多进程数据加载自动实现锁页内存(Pinning Memo…...
浅谈openresty
熟悉了nginx后再来看openresty,不得不说openresty是比较优秀的。 对nginx和openresty的历史等在这此就不介绍了。 首先对标nginx,自然有优劣 一、开发难度 nginx: 毫无疑问nginx的开发难度比较高,需要扎实的c/c基础ÿ…...
【学习笔记】2024最新版SpringCloud教程
2024最新版SpringCloud教程 0 前言闲聊开篇简介 1 SpringBoot和SpringCloud版本选型 2 SpringCloud是什么能干吗 3 SpringCloud各组件的停更升级替换说明 4 项目实战之需求说明 5 项目实战之Maven父工程聚合说明和mysql驱动选择 6 项目实战之Mapper4一键生成Dao层代码 …...
Proxyless Service Mesh:下一代微服务架构体系
一、项目背景及意义 在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如: 服务间通信的复杂性&#…...
大数据Flink(一百一十八):SQL水印操作(Watermark)
文章目录 SQL水印操作(Watermark) 一、为什么要有WaterMark 二、Watermark解决的问题 三、代码演示 SQL水印操作(Watermark) 一、为什么要…...
【QGC】把QGroundControl地面站添加到Ubuntu侧边菜单栏启动
把QGroundControl地面站添加到Ubuntu侧边菜单栏启动 简介准备工作步骤 1: 创建 Desktop Entry 文件步骤 2: 编辑 Desktop Entry 文件步骤 3: 刷新应用程序菜单步骤 4: 将 QGroundControl 固定到侧边栏 环境: Ubuntu :20.04 LTS 简介 QGroundControl 是…...
PostgreSQL配置主从同步
PostgreSQL配置主从同步 1 主、备库安装postgresql软件 su - pg12 cd /home/pg12/resource tar -zxvf postgresql-12.9.tar.gz cd postgresql-12.9/ ./configure --prefix/home/pg12/soft/ make -j 16 && make install2 主、备库配置环境变量 vi ~/.bash_profile…...
基于python+django+vue的鲜花商城系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…...
李飞飞任CEO,空间智能公司World Labs亮相,全明星阵容曝光
人工智能的下个大方向已经出现,标志性学者决定下场创业。 本周五,一个重磅消息引爆了 AI 圈:斯坦福大学计算机科学家李飞飞正式宣布创办 AI 初创公司 ——World Labs,旨在向人工智能系统传授有关物理现实的深入知识。 李飞飞说道&…...
PyTorch详解-可视化模块
PyTorch详解-可视化模块 Tensorboard 基础与使用启动 TensorBoard访问 TensorBoard使用 TensorBoardSummaryWriter类介绍参数说明常用方法 CNN卷积核与特征图可视化参数说明返回值 混淆矩阵与训练曲线可视化混淆矩阵可视化训练曲线绘制 模型参数打印参数说明输出解释 Tensorboa…...
Bootstrap 警告信息(Alerts)使用介绍
本章将讲解警告(Alerts)以及 Bootstrap 所提供的用于警告的 class。警告(Alerts)向用户提供了一种定义消息样式的方式。它们为典型的用户操作提供了上下文信息反馈。 您可以为警告框添加一个可选的关闭按钮。为了创建一个内联的可…...
uniapp(H5)设置反向代理,设置成功后页面报错
设置反向代理后,页面报错图: 反向代理代码:devServer下面就是配置对应的代理,一般这样就没问题了 "h5": {"router": {"mode": "hash"},"devServer": {"port": 517…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
