《机器人控制系统和MATLAB simulink仿真》笔记1:认识S函数

2023-11-14

前言

最近在看控制的东西,想动手实践一下,看到有书名曰《机器人控制系统和MATLAB simulink仿真》,于是学习一下做做记录。

1.认识对象:机器人动力学系统的特性

考虑一个关节机器人,其动态性能可由二阶非线性微分方程描述:

M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) + F ( q ˙ ) + τ d = τ \boldsymbol{M}(\boldsymbol{q}) \ddot{\boldsymbol{q}}+\boldsymbol{C}(\boldsymbol{q}, \dot{\boldsymbol{q}}) \dot{\boldsymbol{q}}+\boldsymbol{G}(\boldsymbol{q})+\boldsymbol{F}(\dot{\boldsymbol{q}})+\boldsymbol{\tau}_{\mathrm{d}}=\boldsymbol{\tau} M(q)q¨+C(q,q˙)q˙+G(q)+F(q˙)+τd=τ

其中, q ∈ R n \boldsymbol{q}\in \mathbb{R} ^n qRn为关节角位移量, M ( q ) ∈ R n × n \boldsymbol{M}(\boldsymbol{q})\in\mathbb{R} ^{n\times n} M(q)Rn×n为机器人的惯性矩阵, C ( q , q ˙ ) q ˙ ∈ R n \boldsymbol{C}(\boldsymbol{q}, \dot{\boldsymbol{q}})\dot{\boldsymbol{q}}\in \mathbb{R}^n C(q,q˙)q˙Rn表示离心力和哥氏力, G ( q ) ∈ R n \boldsymbol{G}(\boldsymbol{q})\in \mathbb{R}^n G(q)Rn为重力项, F ( q ˙ ) ∈ R n \boldsymbol{F}(\dot{\boldsymbol{q}})\in\mathbb{R}^n F(q˙)Rn表示摩擦力矩, τ ∈ R n \boldsymbol{\tau}\in\mathbb{R}^n τRn为控制力矩, τ d ∈ R n \boldsymbol{\tau}_{\mathrm{d}}\in \mathbb{R}^n τdRn为外加扰动。

机器人系统的动力学特性为:

在这里插入图片描述
(书中没有对这些特性严格地证明,后面还得再琢磨一下)

2.S函数

2.1 S函数简介

S函数是Simulink的重要部分,它为Simulink环境下的仿真提供了强有力的拓展能力。它用文本方式输入公式和方程,适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真参数进行更精确的描述。机器人控制系统的Simulink仿真中,可以使用S函数来实现控制律、自适应律和被控对象的描述

2.2 S函数使用步骤

一般而言,S函数的使用步骤如下:

(1)创建S函数源文件。创建S函数源文件有多种方法,Simulink提供了很多S函数模板和例子,用户可以根据自己的需要修改相应的模板或例子即可。

(2)在动态系统的Simulink模型框图中添加S-function模块,并进行正确的设置。

(3)在Simulink模型框图中按照定义好的功能连接输入输出端口。为了方便S函数的使用和编写,Simulink的Functions&.Tables模块库还提供了S-functiondemos模块组,该模块组为用户提供了编写S函数的各种例子,以及S函数模板模块。

2.3 S函数的基本功能及重要参数

S函数的基本功能及重要参数设定如下:

(1)S函数功能模块:各种功能模块完成不同的任务,这些功能模块(函数)称为仿真例程或回调函数(call-back functions),包括初始化(initialization)、导数(mdlDerivative)、输出(mdlOutput)等。

(2)NumContStates表示S函数描述的模块中连续状态的个数。

(3)NumDiscStates表示离散状态的个数。

(4)NumOutputs和NumInputs分别表示模块输出和输入的个数。

(5)直接馈通(dirFeedthrough)为输入信号是否在输出端出现的标识,取值为0或1.例如,形如 y = k × u y=k×u y=k×u的系统需要输入(即直接反馈),其中, u u u是输入, k k k是增益, y y y是输出,形如等式 y = x , x = u ˙ y=x,x=\dot{u} y=x,x=u˙的系统不需要输入(即不存在直接反馈),其中, x x x是状态, u u u是输入, y y y为输出。
在这里插入图片描述

(6)NumSampleTimes为模块采样周期的个数,S函数支持多采样周期的系统。

除了sys外,还应设置系统的初始状态变量 x o x_o xo、说明变量 s t r str str和采样周期变量 t s t_s ts。t变量为双列矩阵,其中每一行对应一个采样周期。对连续系统和单个采样周期的系统来说,该变量为 [ t 1 , t 2 ] [t_1,t_2] [t1,t2], t 1 t_1 t1为采样周期, t 1 = − 1 t_1=-1 t1=1表示继承输入信号的采样周期, t 2 t_2 t2为偏移量,一般取为 0 0 0。对继承输入信号的采样周期的连续系统来说, t t t取为 [ 一 1 , 0 ] [一1,0] [1,0]

有关采样周期变量的含义更详细的摘录官方文档的内容:在这里插入图片描述
采样周期的取值
在这里插入图片描述
如何选择采样时间:
在这里插入图片描述

关于以上dirFeedthroug和NumSampleTimes的内容可以参考官方文档理解得更详细:

S-Function Concepts

2.4 S函数的使用实例

以下面的公式为例

J θ ¨ = u + d ( t ) J \ddot{\theta}=u+d(t) Jθ¨=u+d(t)

u u u为控制输入, d ( t ) d(t) d(t)为加在控制输人端的扰动,模型输出为角度 θ \theta θ和角速度 θ ˙ \dot{\theta} θ˙ J J J是转动惯量,模型描述为:

x ˙ 1 = x 2 x ˙ 2 = 1 J ( u + d ( t ) ) \begin{array}{l} \dot{x}_{1}=x_{2} \\ \dot{x}_{2}=\frac{1}{J}(u+d(t)) \end{array} x˙1=x2x˙2=J1(u+d(t))

其中 x 1 = θ , x 2 = θ ˙ x_{1}=\theta, x_{2}=\dot{\theta} x1=θ,x2=θ˙是状态变量。

2.4.1 模型初始化Initialization函数

上述动力学方程是1输入2输出系统,角度 θ \theta θ和角速度 θ ˙ \dot{\theta} θ˙的初始值为0,模型初始化参数为[0,0],模型初始化S函数为:

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;%连续状态个数为2:x_1和x_2,因为采用连续采样周期仿真
sizes.NumDiscStates  = 0;%离散状态个数为0
sizes.NumOutputs     = 2;%输出量为2个:角度和角速度
sizes.NumInputs      = 1;%输入量为1个,u
sizes.DirFeedthrough = 0;%方程中输入没有直馈于输出
sizes.NumSampleTimes = 1;%采样周期数是1
sys = simsizes(sizes);
x0=[0,0]:%初始化输出值角度和角速度都是0
str=[]:%无其他说明
ts=[0 0]:%连续采样,第一个值为0,没有偏移,第二个值也设为0

2.4.2 微分方程描述的mdlDerivative函数

该函数可用于描述微分方程并实现数值求解。在控制系统中,可采用该函数来描述,被控对象和自适应律等,并通过Simulink环境下选择数值分析方法(如ODE方法)实现模型的数值求解。取 J = 2 J=2 J=2, d ( t ) = sin ⁡ t d(t)=\sin t d(t)=sint,则采用S函数可实现该模型角度 θ \theta θ和角速度 θ ˙ \dot{\theta} θ˙的求解,描述如下:

function sys=mdlDerivatives(t,x,u)%sys
J=2;
dt=sin(t);
ut=u(1);
sys(1)=x(2):%左边的sys是状态变量的导数
sys(2)=1/J (ut+dt);

2.4.3 用于输出的mdlOutput函数

S函数的mdlOutput函数通常用于描述控制器或模型的输出。采用S函数的mdlOutput模块来描述模型角度 θ \theta θ和角速度 θ ˙ \dot{\theta} θ˙的输出:

function sys=mdlOutputs(t,x,u)
sys(1)=x(1):
sys(2)=x(2):

其他关于S函数的详细案例可以参考我的另一个博客Matlab simulink上手控制仿真学习笔记3-常用模块S Function及使用案例

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

《机器人控制系统和MATLAB simulink仿真》笔记1:认识S函数 的相关文章

  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • 通过多次合并相同的行向量来构建矩阵

    有没有一个matlab函数可以让我执行以下操作 x 1 2 2 3 然后基于x我想建立矩阵m 1 2 2 3 1 2 2 3 1 2 2 3 1 2 2 3 您正在寻找REPMAT http www mathworks com help t
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open

随机推荐

  • 两种方法利用CUDA实现矩阵乘法

    方法一 自己写 创建 cu文件 include
  • 常见的算法思想,全在这里了

    常见的算法思想 1 贪心 贪心算法有很多经典的应用 比如霍夫曼编码 Huffman Coding Prim 和 Kruskal 最小生成树算法 还有 Dijkstra 单源最短路径算法 解决问题步骤 第一步 当我们看到这类问题的时候 首先要
  • 20190708三天总结zrb

    20190705 操作系统 对硬件的第一次扩充 Release 正式版本 内核都为Linux 外观可能使各个品牌 swap 交换分区 1024 2048 根目录 剩余的空间 boot 启动分区 520 1024 虚拟机安装 temp 临时文
  • Vue实现浙政钉扫码登陆(前端部分)

    效果 浙政钉app扫码实现登陆系统 参考文档 浙政钉 H5 小程序应用采集开发手册 语雀 专有钉钉门户 div class login 2code div
  • SpringBoot系列笔记一——SpringBoot项目结构

    SpringBoot 简介 Spring Boot 是一个框架 一种全新的编程规范 他的产生简化了框架的使用 所谓简化是指简化了 Spring 众多框架中所需的大量且繁琐的配置文件 所以 Spring Boot 是一个服 务于框架的框架 服
  • ts自动编译声明文件_webstorm配置TS运行时环境与自动给编译

    webstorm配置TS运行时环境与自动编译 Step 1 安装TypeScipt npm i typescript g Step 2 设置webstorm language Step 3 设置File Watch 添加file watch
  • 针对搜索引擎爬虫的欺骗式SSR

    玩Google Webmasters的可能会有这种经历 自己开发的app用了Vue React 写完后用Fetch as Google一爬傻眼了 爬不到东西 网上搜解决方案出来的都是一堆额外的SSR框架 要上node 还看起来麻烦的要死 对
  • 超清晰-数据结构之线性表

    鸟哥说 坚持学习基础才能有出人头地的一天 不能只专注于练武功了 内功也得练 本篇文章是讲数据结构的第一篇 跟着书好好再过一篇基础 一 线性表 线性表是n个数据特性相同的元素的组成有限序列 是最基本且常用的一种线性结构 线性表 栈 队列 串和
  • 安卓蓝牙广播大全

    android bluetooth 提供了皆如扫描设备 连接设备以及对设备间的数据传输进行管理的类 这些类对蓝牙设备进行功能性管理 蓝牙模块API提供的应用包括了 扫描其它蓝牙设备 通过查询本地蓝牙适配器来匹配蓝牙设备 建立RFCOMM 无
  • layui 附件上传、预览、删除、下载

    layui在开发文档中提供了 附件上传的方法upload render 此篇文章在此模块基础方法上扩展补充了附件预览 删除 下载的实现方法 具体如下 layui 文件 图片上传 layui 相册层 一 html div class layu
  • [无线通信基础-13]:图解移动通信技术与应用发展-1-概述

    前言 移动通信 Mobile communication 是移动体之间的通信 或移动体与固定体之间的通信 移动体可以是人 也可以是汽车 火车 轮船 收音机等在移动状态中的物体 移动通信是进行无线通信的现代化技术 这种技术是电子计算机与移动互
  • 用matlab做高斯混合模型(GMM)聚类分析

    训练GMM参数 options statset MaxIter 1000 gmm gmdistribution fit feature k Covtype Diagonal Regularize 1e 10 Options options
  • STM32 IIC通信干货!理论+实例

    I2C总线简介 I2C总线介绍 I2C Inter Integrated Circuit 总线 也称IIC或I2C 是由PHILIPS公司开发的两线式串行总线 用于连接微控制器及其外围设备 是微电子通信控制领域广泛采用的一种总线标准 它是同
  • 京城游戏人-Day9:Unity 中的鼠标点击与触摸屏点击

    京城游戏人 Day9 Unity 中的鼠标点击与触摸屏点击 作者 大锐哥 地址 http blog csdn net prevention 1 先说几点结论 Unity 中鼠标点击 MouseButton 与触摸点击 Touch 是分开处理
  • Share:思科模拟器 路由配置(默认、静态、动态RIP)

    目录 问题 1 基本连线配置 PC配置 路由器对应端口配置 2 路由设置 默认路由 静态路由 5 19补充 RIP动态路由 2022 4 18 最近发现好多同学看过我这篇记录 记得当时上计网的时候也是学的稀里糊涂 幸亏有同学的作业文档 老师
  • [POC分享] CVE: 2022-24112:Apache APISIX 2.12.1 - Remote Code Execution (RCE)

    Exploit Title Apache APISIX 2 12 1 Remote Code Execution RCE Date 2022 03 16 Exploit Author Ven3xy Vendor Homepage https
  • 软件安全技术复习内容

    软件安全技术 边复习边写的 有错误及时指正 第一章 软件安全概述 零日漏洞 安全威胁分类 CIA安全基本属性 PDRR模型 软件安全的主要方法和技术 基本方法 主要技术 第二章 软件漏洞概述 概念 软件漏洞成因分析 软件漏洞分类 基于漏洞成
  • 毕业设计-SpringBoot-基于推荐算法的商城管理系统

    环境 开发工具 idea 数据库 MySQL5 7 jdk1 8 架构 SpringBoot 前端HTML 主要功能 前台商城系统包含首页门户 商品分类 新品上线 首页轮播 商品推荐 商品搜索 商品展示 购物车 订单结算 订单流程 个人订单
  • matlab为图像添加圆形掩膜、制作圆形掩膜矩阵

    假设矩阵大小为m n 取矩阵最中间一点为圆心 半径r m 2 先用函数meshgrid生成矩阵对应的每一个坐标 然后用circle x 2 y 2生成代表半径的平方的矩阵 最后用find函数找到符合要求的元素 赋值为1 不符合要求的赋值为0
  • 《机器人控制系统和MATLAB simulink仿真》笔记1:认识S函数

    前言 最近在看控制的东西 想动手实践一下 看到有书名曰 机器人控制系统和MATLAB simulink仿真 于是学习一下做做记录 1 认识对象 机器人动力学系统的特性 考虑一个关节机器人 其动态性能可由二阶非线性微分方程描述 M q q