非线性控制4——Back Stepping

2023-11-16

1. 基本思想

 

2. 重要定理

 

3. 实例仿真——单机械臂稳定控制

3.1 模型建立

以单机械臂控制为例,具有参数不确定性的单机械臂的模型如式(3-1)

                                              I\ddot{\theta }+\tilde{d}\dot{\theta }+\mu \theta +mglcos\theta =\tau                                     (3-1)

式中,\theta为机械臂的位置;\dot{\theta }为速度,\ddot{\theta }为加速度;\tau 为电动机给出的驱动力矩,为控制信号输入;m为机械臂的质量;g为重力加速度;2l为机械臂长度,I=\frac{4}{3}ml^{2}为转动惯量;\tilde{d}为黏性摩擦系数;\mu为弹性摩擦系数。其中,\tilde{d}\mu为不确定量。

控制目标:使输出\theta跟随给定的输入\theta_{d},设\theta_{d}是二阶可导的。

将式(3-1)转为为一般形式,便于进行反步计算。设x_{1}=\theta,x_{2}=\dot{\theta },则式(3-1)可写成式(3-2)的形式:

                                              \left\{\begin{matrix} \dot{x}_{1}=x_{2}\\ \dot{x}_{2}=-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau \end{matrix}\right.                        (3-2)

设计目标: 求控制率\tau,使得系统(3-1)的输出\theta跟随给定的输入\theta_{d}

3.2 Back Stepping控制器设计

步骤1:e=x_{1}-x_{1d},则控制目标发生改变,使x_{1}\rightarrow x_{1d},既\theta \rightarrow \theta_{d}

                                     \dot{e} = \dot{x}_{1}-\dot{x}_{1d}=x_{2}-\dot{x}_{1d}                                             (3-3)

此时,我们的目标是让e趋向于0(由式3-2可知,可通过虚拟控制量x_{2}实现e趋于0,问题变为确定所期望的x_{2}表达式)。这个问题可通过Lyapunov直接法解决,现在的问题是寻找一个Lyapunov函数V(e),使得V(e)是正定,而dotV(e)是负定,最终得出e趋向于0时,所期望的x_{2}表达式。

步骤2:选取合适的Lyapunov函数:

                                                V_{1}=\frac{1}{2}e^{2}                                                          (3-4)

则  \dot{V}_{1}=e\dot{e}=e(x_{2}-\dot{x}_{1d})  ,因为希望e趋向于0,所以\dot{V}_{1}需满足负定条件,则可令x_{2}-\dot{x}_{1d}=-k_{1}e(k_{1}> 0),此时

                           \dot{V}_{1}=e\dot{e}=e(x_{2}-\dot{x}_{1d})=-k_{1}e^{2}< 0                                (3-5)

步骤3:通过步骤2中的假设,可确定虚拟控制量x_{2}的期望值,既x_{2d}=\dot{x}_{1d}-k_{1}e(k_{1}> 0)。现在的任务是进一步设计控制器,通过控制率\tau使得当t\rightarrow \infty时,x_{2}\rightarrow x_{2d}(从式3-2可知,x_{2}的值由控制率\tau)。

同理,为实现这一目标,可利用Lyapunov直接法,令\delta =x_{2}-x_{2d},则

\dot{\delta} =\dot{x}_{2}-\dot{x}_{2d} \\=(-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}\dot{e}) \\=(-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))             (3-6)

新的目标使得系统稳定,希望\deltae都趋向于0,找到一个新的Lyapunov函数V(e,\delta )满足正定,同时\dot{V}(e,\delta )是负定。

                                    V_{2}=V_{1}+\frac{1}{2}\delta ^{2}                                                              (3-7)

 则\dot{V}_{2}=\dot{V}_{1}+\delta \dot{\delta },此时\dot{V}_{1}=e\dot{e}=e(x_{2}-\dot{x}_{1d})=e(\delta +x_{2d}-\dot{x}_{1d})=e\delta -k_{1}e^{2},将其带入,可得

                                       \dot{V}_{2}=e\delta -k_{1}e^{2}+\delta \dot{\delta }=-k_{1}e^{2}+\delta (e+\dot{\delta} )               (3-8)

为保证\dot{V}(e,\delta )负定,可令      e+\dot{\delta}=-k_{2}\delta                                                     (3-9)                            

\dot{V}_{2}=-k_{1}e^{2}-k_{2}\delta ^{2}< 0,得证。为确定控制率\tau,将(3-6)带入(3-9)可得

                  e+(-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))=-k_{2}\delta   (3-10)

将(3-10)进行变换可得,最终所要求的控制率\tau如下

                            \tau=I(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))-Ik_{2}\delta-Ie+ (\tilde{d} x_{2}+\mu x_{1 }+mgl\cos x_{1})     (3-11)


Remark:若\tilde{d}\mu为确定的已知参数,则控制器已经设计完毕,但本系统中\tilde{d}\mu为不确定量,所以还需进一步确定\tilde{d}\mu的取值。为解决此问题,可引入自适应控制,将传统的反步控制与自适应控制结合,形成自适应反步控制

3.3 自适应Back Stepping控制器设计

由于\tilde{d}\mu未知,故在式(3-11)中采用估计值替代实际值,则控制率\tau可写成

                   \tau=I(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))-Ik_{2}\delta-Ie+ (\hat{\tilde{d}} x_{2}+\hat{\mu} x_{1 }+mgl\cos x_{1})        (3-12)

其中,\hat{\tilde{d}}为黏性摩擦系数\tilde{d}的估计值,计两者之间的误差为\vartheta_{1}=\tilde{d}-\hat{\tilde{d}}\hat{\mu}为弹性摩擦系数\mu的估计值,计两者之间的误差为\vartheta_{2}=\mu-\hat{\mu}

式(3-12)可替代式(3-11)的前提条件为:\tilde{d}\mu的估计值\hat{\tilde{d}}\hat{\mu}趋近于真实值,因此,问题转换为求解\tilde{d}\mu的估计值\hat{\tilde{d}}\hat{\mu}问题。也就是要确定式(3-12)中\hat{\tilde{d}}\hat{\mu}的准确表达式,只有这样控制率\tau才算确定。为解决这一问题,需要引入自适应控制,常用的技巧是利用系统的状态或者输出量构造系统的自适应率。具体步骤如下:

步骤1:选取合适的Lyapunov函数

因为要确保每个误差量都能收敛到0,所以构造的Lyapunov函数如下:

                                                     V=\frac{1}{2}e^{2}+\frac{1}{2}\delta^{2}+\frac{1}{2}\vartheta_{1}^{2}+\frac{1}{2}\vartheta_{2}^{2}                   (3-13)

其中,e=x_{1}-x_{1d}\delta =x_{2}-x_{2d}\vartheta_{1}=\tilde{d}-\hat{\tilde{d}}\vartheta_{2}=\mu-\hat{\mu}。对上式进行求导,得

                                        \dot{V}=e\dot{e}+\delta \dot{\delta }+\vartheta_{1} \dot{\vartheta_{1}}+\vartheta_{2} \dot{\vartheta_{2}}                                   (3-14)

\dot{V}_{1}=e\dot{e}=e(x_{2}-\dot{x}_{1d})=e(\delta +x_{2d}-\dot{x}_{1d})=e\delta -k_{1}e^{2}

   和  \dot{\delta} =(-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))     带入式(3-14)中,

             \dot{V}=e\dot{e}+\delta \dot{\delta }+\vartheta_{1} \dot{\vartheta_{1}}+\vartheta_{2} \dot{\vartheta_{2}} \\= -k_{1}e^{2}+e\delta+\delta ((-\frac{1}{I} \tilde{d} x_{2}-\frac{1}{I} \mu x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d})))+\vartheta_{1} \dot{\vartheta_{1}}+\vartheta_{2} \dot{\vartheta_{2}}  (3-15)

又因为\vartheta_{1}=\tilde{d}-\hat{\tilde{d}}\vartheta_{2}=\mu-\hat{\mu},既有\tilde{d}=\vartheta_{1}+\hat{\tilde{d}}\mu=\vartheta_{2}+\hat{\mu},将其带入(3-15)中,有 

          \dot{V}= -k_{1}e^{2}+e\delta+\delta ((-\frac{1}{I} (\vartheta_{1}+\hat{\tilde{d}}) x_{2}-\frac{1}{I} (\vartheta_{2}+\hat{\mu}) x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d})))+\vartheta_{1} \dot{\vartheta_{1}}+\vartheta_{2} \dot{\vartheta_{2}}      (3-16)

又因为\tilde{d}\mu虽然未知,但其值固定,所以\dot{\vartheta}_{1}=\dot{\hat{\tilde{d}}}\dot{\vartheta}_{2}=\dot{\hat{\mu}},将其带入上式,可得

          \dot{V}= -k_{1}e^{2}+e\delta+\delta ((-\frac{1}{I} \hat{\tilde{d}} x_{2}-\frac{1}{I} \hat{\mu} x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d})))+\delta (-\frac{1}{I} \vartheta_{1}x_{2}-\frac{1}{I} \vartheta_{2}x_{1})+\vartheta_{1} \dot{\hat{\tilde{d}}}+\vartheta_{2} \dot{\hat{\mu}}

将上式进行整理,可得

        \dot{V}= -k_{1}e^{2}+e\delta+\delta ((-\frac{1}{I} \hat{\tilde{d}} x_{2}-\frac{1}{I} \hat{\mu} x_{1 }-\frac{1}{I} m g l\cos x_{1}+\frac{1}{I} \tau)-(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d})))-\vartheta_{1}(\frac{1}{I}\delta x_{2}+\dot{\hat{\tilde{d}}})-\vartheta_{2}(\frac{1}{I}\delta x_{1}+\dot{\hat{\mu}})      (3-17)

上式可以看成

                                          \dot{V}=\dot{V_{2}}-\vartheta_{1}(\frac{1}{I}\delta x_{2}+\dot{\hat{\tilde{d}}})-\vartheta_{2}(\frac{1}{I}\delta x_{1}+\dot{\hat{\mu}})                                     (3-18)

由前面分析可知,当\tau=I(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))-Ik_{2}\delta-Ie+ (\hat{\tilde{d}} x_{2}+\hat{\mu} x_{1 }+mgl\cos x_{1})时,\dot{V}_{2}<0,所以为了保证\dot{V}<0,则可令

                                       \left\{\begin{matrix} \frac{1}{I}\delta x_{2}+\dot{\hat{\tilde{d}}}=0\\ \frac{1}{I}\delta x_{1}+\dot{\hat{\mu}}=0 \end{matrix}\right.        \Rightarrow         \left\{\begin{matrix} \dot{\hat{\tilde{d}}}=-\frac{1}{I}\delta x_{2}\\ \dot{\hat{\mu}}=-\frac{1}{I}\delta x_{1} \end{matrix}\right.                                       (3-19)

最终结果:

           \tau=I(\ddot{x}_{1d}-k_{1}(x_{2}-\dot{x}_{1d}))-Ik_{2}\delta-Ie+ (\hat{\tilde{d}} x_{2}+\hat{\mu} x_{1 }+mgl\cos x_{1})\dot{\hat{\tilde{d}}}=-\frac{1}{I}\delta x_{2}\dot{\hat{\mu}}=-\frac{1}{I}\delta x_{1}时,

闭环系统e\delta\vartheta_{1}\vartheta_{2}均趋于零,系统渐近稳定。

 

3.4 基于MATLAB的系统仿真

根据上述推导,可搭建如下的simulink仿真图。

         

                                                                                图1 仿真结构框图

实验结果如图2和图3所示,其中,图2为期望的位置和实际位置,图3为两者之间的误差。

                         

                                   图2 期望位置与实际位置                                                  图3 位置误差                                                          

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非线性控制4——Back Stepping 的相关文章

  • pickle与.pkl文件

    经常遇到在Python程序运行中得到了一些字符串 列表 字典等数据 想要保存下来 长长久久的 方便以后使用 这个时候Pickle模块就派上用场了 pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持
  • mipi介绍

    文章目录 1 MIPI简介 1 1 DSI layer 2 D PHY 2 1 D PHY介绍 2 2 电平状态 2 3 lane结构 2 4 data lane操作模式 2 4 1 escape mode和space one hot co
  • kylin启动netstat: n: unknown or uninstrumented protocol

    检查hadoop配置的时候出现问题 报错如下 lcc lcc apache kylin 2 6 0 hbase1x bin check env sh Retrieving hadoop conf dir KYLIN HOME is set
  • 史上最快的实例分割SparseInst Int8量化实录

    近期 YOLOv7里面借鉴 复 制 粘 贴 了一个新的模型 SparseInst 我借助YOLOv7的基建能力 将其导出到了ONNX 获得了一个非常不错的可以直接用OnnxRuntime 或者TensorRT跑的实例分割 后续也可能把lin
  • 数据挖掘十大算法

    参考 ICDM 数据挖掘十大算法
  • flutter 去除超出警报

    给超出内容套上SingleChildScrollView组件即可 SingleChildScrollView child
  • wpf datagrid自动生成列时特殊字符转换

    DataGrid控件可以根据DataTable自动生成行和列 但是如果列名包括一些特殊字符 的时候 会出现无法显示出数据或者显示DataRowView的情况 原因是这些字符是Xaml里用来标识绑定path和xpath的符号 例如我们会这么用

随机推荐

  • C语言补漏:字符串指针与字符数组传参

    字符串指针与字符数组传参 深信服的笔试上被吊打 其中对一道用指针做形参的题目印象十分深刻 借此恶补了一晚上指针 今天总结 以作警示 试想有如下情形 将一个字符串指针做形参赋值函数修改其字符串 函数结束后字符串被改变了吗 include
  • 快速上手Gobject

    转自 http blog csdn net acs713 article details 7778051 What is G object 很多人被灌输了这样一种概念 要写面向对象程序 那么就需要学习一种面向对象编程语言 例如C Java
  • chrome扩展开发调试

    chrome扩展由content scripts browser actions background等多个部分组成 其中 content scripts属于注入web页面 所以在contentscripts中的console log会被正
  • Uncaught TypeError: AMap.MarkerClusterer is not a constructor

    实验点聚合时报错 cluster new AMap MarkerClusterer map markers styles sts gridSize 80 改为 map plugin AMap MarkerClusterer function
  • SQL语法基础

    SQL语法基础 SQL语法基础 SQL 是用于访问和处理数据库的标准的计算机语言 SQL 语句 需要在数据库上执行的大部分工作都由 SQL 语句完成 tips SQL 对大小写不敏感 SELECT 与 select 是相同的 一些最重要的
  • 【每周一个编程技巧 - Java笔记】玩转SSM:SpringBoot+Mybatis多条件筛选

    SpringBoot Mybatis多条件筛选 在实际的业务开发系统中 做的最多的工作就是增 删 改 查操作 而这部分增 删 改 查的操作中又有80 的都是查询操作 本文记录的主要内容是 基于SpringBoot和Mybatis来实现条件查
  • tesseract-orc编译及使用(WINDOWS VS 2019)

    1 准备资源 Vs2010或者更高版本 本教程使用vs2019 1 1Tesseract源码 分支切换到3 04 看到vs2010 git地址https github com tesseract ocr tesseract下载源码 文件夹并
  • 关于 Demo_Ocean 例子的分析

    关于 Demo Ocean 例子的分析 重要总结 1 该例主要类不再继承自ExampleApplication和ExampleFrameListener 重写驱动类和监听类 2 如何创建OIS的输入系统 1 创建OIS ParamList
  • Arduino与人体感应模块

    工具 1 Arduino 开发板 1 2 人体感应模块传感器 1 这个人体感应传感器有三个引脚 分别是VCC OUT GND 同之前的红外线传感器一样输出的是数字信号 所以要将OUT接入digital pwm引脚 这里我接入3号引脚 下面是
  • sql排序,数据库字段设置为varchar导致排序失效

    一般情况下 我们在表设置排序字段都是int 对应的sql查询 也就只需要order by xx desc 但是总有一些老项目 由于会因为各种原因 导致出现此字段为varchar情况 这种情况我们应该怎么排序呢 ex g Ex state 0
  • 1、shell 基础进阶系列文章

    shell 基础进阶系列文章 目录 第一章 shell本质 第二章 shell2 第三章 shell3 第一章 shell认知 shell 基础进阶系列文章 前言 一 shell基础 1 shell脚本的本质 2 shell编译的基本步骤
  • zabbix监控数据转存与处理

    zabbix是一个基于WEB页面的分布式系统监控方案 能够监控各类资产并提供灵活的通知功能 同时能够运行在各种流行系统中 zabbix分为zabbix server和zabbix agent端 zabbix server可以单独远程监控服务
  • 美图全链路监控实战

    一 摘要 本文内容分为3部分 首先简单介绍了美图的业务背景和监控体系 然后是两个美图的监控实践 基于Grafana FlowCharting插件的 监控大盘 实战和基于基于GrafanaImageRender 企业微信机器人的 图文告警 实
  • JS 12——内置对象Math的方法

    1 Math 是一个内置对象 不是一个函数对象 2 Math 作为内置对象 拥有一些数学常数属性和数学函数方法 3 如果Math 用于 Number 类型 它不支持 BigInt 4 Math 的所有属性是静态的 Math方法也全部都是静态
  • 在AndroidStudio中如何查看Gradle的版本

    以Android Studio Giraffe 2022 3 1为例 File gt Project Structure gt Project Android Gradle Plugin Version Android Gradle插件版本
  • WEB程序员需要掌握的十大MySQL优化技巧

    51CTO独家特稿 WEB开发者不光要解决程序的效率问题 对数据库的快速访问和相应也是一个大问题 希望本文能对大家掌握MySQL优化技巧有所帮助 1 优化你的MySQL查询缓存 在MySQL服务器上进行查询 可以启用高速查询缓存 让数据库引
  • cookie,session,token区别

    cookie session token区别 前提 用户登陆一次以后下次不会再输入密码 核心的概念就是存储 cookie流程 浏览器发起http请求 服务器会进行cookie设置 服务器会进行cookie设置 也就是set cookie 服
  • 用Python完成毫秒级抢单,助你秒杀淘宝大单

    目录 0 引言 1 环境 2 需求分析 前期准备 3 淘宝购物流程回顾 4 秒杀的实现 5 代码梳理 6 总结 0 引言 年中购物618大狂欢又要开始了 各大电商又开始了大力度的折扣促销 如何做到更省钱的剁手呢 今天给大家提供一种思路 用P
  • java宏定义三目运算define_宏定义的正确写法,三目运算的宏定义

    第一阶段 对象宏 define M PI 3 14159265358979323846264338327950288 函数宏 define PLUS x y x y 正确的认识宏 三目运算的宏定义 1 小白写法 define MIN A B
  • 非线性控制4——Back Stepping

    1 基本思想 2 重要定理 3 实例仿真 单机械臂稳定控制 3 1 模型建立 以单机械臂控制为例 具有参数不确定性的单机械臂的模型如式 3 1 3 1 式中 为机械臂的位置 为速度 为加速度 为电动机给出的驱动力矩 为控制信号输入 为机械臂