当前位置: 首页 > news >正文

【状态空间方程】对于状态空间方程矩阵D≠0时的状态反馈与滑模控制

  又到新的一年啦,2025新年快乐~。前几个月都没更新,主要还是因为不能把项目上的私密工作写进去,所以暂时没啥可写的。最近在山里实习,突然想起年前遗留了个问题一直没解决,没想到这两天在deepseek的加持下很快解决了,只能说AI还是猛,能提供很好的建议。

0. 问题描述

  作为一个控制人,最常见的模型表达式莫过于状态空间方程和二阶的非线性方程了:
  对于绝大多数情况下,上述状态空间方程中的前馈矩阵D一般为0,即输入一般不直接影响输出,但是最近遇到个问题,其辨识出来的模型中矩阵D不为0,然后让你去控制它,这种情况我还真第一次遇到,当我尝试使用最简单的滑模控制来设计控制器时却遇到了问题,并且翻阅各大检索网站都没有这方面的解决办法。
  问题总结:对于前馈矩阵D≠0的情况,如何设计状态反馈或滑模控制器?

1. 状态反馈控制


  状态反馈控制通过反馈状态变量来设计控制器,即使 D≠0,状态反馈控制律仍可以设计为 u = − K x u=-Kx u=Kx 的形式。matlab提供了place函数,可直接针对矩阵A、B设计反馈增益矩阵K。
  若状态变量不可测时,可使用输出反馈控制,输出反馈控制律为 u = − K y u=-Ky u=Ky,其中 y = C x + D u y=Cx+Du y=Cx+Du
  place函数适用于多输入多输出系统,而acker函数仅用于单输入系统。

仿真验证

  以倒立摆系统为例,验证状态反馈控制,可以看出,即使对于D≠0的情况,状态反馈控制仍然具有良好的控制效果。

2. 滑模控制

  为了考虑D≠0的影响,最开始是想设计滑模面 s = S x + K y s=Sx+Ky s=Sx+Ky 的形式,并采用等效控制和切换控制的方式 u = u e q + u s w u=u_{eq}+u_{sw} u=ueq+usw 设计控制律,不过后续发现无论如何调整设计矩阵S和K的参数,均不能完成控制。期间学到了在对y求导时,控制输入u的导数du可以适当忽略,原因如下:

  • 控制输入的动态特性:在实际系统中,执行器的动态特性通常比系统的动态特性快得多,即执行器的响应时间远小于系统的时间常数。因此, u ˙ \dot{u} u˙ 的影响可以忽略不计。
  • 滑模控制的鲁棒性:滑模控制的核心思想是通过高频切换控制律(如符号函数 sign(s(x)))来驱动系统状态到达滑模面并保持在滑模面上。这种高频切换本身就具有很强的鲁棒性,能够克服系统中的不确定性和扰动。即使 u ˙ \dot{u} u˙ 存在,其影响也会被滑模控制的鲁棒性所抑制。
  • 简化设计过程:忽略 u ˙ \dot{u} u˙ 可以大大简化控制律的设计过程。如果考虑 u ˙ \dot{u} u˙,控制律的设计会变得非常复杂,尤其是在多输入多输出(MIMO)系统中。通过忽略 u ˙ \dot{u} u˙,可以将问题简化为一个静态反馈控制问题,从而更容易设计控制器。
  • 实际系统的验证:在实际系统中,忽略 u ˙ \dot{u} u˙ 的假设通常可以通过仿真和实验验证。如果仿真和实验结果表明系统的性能满足要求,那么这一假设就是合理的。

  特殊情况下的处理:如果 u ˙ \dot{u} u˙ 的影响确实不可忽略(例如,执行器的动态特性较慢),可以通过以下方法处理:① 引入动态扩张:将 u 视为一个新的状态变量,设计扩张状态空间方程。② 高阶滑模控制:设计高阶滑模控制器,直接考虑 u ˙ \dot{u} u˙ 的影响。

  由于联合设计矩阵S和K没有成功,因此这里将滑模面仅设计为与状态变量有关的形式 s = S x s=Sx s=Sx ,并采用极点配置的方式求解设计矩阵S。首先令 s ˙ = 0 \dot{s}=0 s˙=0 求出 u e q u_{eq} ueq,取 u s w = − η ∗ s i g n ( s ( x ) ) u_{sw} = -\eta *sign(s(x)) usw=ηsign(s(x)),可得控制律 u = u e q + u s w u=u_{eq}+u_{sw} u=ueq+usw,回代入 x = A x + B u x=Ax+Bu x=Ax+Bu 可得闭环系统的 A c A_{c} Ac,此时采用极点配置将闭环极点配置在左半平面,可得到设计矩阵S的参数。det(S*I-Ac) = (s-lambda1) * (s-lambda2) * ...
  如果不采用极点配置的方式,则需要根据系统稳定性条件确定矩阵S的参数。

仿真验证

  同样的,以倒立摆系统为例,验证滑模控制,可以看出,即使对于D≠0的情况,滑模控制依然具有较好的控制效果。

3. C≠单位阵时的线性变换

  上述解决了矩阵D≠0的情况,此外当D=0时还存在一种情况,即C不等于单位矩阵,此时需要采用线性变换进行处理,即 { A ′ = T − 1 A T B ′ = T − 1 B C ′ = C T \begin{cases} A^{\prime}=T^{-1}AT\\ B^{\prime}=T^{-1}B\\ C^{\prime}=CT\\ \end{cases} A=T1ATB=T1BC=CT其中, C ′ C^{\prime} C 为变换后的单位阵,并可解出满足条件的任一变换矩阵 T T T,随后得到变换后的 A 、 B A、B AB 矩阵。

4. 总结

  基于以上结论,总结如下:

  • 对于D≠0时的状态反馈控制以及滑模控制,大多数情况下可以不考虑D的影响,仍然采用状态变量反馈控制即可,少数情况下需要考虑输出D的影响;
  • 对于控制输入u的导数影响可以适当忽略,实在不能忽略的话可设计高阶滑模控制器或扩张状态空间方程来考虑u;
  • 善用AI工具,用批判的眼光看待它给出的答案(deepseek还是好用)。

相关文章:

【状态空间方程】对于状态空间方程矩阵D≠0时的状态反馈与滑模控制

又到新的一年啦,2025新年快乐~。前几个月都没更新,主要还是因为不能把项目上的私密工作写进去,所以暂时没啥可写的。最近在山里实习,突然想起年前遗留了个问题一直没解决,没想到这两天在deepseek的加持下很快解决了&am…...

腾讯大数据基于 StarRocks 的向量检索探索

作者:赵裕隆,腾讯大数据研发工程师 本文整理自腾讯大数据工程师在 StarRocks 年度峰会上的分享,深入探讨了向量检索技术的原理与应用。此功能已应用到腾讯内部多个场景,引入 StarRocks 后,业务不仅不需要维护多套数据库…...

Linux系统调用

文章目录 系统调用和POSIX标准系统调用表程序直接访问系统调用新增系统调用 在linux中,内核空间和用户空间之间增加了一个中间层——系统调用层,如下图: 系统内调用层主要作用: 为用户空间程序提供一层硬件抽象接口。保证系统稳定…...

如何在Servlet容器中使用HttpServletResponse?

HttpServletResponse 是 Java Servlet API 中的一个接口,它代表了服务器对客户端的响应。通过 HttpServletResponse 对象,可以设置响应的状态码、发送数据到客户端(如 HTML 页面、文件等)、添加响应头信息等。下面是如何在 Servle…...

SpringCloud - Seata 分布式事务

前言 该博客为Sentinel学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 源码地址:cloud-demo 一、简介 官网:https://seata.apache.org/zh-cn/ Seata …...

Ansible批量配置服务器免密登录步骤详解

一、准备工作 192.168.85.138 安装ansible,计划配置到139的免密 192.168.85.139 待配置免密 1. 生成SSH密钥对 在Ansible控制节点生成密钥对,用于后续免密认证: ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa 全部回车默认,无…...

互联网大厂中面试的高频计算机网络问题及详解

前言 哈喽各位小伙伴们,本期小梁给大家带来了互联网大厂中计算机网络部分的高频面试题,本文会以通俗易懂的语言以及图解形式描述,希望能给大家的面试带来一点帮助,祝大家offer拿到手软!!! 话不多说,我们立刻进入本期正题! 一、计算机网络基础部分 1 …...

人工智能时代下ai智能语音机器人如何以假乱真?

智能语音机器人若要达到以假乱真的效果,需要在以下几个关键方面不断提升: 一、语音合成技术 音色模拟 多维度采样 对大量真人语音样本进行多维度采样,包括不同年龄、性别、地域的人的语音。例如,采集不同年龄段男性从低沉到清亮…...

【橘子ES】Aggregations 聚合准备

一、聚合的概念 聚合文档 聚合区别于检索,检索是使用一系列条件把文档从es中搜索回来。但是聚合则是在搜索回来的文档的基础上进一步进行处理。 简单来说聚合就是将数据汇总为指标、统计数据或其他分析。聚合可以解决以下几类问题: 我的网站的平均加载…...

vue3读取webrtc-stream 视频流

一.首先下载webrtc-stream&#xff0c;方便自己本地搭建视频流服务 https://download.csdn.net/download/cyw8998/90373521 解压后&#xff0c;启动命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代码如下 <template><h1>video</h1><video id&…...

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤&#xff0c;并无gateway详细介绍 gateway详解请查看&#xff1a;SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇&#xff1a; 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…...

2025常用的SEO工具有哪些?

在互联网时代&#xff0c;如何让自己的网站或内容脱颖而出&#xff0c;成为许多企业和个人站长们最关注的问题。而在这个过程中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;作为一种有效的提升网站曝光度和吸引流量的手段&#xff0c;已经成为了网站运营的核心之一。对…...

C++类和对象进阶:运算符重载深度详解

C类和对象进阶&#xff1a;运算符重载 前言引入运算符重载定义语法注意事项重载为全局函数重载为成员函数运算符重载的本质 默认赋值运算符重载(默认成员函数)编译器自己生成的赋值运算符重载函数需要自己实现的场景总结默认赋值运算符重载 拷贝构造函数和赋值重载的区分验证 总…...

Mybatisplus——Mybatisplus3.5.2版本使用Page分页插件查询,records有数据但是total显示0

目录 一、问题背景 debug 执行Mybatisplus使用Page分页插件查询时&#xff0c;发现 Page 里面的records有数据但是total显示0。 二、问题产生的原因 未配置MybatisPlus的分页插件拦截器导致的或者因mybatis-plus版本3.4或3.5版本导致原先的分页插件paginationInterceptor无法…...

C#(Winform)通过添加AForge添加并使用系统摄像机

先展示效果 AForge介绍 AForge是一个专门为开发者和研究者基于C#框架设计的, 也是NET平台下的开源计算机视觉和人工智能库 它提供了许多常用的图像处理和视频处理算法、机器学习和神经网络模型&#xff0c;并且具有高效、易用、稳定等特点。 AForge主要包括: 计算机视觉与人…...

AI使用场景简单测试

前言 今天来分享下AI的2个实用场景&#xff0c;我这里是使用的博主&#xff1a;小虚竹&#xff0c;搭建的AI服务&#xff0c;用的ChatGPT 4O模型&#xff0c;主要是试了3个场景&#xff0c;服装设计、直播带货话术、检验报告分析。 一、服装设计 对于最后需要的裁片设计上的尺寸…...

Linux 配置 MySQL 定时自动备份到另一台服务器

Linux 配置 MySQL 定时自动备份到另一台服务器 前言1、配置服务器通信1.1&#xff1a;配置过程 2、编写自动备份sh脚本文件3&#xff1a;设置定时自动执行 前言 此方案可使一台服务器上的 MySQL 中的所有数据库每天 0 点自动转储为 .sql 文件&#xff0c;然后将文件同步到另一…...

PostgreSQL 备库的延迟问题

目录标题 1. 查看主备状态计算方式&#xff1a;实际情况&#xff1a;举个例子&#xff1a; 2. 查看历史状态3. 分析日志文件4. 查看数据库层面的复制状态5. 检查活动事务6. 检查系统资源7. 检查网络状况8. 检查复制槽状态9. 检查未提交的两阶段事务 要排查 PostgreSQL 备库的延…...

力扣-二叉树-226 翻转二叉树

思路 利用递归的思路 代码 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root nullptr){return root;}swap( root->right, root->left);invertTree(root->left);invertTree(root->right);return root;} };...

基于SpringBoot的在线车辆租赁信息管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的不断发展和人们生活水平的提高&#xff0c;汽车租赁行业迎来了前所未有的发展机遇。传统的汽车租赁方式往往存在流程繁琐、信息不透明等问题&#xff0c;难以满足现代消费者对于便捷、高效服务的需求。因此&…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...