MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制

2023-05-16

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制

  • MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制
    • 1 前言
    • 2 系统模型
    • 3 控制器设计
      • 3.1 位置跟踪子系统
      • 3.2 速度跟踪子系统
      • 3.3 关于滑模面
    • 4 仿真结果

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制

由于最近准备做一些真机实飞的工作,需要的一些更稳定的控制方法,姿态环的串级控制性能较好,主要体现在超调量较小,相比于以前的控制方法能有更好的性能,同时也作为我自己的笔记。
以前的控制方法:
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(3) 无人机控制器设计(非PID).
F250仿真模型:
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(5) F250旋翼仿真搭建.
https://github.com/mkb9559/F250Sim
F250Demo.
方法参考自:
[1]陈剑, 杜红彬. 四旋翼飞行器串级姿态稳定性优化控制研究[J]. 计算机仿真, 2017, 34(9):6.

1 前言

本博客需要一些现代控制理论中Lyapunov稳定性的一些理论知识。
您需要对滑模控制有一个初步的了解,可以参考:
[滑模控制器浅述] (1) 二阶系统的简单滑模控制器设计

下面将从一个最简单的二阶系统开始进行公式的推导,以方便理解,这个方法可以扩展到姿态控制器设计,应用到姿态控制也仅仅是代入系统动力学那一步代入的动力学模型不同而已。

2 系统模型

考虑二阶系统:
x ¨ = u \ddot{x}=u x¨=u

3 控制器设计

这个二阶系统将由两个控制器串联而成,其分别掌管速度控制和位置控制。

3.1 位置跟踪子系统

首先考虑位置跟踪控制,控制目标是跟踪期望位置 x d {x}_{d} xd.

考虑滑模面:
s 1 = e 1 + c 1 ∫ 0 t e 1 d τ {{s}_{1}}={{e}_{1}}+{{c}_{1}}\int_{0}^{t}{{{e}_{1}}d\tau } s1=e1+c10te1dτ其中 c 1 > 0 {c}_{1}>0 c1>0, e 1 = x d − x {{e}_{1}}={{x}_{d}}-x e1=xdx为位置偏差,这里考虑的滑模面带积分项,目的是能够抗一定的外部恒定扰动,如机架非对称造成的质心偏离等,删除此项也是可以的,关于滑模面会在后面具体详细分析。
注:根据笔者测试,位置子系统控制速度,没有外部干扰,不带积分项较好,即 c 1 = 0 {c}_{1}=0 c1=0,而速度跟踪子系统会受到外力矩干扰,需要带上该积分项
考虑速度 v v v应当跟踪速度指定 v d {{v}_{d}} vd,从而有速度偏差 v e = v d − v {{v}_{e}}={{v}_{d}}-v ve=vdv,其中 v = x ˙ v=\dot{x} v=x˙
那么,容易得到
x ˙ = v = v d − v e \dot{x}=v={{v}_{d}}-{{v}_{e}} x˙=v=vdve对滑模面求导:
s ˙ 1 = e ˙ 1 + c 1 e 1 = x ˙ d − x ˙ + c 1 e 1 {{\dot{s}}_{1}}={{\dot{e}}_{1}}+{{c}_{1}}{{e}_{1}}={{\dot{x}}_{d}}-\dot{x}+{{c}_{1}}{{e}_{1}} s˙1=e˙1+c1e1=x˙dx˙+c1e1替换 x ˙ \dot{x} x˙,使得上式出现速度指令 v d {{v}_{d}} vd
s ˙ 1 = x ˙ d − x ˙ + c 1 e 1 = x ˙ d − v d + v e + c 1 e 1 {{\dot{s}}_{1}}={{\dot{x}}_{d}}-\dot{x}+{{c}_{1}}{{e}_{1}}={{\dot{x}}_{d}}-{{v}_{d}}+{{v}_{e}}+{{c}_{1}}{{e}_{1}} s˙1=x˙dx˙+c1e1=x˙dvd+ve+c1e1
考虑稳定性:
V 1 = 1 2 s 1 s 1 {{V}_{1}}=\frac{1}{2}{{s}_{1}}{{s}_{1}} V1=21s1s1
求导:
V ˙ 1 = s 1 s ˙ 1 = s 1 ( x ˙ d − v d + v e + c 1 e 1 ) \begin{aligned} & {{{\dot{V}}}_{1}}={{s}_{1}}{{{\dot{s}}}_{1}} \\ & ={{s}_{1}}\left( {{{\dot{x}}}_{d}}-{{v}_{d}}+{{v}_{e}}+{{c}_{1}}{{e}_{1}} \right) \end{aligned} V˙1=s1s˙1=s1(x˙dvd+ve+c1e1)可以令
v d = x ˙ d + c 1 e 1 + k 1 s 1 {{v}_{d}}={{\dot{x}}_{d}}+{{c}_{1}}{{e}_{1}}+{{k}_{1}}{{s}_{1}} vd=x˙d+c1e1+k1s1其中 k 1 > 0 {k}_{1}>0 k1>0,此时
V ˙ 1 = s 1 s ˙ 1 = s 1 ( x ˙ d − v d + v e + c 1 e 1 ) = − k 1 s 1 2 + s 1 v e \begin{aligned} & {{{\dot{V}}}_{1}}={{s}_{1}}{{{\dot{s}}}_{1}} \\ & ={{s}_{1}}\left( {{{\dot{x}}}_{d}}-{{v}_{d}}+{{v}_{e}}+{{c}_{1}}{{e}_{1}} \right) \\ & =-{{k}_{1}}s_{1}^{2}+{{s}_{1}}{{v}_{e}} \end{aligned} V˙1=s1s˙1=s1(x˙dvd+ve+c1e1)=k1s12+s1ve当系统的速度跟踪上了速度指令,即 x ˙ → v d \dot{x}\to {{v}_{d}} x˙vd,即 v e → 0 {{v}_{e}}\to 0 ve0时,有 V ˙ 1 = − k 1 s 1 2 ≤ 0 {{\dot{V}}_{1}}=-{{k}_{1}}s_{1}^{2}\le 0 V˙1=k1s120,那么,位置跟踪子系统渐进稳定。如何让系统的速度跟踪上速度指令就是下面速度跟踪子系统的任务了。

可以看出,位置子系统的收敛性能收到了速度子系统收敛的影响,因此,一般期望速度子系统的收敛速度要快于位置子系统,这可以通过较大的控制增益实现。

值得一提的是, v d {{v}_{d}} vd x ˙ d {{\dot{x}}_{d}} x˙d是不同的量,前者表示输入给系统的期望速度指令,是根据控制器设计计算得到的;而后者是与给定的期望轨迹相关。譬如:给定一个定点,那么期望速度 x ˙ d {{\dot{x}}_{d}} x˙d一直是0,但是由于系统要加速减速移动到期望位置,那么期望速度指令 v d {{v}_{d}} vd肯定不会恒为0。

3.2 速度跟踪子系统

考虑速度跟踪控制,控制目标是跟踪前面计算出来的期望速度指令 v d {v}_{d} vd.
相似地,考虑滑模面:
s 2 = e 2 + c 2 ∫ 0 t e 2 d τ {{s}_{2}}={{e}_{2}}+{{c}_{2}}\int_{0}^{t}{{{e}_{2}}d\tau } s2=e2+c20te2dτ其中 c 2 > 0 {c}_{2}>0 c2>0 e 2 = v d − x ˙ {{e}_{2}}={{v}_{d}}-{\dot{x}} e2=vdx˙为速度偏差。
对滑模面求导:
s ˙ 2 = e ˙ 2 + c 2 e 2 = x ¨ d − x ¨ + c 2 e 2 {{\dot{s}}_{2}}={{\dot{e}}_{2}}+{{c}_{2}}{{e}_{2}}={{\ddot{x}}_{d}}-\ddot{x}+{{c}_{2}}{{e}_{2}} s˙2=e˙2+c2e2=x¨dx¨+c2e2下面代入动力学模型,如果是不同的系统,这一步需要有所改变:
s ˙ 2 = e ˙ 2 + c 2 e 2 = x ¨ d − u + c 2 e 2 {{\dot{s}}_{2}}={{\dot{e}}_{2}}+{{c}_{2}}{{e}_{2}}={{\ddot{x}}_{d}}-u+{{c}_{2}}{{e}_{2}} s˙2=e˙2+c2e2=x¨du+c2e2考虑稳定性:
V 2 = 1 2 s 2 s 2 {{V}_{2}}=\frac{1}{2}{{s}_{2}}{{s}_{2}} V2=21s2s2
求导:
V ˙ 2 = s 1 s ˙ 2 = s 2 ( x ¨ d − u + c 2 e 2 ) \begin{aligned} & {{{\dot{V}}}_{2}}={{s}_{1}}{{{\dot{s}}}_{2}} \\ & ={{s}_{2}}\left({{\ddot{x}}_{d}}-u+{{c}_{2}}{{e}_{2}}\right) \end{aligned} V˙2=s1s˙2=s2(x¨du+c2e2)可以令
u = x ¨ d + c 2 e 2 + k 2 s 2 {u}={{\ddot{x}}_{d}}+{{c}_{2}}{{e}_{2}}+{{k}_{2}}{{s}_{2}} u=x¨d+c2e2+k2s2其中 k 2 > 0 {k}_{2}>0 k2>0,此时
V ˙ 2 = − k 2 s 2 2 ≤ 0 {{\dot{V}}_{2}}=-{{k}_{2}}s_{2}^{2}\le 0 V˙2=k2s220系统渐进稳定。

3.3 关于滑模面

考虑如下形式的滑模面:
s = e + c ∫ 0 t e d τ {s}={e}+{c}\int_{0}^{t}{{e}d\tau } s=e+c0tedτ从结论而言,当抵达滑模面后 s = 0 {s}=0 s=0,状态量能够收敛,即 e → 0 {e}\to 0 e0。而如何抵达该滑模面,已经由上面设计的控制器实现。
考虑抵达滑模面的情形,此时 s = 0 {s}=0 s=0,有
0 = e + c ∫ 0 t e d τ 0={e}+{c}\int_{0}^{t}{{e}d\tau } 0=e+c0tedτ对该方程微分,得:
e ˙ + c e = 0 \dot{e}+ce=0 e˙+ce=0
关于这个形式在以前的博客中已经分析,其收敛时间为 ∞ \infty
详见下文中会普通滑模收敛性能分析:
[滑模控制器浅述] (4) Terminal滑模简述及其与普通滑模收敛速度比较

当然选择如下不带积分的简单滑模面前文的控制设计方法也是可行的,只是抗慢变干扰能力会有所下降。
s = e {s}={e} s=e

4 仿真结果

设置参数: c 1 = 0 {c}_1=0 c1=0 k 1 = 4 k_1=4 k1=4 c 2 = 1 c_2=1 c2=1 k 2 = 10 k_2=10 k2=10,考虑机架结构非对称,结果如下:
在这里插入图片描述

速度指令跟踪
在这里插入图片描述

位置跟踪
可以看到几乎没有超调。

如果使用简单的PD控制则会出现静差
在这里插入图片描述

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

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制 的相关文章

  • nvidia-smi出现的比较慢

    一个比较老的问题 xff0c 一般四卡以上的机器可能会出现 以前我都是 nvidia span class hljs attribute smi span span class hljs attribute pm span span cla
  • 【tensorflow】tensorflow的安装及应用

    安装tensorflow的三种方法 1 在cmd命令行中输入pip install tensorflow xff0c 默认安装最新版 2 其他旧版本的安装 xff0c 去pypi org官网 可以点击release history选择想要的
  • 汇编:stmdb和ldmia指令

    参考了网上一些文章 xff0c 简单说一下stmdb和ldmia指令的作用 xff0c 如有错误欢迎指正 首先一句话说一下stmdb和ldmia指令 的作用 xff1a stmdb和ldmia指令一般配对使用 xff0c stmdb用于将寄
  • ARM 内联汇编 加速 算法

    首推移动端arm cpu优化学习笔记第4弹 内联汇编入门 xff0c 但是其只给出了代码 xff0c 很多人还不知道怎么在手机上跑起来 xff0c 其实只需要一个CMakeLists txt就可以了 cmake minimum requir
  • centos7.3环境编译安装pktgen-dpdk,dpdk工具

    概述编译环境编译DPDK编译Pktgen dpdkDebug 概述 DPDK xff08 Date Plane Development Kit xff09 主要基于Linux系统运行 xff0c 用于快速数据包处理的函数库与驱动集合 xff
  • 捷联惯导算法心得

    1 四个概念 xff1a 地理 坐标系 机体 坐标系 他们之间换算公式 换算公式用的系数 地理坐标系 xff1a 东 北 天 xff0c 以下简称 地理 在这个坐标系里有重力永远是 xff08 0 0 1g xff09 xff0c 地磁永远
  • Java中的域,静态域,实例域

    域 所谓的域 xff0c 是field的翻译 xff0c 也就是我们常说的字段 xff0c 或者属性 比如类的字段 xff08 属性 xff09 xff0c 局部的 xff0c 全局的 静态域 也就是静态属性 xff0c 我们可以单独为它设
  • 【线程篇】线程间同步之信号量、互斥锁

    线程 xff1a 进程内部的一条执行路径 xff08 序列 xff09 什么是线程什么是进程 xff0c 进程和线程的区别 xff1f 进程是一个正在运行的程序 xff0c 是系统进程资源分配的基本单位 线程是进程内部的一条执行路径 xff
  • PL/SQL报错:无法解析指定的连接标识符

    在安装oracle的时候PL SQL报错 xff1a ORA 12154 TNS 无法解析指定的连接标识符 xff0c 在网上找了很多资料 xff0c 然后问题解决 其中下面的文章分析的过程很值得学习 xff0c 特地转载过来时刻告诫自己全
  • 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)

    文章目录 一 问题二 解决方法 xff08 1 xff09 在chrome中获得cookies xff08 2 xff09 安装配置charles 三 另外的方法参考 idm的使用教程参考 xff1a 一 问题 使用idm下载文件出现如下问
  • 四旋翼飞行器数学建模+轨迹跟踪控制

    数学模型 xff08 状态空间方程 xff09 xff1a 控制算法 有限时间 xff08 finite time control xff09 控制 xff0c 文献 1 xff1b 比例 微分 xff08 PD xff09 控制 xff0
  • 卡尔曼滤波算法总结

    自己学习整理卡尔曼滤波算法 xff0c 从放弃到精通 kaerman 滤波算法 卡尔曼滤波是非常经典的预测追踪算法 xff0c 是结合线性系统动态方程的维纳滤波 xff0c 其实质是线性最小均方差估计器 xff0c 能够在系统存在噪声和干扰
  • 做嵌入式驱动的前途何在

    做嵌入式驱动的前途何在 做嵌入式linux驱动的前途何在 xff1f 或者说 xff0c 怎么才能做好这一行 xff1f 我做嵌入式驱动开发已经一年多了 xff0c 感觉没学到多少东西 从网络驱动到CAN驱动 从dataflash驱动到NA
  • 串口通信的调试01

    在开发中 xff0c 我们经常遇到这种情况 xff0c 供应商给了一台仪器 xff0c 然后仪器配套有软件 我们通过点击按钮往仪器发送命令 xff0c 仪器返回数据 有些时候 xff0c 我们希望可以通过自己编写的软件来操作仪器 xff0c
  • Linux驱动程序开发之三----按键驱动(Tiny6410)

    在Linux驱动程序开发之三 按键驱动 xff08 Tiny6410 xff09 博文中讨论了使用中断来实现按键驱动 xff0c 毫无疑问 xff0c 中断方式效率相当高 xff0c 但是在此之前 xff0c CPU要想获知按键的状态都是通
  • 飞控信号SBUS信号解析为PWM信号输出

    飞控信号SBUS信号解析为PWM信号输出 1 修改STM32时钟频率 xff1a static void SetSysClockTo72 void IO uint32 t StartUpCounter 61 0 HSEStatus 61 0
  • GTSAM 的使用

    GTSAM 的使用 GTSAM 是一个在机器人领域和计算机视觉领域用于平滑 xff08 smoothing xff09 和建图 xff08 mapping xff09 的C 43 43 库 它与 g 2 o 不同的是 xff0c g 2 o
  • ROS智能车实现darknet_ros检测物体

    文章目录 一 搭建智能车环境1 下载包以及编译1 1 下载源码包1 2 编译1 3 错误解决 xff08 1 xff09 controllers相关 xff08 2 xff09 driver base相关 xff08 3 xff09 ack
  • 使用Vant完成DatetimePicker 日期的选择器

    效果展示 xff1a 代码展示 xff1a lt template gt lt div id 61 34 date time picker 34 gt lt van button plain type 61 34 primary 34 64
  • 拜访谭浩强老先生

    本月 22日 邀请各大高校计算机专业的院长 教授 xff08 谭浩强 王移芝 陈明 杨小平 王立柱 郑莉 等等 xff09 前来我校参观指导 xff0c 尤其是对我们的 信息技术提高班 进行深入的了解 得知前几天中国计算机界泰斗级人物谭浩强

随机推荐