基于指数趋近律的机器人滑模轨迹跟踪控制算法及MATLAB仿真
机械手是工业制造领域中应用最广泛的自动化机械设备,广泛应用于工业制造、医疗、军工、半导体制造、太空探索等领域。它们虽然形式不同,但都有一个共同的特点,即能够接受指令,并能准确定位到三维(或二维)空间的某一点进行工作。由于其在3D打印、喷漆机器人、汽车制造等领域的广泛应用,机器人的控制显得尤为重要。而滑模变结构控制SMC由于其快速的瞬态响应和对不确定性和扰动的鲁棒性,在机器人控制领域受到了广泛的关注。
问题描述
机器人轨迹跟踪控制问题可以描述为: 给定一个参考轨迹,找到一个容许控制u,使得实际的关节角度与参考的关节角度误差最小,从而使得机械臂末端轨迹跟踪上参考轨迹。
理论分析
1滑模控制基础概念
1.1滑模控制定义
滑模控制(SMC)也称为可变结构控制,本质上是一种特殊的非线性控制,其非线性性能是控制的不连续性。该控制策略与其他控制的区别在于“结构”系统的状态不是固定的,但是在动态过程中,它可以根据系统的当前状态(例如偏差和其导数)有意地进行更改,从而迫使系统以预定的“滑动模式”状态轨迹运动。滑模的设计可以不受对象参数和干扰的影响,滑模控制具有响应速度快,对参数变化和干扰不敏感,无需在线系统识别,物理实现简单等优点。通过不连续控制有意改变系统结构将相位轨迹驱动到稳定的超平面或流形的系统。不受干扰和参数变化
1.2滑模趋近律
滑模控制下的系统一般分为两个阶段:
(1)从系统初始状态到滑模面;
(2)在滑模面上滑模到达系统平衡点;
2.将趋近律引入到(1)阶段设计中,对(2)阶段设计快速终端滑模。2.“全局”、“快速”、“终端滑模”中的“全局”表示滑模没有(1)阶段,因此不使用趋近定律。
4个基本趋近律表达如下:
(1)等速趋近律:

(2)指数趋近律

(3)幂次趋近律

(4)一般趋近律

3基于指数趋近律的模糊滑模控制
3.1 基于指数趋近律的滑模控制
由牛顿欧拉公式得n自由度机器人关节空间动力学方程为:

设系统误差为:

则误差的微分得:

选择滑模函数为:

则对滑模函数s求导得:

因为系统方程可变形为:

所以:

选取指数趋近律为:

所以基于指数趋近律可设计u,将两公式合并:

则控制律u为:

已知只要得到滑模平面(切换面s)和滑动模态的控制律u,滑动变结构控制就能完全建立起来。
下面证明其滑模平面稳定存在滑动模态:
第一步:取李雅普诺夫函数

由于

所以V是正定(PD)
第二步:对李雅普诺夫函数求导得:

由此可知,上述设计的滑模变结构控制器满足要求。
为更直观的分析所设计的滑模控制器的优劣,对控制系统进行仿真分析如下:

图1.三自由度机械臂
根据拉格朗日功能平衡法,建立其动力学模型。由于是比较常见的三自由度机器人模型,这里可以查找教科书或文献参考
MATLAB仿真程序
其simulink建模框图如图2所示:

图2 控制系统simulink框图
机器人动力学MATLAB仿真程序:
function [sys,x0,str,ts]=s_function(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;case 1,sys=mdlDerivatives(t,x,u);case 3,sys=mdlOutputs(t,x,u);case {2, 4, 9 }sys = [];otherwiseerror(['Unhandled flag = ',num2str(flag)]);endfunction [sys,x0,str,ts]=mdlInitializeSizessizes = simsizes;sizes.NumContStates = 6;sizes.NumDiscStates = 0;sizes.NumOutputs = 6;sizes.NumInputs = 3;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 0;sys=simsizes(sizes);x0=[0.6;0.3;0.5;0.5;0.5;0.5];str=[];ts=[];function sys=mdlDerivatives(t,x,u)q1=x(1);dq1=x(2);q2=x(3);dq2=x(4);q3=x(5);dq3=x(6);m1=0;m2=1;m3=1;L1=0;L2=1;L3=1;g=10;I1=0;I2=0;I3=0;a1=m2*L2^2+m3*L2^2;a2=m3*L3^2;a3=m3*L3^2;b1=(m2*L2+m3*L2)*g;b2=m3*L3*g;M11=I1+a1*(cos(q2))^2+a2*cos(q2+q3)+2*a2*cos(q2)*cos(q2+q3);M12=0;M13=0;M21=0;M22=I2+a1+a2+2*a3*cos(q3);M23=a2+a3*cos(q3);M31=0;M32=a2+a3*cos(q3);M33=I3+a2;M=[M11 M12 M13;M21 M22 M23;M31 M32 M33];B11=-(1/2)*a1*dq2*sin(2*q2)-a3*dq3*cos(q2)*sin(q2+q3)-(1/2)*a2*(dq2+dq3)*sin(2*q2+2*q3)-a3*dq2*sin(2*q2+q3);B12=-(1/2)*a1*dq1*sin(2*q2)-a3*dq1*sin(2*q2+q3)-(1/2)*a2*dq1*sin(2*q2+2*q3);B13=-a3*dq1*cos(q2)*sin(q2+q3)-(1/2)*a1*dq1*sin(2*q2+2*q3);B21=-B12;B22=-a3*dq3*sin(q3);B23=-a3*(dq2+dq3)*sin(q3);B31=-B13;B32=-a3*dq2*sin(q3);B33=0;B=[B11 B12 B13;B21 B22 B23;B31 B32 B33];G1=0;G2=b1*cos(q2)+b2*cos(q2+q3);G3=b2*cos(q2+q3);G=[G1;G2;G3];tol(1)=u(1);tol(2)=u(2);tol(3)=u(3);ddq=inv(M)*(tol'-B*[dq1;dq2;dq3]-G);sys(1)=x(2);sys(2)=ddq(1);sys(3)=x(4);sys(4)=ddq(2);sys(5)=x(6);sys(6)=ddq(3);function sys=mdlOutputs(t,x,u)sys(1)=x(1);sys(2)=x(2);sys(3)=x(3);sys(4)=x(4);sys(5)=x(5);sys(6)=x(6);
则各关节跟踪响应如图3所示

图3.各关节跟踪响应
轨迹跟踪误差如图4所示

图4.轨迹跟踪误差
滑模面如图5所示

图5.滑模面
控制力矩如图6所示

图6.控制力矩
总结
由以上仿真结果可以看出,基于趋近律的滑模轨迹跟踪控制器在系统复杂的环境下,能够对系统的轨迹跟踪进行有效的控制,然而,其基于趋近律的滑模轨迹跟踪控制方法存在着严重的抖振,还是有待改进!
更多信息请关注:DRobot
相关文章:
基于指数趋近律的机器人滑模轨迹跟踪控制算法及MATLAB仿真
机械手是工业制造领域中应用最广泛的自动化机械设备,广泛应用于工业制造、医疗、军工、半导体制造、太空探索等领域。它们虽然形式不同,但都有一个共同的特点,即能够接受指令,并能准确定位到三维(或二维)空间的某一点进行工作。由…...
华为云API自然语言处理的魅力—AI情感分析、文本分析
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI自言语言的情感分析、文本分词、文本翻译 1 IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&a…...
微擎小程序获取不到头像和昵称解决方案
这是一个使用微擎小程序的代码示例,其中包含了获取用户头像和昵称的功能。以下是解决方案: 首先,在<button>标签上添加open-type"chooseAvatar"属性,并绑定bindchooseavatar事件: <button class&qu…...
Qt 对界面类重命名的步骤
有些时候因为一些原因,需要修改Qt中创建的界面类,修改的地方比较多,一定要留意有没有修改完全,否则会出现各种奇怪报错。 比如,将MainWindow界面类名修改为lb_logdisplay 修改步骤: 修改文件名:…...
使用docker搭建nacos单机、集群 + mysql
单机搭建 1 拉取mysql镜像 docker pull mysql:5.7.40 2 启动mysql容器 docker run -d --namemysql-server -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:5.7.40 3 执行nacos的数据库脚本 /* * Copyright 1999-2018 Alibaba Group Holding L…...
FreeRTOS自我救赎2之基本工程建立
System Core 1.System Core >SYS 2.System Core >RCC 3.System Core >NVIC Middleware Middleware >FREERTOS Clock configuration Project Manager 在编译生成的代码前需要找一个与芯片对应的启动文件,启动文件添加进来,编译就没问题了...
【C++设计模式之解释器模式:行为型】分析及示例
简介 解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一种解决问题的方法,通过定义语言的文法规则,解释并执行特定的语言表达式。 解释器模式通过使用表达式和解释器,将文法规则中的句子逐…...
35 WEB漏洞-逻辑越权之找回机制及接口安全
目录 找回重置机制接口调用乱用演示案例绑定手机验证码逻辑-Rep状态值篡改-实例某APP短信轰炸接口乱用-实例接口调用发包 文章分享:https://www.cnblogs.com/zhengna/p/15655691.html 有支付接口、短信发送接口,邮箱的发送接口等等,在接口这…...
黑豹程序员-架构师学习路线图-百科:JSON替代XML
文章目录 1、数据交换之王2、XML的起源3、JSON诞生4、什么是JSON 1、数据交换之王 最早多个软件之间使用txt进行信息交互,缺点:纯文本,无法了解其结构;之后使用信令,如:电话的信令(拨号、接听、…...
考研人考研魂——英语单词篇(20231009)
下一站,上岸 consoleconsistentconsistconstituteconstitutionconstituentconstructdistinctdistinguishdistinctionconstantconstrainfruitfulfulfillfundfunctionfrustrateevidencefundamentalevilevidentenvironmententertainmententertainenterprisemonotonousm…...
【数据结构】HashSet的底层数据结构
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 HashSet 一、 HashSet 集合的底层数据结构二…...
数据结构与算法(七)--使用链表实现栈
一、前言 之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到对于链表头的相关操作基本都是O(1)的,例如链表头增加、删除元素,查询元素等等。那我们其实有一个数据结构其实可以完美利用到这些操作的特点,都是在…...
分布式事务详解
摘要 分布式事务主要包括2pc、3pc、消息事务。 2pc指两阶段提交: 第一阶段是准备阶段:所有事务参与者检查执行能力并锁定对应资源,准备完成后将状态告知协调者。第二集段是提交状态:事务参与者全部准备好后,协调者发…...
车载通信架构 —— DDS协议介绍
车载通信架构 —— DDS协议介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…...
nginx根据不同的客户端设备进行转发请求——筑梦之路
这里主要介绍七层负载方式实现。 环境说明: pc端 web-1 苹果ios端 web-2 安卓Android端 web-3 负载均衡 web-lb 配置示例: pc端: server {listen 9000; #监听9000server_name pc.xxx.com;charset utf-8;location / {root /…...
增强LLM:使用搜索引擎缓解大模型幻觉问题
论文题目:FRESHLLMS:REFRESHING LARGE LANGUAGE MODELS WITH SEARCH ENGINE AUGMENTATION 论文地址:https://arxiv.org/pdf/2310.03214.pdf 论文由Google、University of Massachusetts Amherst、OpenAI联合发布。 大部分大语言模型只会训练一次&#…...
WPF向Avalonia迁移(一、一些通用迁移项目)
通用变更 WPF:Visibility 其他参考文档 WPF: <TextBlock Visibility"Visible"/><TextBlock Visibility"Collapsed"/><TextBlock Visibility"Hidden"/>Avalonia : <TextBlock IsVisib…...
lua学习笔记
单行注释: 多行注释: 命名: Lua不支持下划线大写字母,比如:_ABC 但支持:_abc 关键字: 全局变量: 直接变量名 内容就是全局 局部变量: 加上local即可 nil࿱…...
修改 ModelScope 默认缓存路径
修改 ModelScope 默认缓存路径 设置 MODELSCOPE_CACHE 和 MODELSCOPE_MODULES_CACHE 两个环境变量。 export MODELSCOPE_CACHE<your_favourite_path>/hub export MODELSCOPE_MODULES_CACHE<your_favourite_path>/modelscope_modules完结!...
【ES实战】索引别名的使用说明
索引别名 文章目录 索引别名带有过滤器的别名RoutingWrite Index REST单一添加一个别名示例: 索引创建是增加别名删除别名检索现有别名示例: 索引别名可以通过API的方式进行操作一个索引别名可以映射到一个或一个以上的索引索引名和索引别名不能重复,在集群中都是唯…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
