自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)

(七)CILQR约束条件下的ILQR求解

CILQR((Constrained Iterative Linear Quadratic Regulator)) 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下,系统不仅要优化控制输入以最小化代价函数,还需要满足各种物理约束,例如控制输入的限制(如力矩或速度的上下限)、状态的约束(如位置、速度的范围),甚至是复杂的非线性约束条件。

要在 iLQR 中处理约束,通常使用多种方法,包括:

  1. 投影法(Projection Method)
  2. 惩罚函数法(Penalty Method)
  3. 障碍函数法(Barrier Method)
  4. 拉格朗日乘子法(Lagrangian Method)
  5. QP 求解方法(Quadratic Programming for Constraints)

下面我们详细介绍这些方法在 iLQR 中的应用以及如何通过它们处理约束。


1. 投影法(Projection Method)

投影法 是一种简单的方法,主要用于处理控制输入或状态的上下限边界约束。它通过在每次迭代后将违反约束的控制输入或状态投影到可行域内,保证最终结果满足约束。

过程:

  1. 迭代更新控制输入:在优化的过程中,根据 iLQR 更新控制输入\mathbf{u}_k和状态 \mathbf{x}_k

  2. 投影回可行域:如果控制输入或状态超出给定的限制,则将其投影回到约束范围内:

    \mathbf{u}_k = \max(\mathbf{u}_{\min}, \min(\mathbf{u}_{\max}, \mathbf{u}_k))

         \mathbf{x}_k = \max(\mathbf{x}_{\min}, \min(\mathbf{x}_{\max}, \mathbf{x}_k))

  1. 继续迭代:在投影后继续下一步的前向和后向传播,直到控制输入和状态满足收敛条件。

优缺点:

  • 优点:方法简单,易于实现;适合处理简单的线性约束(如上下限)。
  • 缺点:对于复杂的非线性约束不适用,且强制投影可能会对算法收敛性和解的质量产生负面影响。

2. 惩罚函数法(Penalty Method)

惩罚函数法 是通过在代价函数中增加一个罚项,用于惩罚违反约束的行为,从而迫使解满足约束条件。罚项的大小取决于违反约束的程度,随着违反约束的增大,罚项的代价增加。

过程:

  1. 定义罚项:引入违反控制输入或状态约束的罚项,例如对于控制输入 uk\mathbf{u}_kuk​ 的上下限约束,可以定义一个惩罚项:

    P(\mathbf{u}_k) = \rho \left( \max(0, \mathbf{u}_k - \mathbf{u}_{\max})^2 + \max(0, \mathbf{u}_{\min} - \mathbf{u}_k)^2 \right)

    其中\rho是惩罚参数,用来调节约束的严格性。

  2. 更新代价函数:将惩罚项加入到原始代价函数中:

    J_{\text{total}} = J_{\text{original}} + \sum_k P(\mathbf{u}_k)
  3. 优化:通过 iLQR 的前向传播和后向传播最小化这个新的代价函数J_{\text{total}},随着惩罚参数\rho的增大,解会更严格地满足约束条件。

优缺点:

  • 优点:可以处理复杂的非线性约束,能够逐渐逼近约束条件。
  • 缺点:需要调整惩罚参数 ρ\rhoρ,如果惩罚项选择不当,可能导致收敛缓慢或约束不精确。


3. 障碍函数法(Barrier Method)

障碍函数法 是一种特殊的惩罚函数法,通过引入障碍函数来处理约束条件。当控制输入或状态接近约束边界时,障碍函数的值会趋向无穷大,从而限制解靠近或超过约束边界。

过程:

  1. 定义障碍函数:常用的障碍函数是对数障碍函数,例如对于控制输入的上下限约束:

    B(\mathbf{u}_k) = - \sum_{i} \ln(\mathbf{u}_{\max} - \mathbf{u}_k) - \sum_{i} \ln(\mathbf{u}_k - \mathbf{u}_{\min})
  2. 更新代价函数:将障碍函数加入到代价函数中:

    J_{\text{total}} = J_{\text{original}} + \alpha \sum_k B(\mathbf{u}_k)

    其中\alpha是障碍函数的权重,控制障碍的强度。

  3. 优化:通过 iLQR 最小化这个新的代价函数,使得解接近约束边界时,代价函数趋向无穷大,限制解超出可行域。

优缺点:

  • 优点:能较好地处理边界约束,保证解在可行域内。
  • 缺点:数值稳定性差,当解接近边界时,障碍函数趋向无穷大可能导致数值不稳定。

4. 拉格朗日乘子法(Lagrangian Method)

拉格朗日乘子法 通过引入拉格朗日乘子,将约束条件与目标函数相结合,转化为一个对偶优化问题。这种方法特别适用于等式约束问题。

过程:

  1. 定义拉格朗日函数:假设约束为 h(xk,uk)=0h(\mathbf{x}_k, \mathbf{u}_k) = 0h(xk​,uk​)=0,可以构造拉格朗日函数:

    \mathcal{L}(\mathbf{x}_k, \mathbf{u}_k, \lambda_k) = l(\mathbf{x}_k, \mathbf{u}_k) + \lambda_k h(\mathbf{x}_k, \mathbf{u}_k)

    其中\lambda_k是拉格朗日乘子。

  2. 优化问题:通过优化拉格朗日函数,使得原目标函数最优的同时满足约束条件。

  3. 更新拉格朗日乘子:迭代更新拉格朗日乘子 λk\lambda_kλk​,逐步逼近约束条件。

优缺点:

  • 优点:适合处理等式约束问题,尤其在严格的等式约束问题中具有良好的性能。
  • 缺点:处理不等式约束较复杂,优化过程中计算量较大。

5. QP 求解方法(Quadratic Programming for Constraints)

QP 求解方法 是通过将 iLQR 的每次迭代转化为一个带有约束的 二次规划问题(Quadratic Programming, QP)。通过引入二次规划求解器,处理线性或二次型约束问题。

过程:

  1. 线性化和二次化:在每次迭代中,将非线性系统线性化,将代价函数二次化。对于每个时间步,代价函数可以近似为:

    J(\mathbf{x}_k, \mathbf{u}_k) \approx \frac{1}{2} \left[ \mathbf{x}_k^T \mathbf{Q}_k \mathbf{x}_k + \mathbf{u}_k^T \mathbf{R}_k \mathbf{u}_k \right]
  2. 引入约束:将控制输入或状态的约束引入到二次规划问题中,例如:

    \mathbf{u}_{\min} \leq \mathbf{u}_k \leq \mathbf{u}_{\max}, \quad \mathbf{x}_{\min} \leq \mathbf{x}_k \leq \mathbf{x}_{\max}
  3. 求解 QP 问题:使用二次规划求解器(如 OSQP)来求解带有约束的二次规划问题,得到满足约束的最优解。

优缺点:

  • 优点:可以精确处理线性或二次型约束问题,适用于更复杂的约束场景。
  • 缺点:计算复杂度较高,每次迭代需要求解一个 QP 问题,适用于小规模系统或计算资源较充足的情况。

6. AL-iLQR求解方法(Augmented Lagrangian ILQR)

AL-iLQR通过引入 增广拉格朗日法(Augmented Lagrangian Method),将原始问题的约束条件通过拉格朗日乘子和惩罚项结合到代价函数中,逐步逼近最优解。

对于带有等式和不等式约束的最优控制问题,引入 增广拉格朗日函数

\mathcal{L}_A(\mathbf{x}, \mathbf{u}, \lambda, \rho) = l(\mathbf{x}, \mathbf{u}) + \sum_{i} \lambda_i h_i(\mathbf{x}, \mathbf{u}) + \frac{\rho}{2} \sum_{i} \left( h_i(\mathbf{x}, \mathbf{u}) \right)^2

其中:

  • \lambda_i是拉格朗日乘子,对应等式约束h_i(\mathbf{x}, \mathbf{u})
  • \rho是惩罚系数,用于控制惩罚项的强度。

总结:

  1. 如果约束较为简单(如上下限),优先使用 投影法
  2. 如果需要处理较复杂的非线性约束,可以选择 惩罚函数法障碍函数法
  3. 如果约束是等式约束,且必须严格满足,拉格朗日乘子法 是一个较好的选择。
  4. 如果系统较小且有复杂的线性或二次型约束,QP 求解方法 能提供更精确的解。

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

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

相关文章

Python 课程9-資料庫操作

前言 在现代软件开发中,数据库是核心组件之一,它负责数据的存储、管理和检索。无论是简单的应用程序还是复杂的企业级系统,数据库操作都是必不可少的。本教程将深入讲解如何使用 Python 进行数据库操作,涵盖使用 sqlite3 进行本地…

《论网络安全体系设计》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化的普及,计算机网络已经在各行各业得到了广泛的应用。目前,绝大多数业务处理几乎完全依赖计算机和网络执行,各种重要数据如政府文件、工资档案、财务账目和人事档案等均依赖计算机和网络进行存储与传输。另一方面&…

从用户数据到区块链:Facebook如何利用去中心化技术

在数字化时代,用户数据的管理和保护已成为科技公司面临的重大挑战。作为全球最大的社交网络平台之一,Facebook不仅在用户数据的处理上积累了丰富的经验,也在探索如何利用去中心化技术,如区块链,来改进其数据管理和用户…

Kafka原理剖析之「Topic创建」

一、前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略、状态流转等,而Topic的新建语句非常简单 bash kafka-topics.sh \ --bootstrap-server localhost:9092 \ // …

【刷题】Day4--密码检查

Hi! 今日刷题,小白一枚,欢迎指导 ~ 【链接】 密码检查_牛客题霸_牛客网 【思路】 依次根据规则判断密码是否合格。while里嵌套个for循环,来进行密码的多组输入,for循环进行一次代表判断一个密码串;规则…

springboot请求传参常用模板

注释很详细,直接上代码 项目结构 源码 HelloController package com.amoorzheyu.controller;import com.amoorzheyu.pojo.User; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.ti…

2024桥梁科技两江论坛——第二届桥梁工程安全与韧性学术会议

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网:https://ais.cn/u/vEbMBz提交检索:EI Compendex、IEEE Xplore、Scopus 三、大会介绍 2024年桥梁科技两江论坛——第二届桥梁工程…

一种简单的过某宝验证码的方式(仅做学习使用)

开篇 今天介绍一种简单的过某宝验证码的方式,用的是自动化,这样对不会js逆向的小白非常友好,只需要用到selenium框架就能轻松过某宝验证码,即模拟人的操作对滑块进行滑动。 但是首先还是需要训练验证码和标题 训练前&#xff1a…

基于微信小程序的图书馆预约占座系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的图…

GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制

文章目录 GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制概述笔记失败图成功图蜂鸣器管脚波形总结END GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制 概述 以前做了一个实验,用PMOS来…

智能智造和工业软件研发平台SCSAI功能介绍

用爱编程30年,倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销,致力于为10000家的中小企业实现数字化转型,打造数字化企业和智能工厂,点击上边蓝色字体,关注“AI智造AI编程”或文末扫码…

element-plus表单使用show-overflow-tooltip,避免占满屏幕,需要设置宽度

在表单中&#xff0c;<el-table-clumn>中添加show-overflow-tooltip&#xff0c;可以实现表格内容过多的问题。 属性官方解释&#xff1a;是否隐藏额外内容并在单元格悬停时使用 Tooltip 显示它们。 出现的问题&#xff1a; 使用了该属性之后&#xff0c;弹出的详细内…

Linux 手动安装Ollama

Linux 离线安装Ollama 前言 不知道为什么 在阿里云服务器上 执行curl -fsSL https://ollama.com/install.sh | sh一键安装 非常慢 所以只能手动装了 1.到 https://ollama.com/install.sh 下载安装执行文件 修改其中 下载和安装部分代码 if curl -I --silent --fail --location…

形态学算法(连通分量提取,区域最大值提取)

文章目录 二值图像形态学算法连通分量提取 灰度图形态学算法灰度重建区域最大值查找 本文先列举一些近期用到的形态学算法&#xff0c;以后可能会再进行补充。 二值图像形态学算法 连通分量提取 在上一篇文章中已经提到连通分量的概念&#xff0c;这里再进行回顾&#xff1a;…

go 笔记

数据结构与 方法&#xff08;增删改查&#xff09; 安装goland,注意版本是2024.1.1&#xff0c;不是2024.2.1&#xff0c;软件下载地址也在链接中提供了 ‘go’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 在 Windows 搜索栏中输入“环境变量”&#…

SurfaceTexture OnFrameAvailableListener 调用流程分析

背景: 最近项目中遇到一个问题, 需要搞清楚OnFrameAvailableListener 回调流程, 本文借此机会做个记录, 巩固印象, 有相关困惑的同学也可以参考下. 本文基于Android 14 framework 源码进行分析 SurfaceTexture.java OnFrameAvailableListener 设置过程 public void setOnFra…

html+css+js网页设计 旅游 龙门石窟4个页面

htmlcssjs网页设计 旅游 龙门石窟4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

【CSS】选择器(基本选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" href"./样式.css"…

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…

TI DSP下载器XDS100 V2.0无法使用问题

前言 TI DSP下载器XDS100 V2.0用着用着会突然报Error&#xff0c;特别是你想要用Code Composer Studio烧录下载程序的时候 查看设备管理器&#xff0c;发现XDS100 V2.0的设备端口莫名其妙消失了 问了淘宝的厂家&#xff0c;他说TI的开发板信号可能会导致调试器通信信号中断&a…