热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

无碳小车matlab轨迹仿真怎么做_控制实验:起重机模型非线性系统基于微分平坦性的轨迹控制(一)...

实验目标本文内容基于学校中刚刚结束的一次控制实验,实验对象是一个简易起重机模型,要用它实现预给轨迹的控制。起重机广泛应用于货物装卸,它的动
fd1818f224318e3d70a299f518cc837b.png

实验目标

本文内容基于学校中刚刚结束的一次控制实验,实验对象是一个简易起重机模型,要用它实现预给轨迹的控制。起重机广泛应用于货物装卸,它的动力学建模后为一个非线性系统,不能直接应用线性系统的控制方法,需要适当做一些调整。如果直接在工作点附近Jacobi一阶线性化,工作点以外其他位置偏离太多反馈控制起来会很吃力,甚至失稳。因而如果能够让非线性系统的前馈控制主导下的状态变量轨迹十分靠近目标轨迹,那么最终控制效果会十分稳健理想。而基于平坦系统的前馈控制和跟踪轨迹误差反馈控制,最后设计的模型就会在dSPACE系统上模拟,通过两个轴互相垂直的电机来驱动。

如果没有微分平坦性相关基础的同学,可以在我之前的几个回答里找到一定参考。

如何理解微分平坦性(Differential Flatness)?

输入输出线性化时,如果控制输入有多个,应该怎么处理?

现代控制理论线性系统入门(十)轨迹追踪反馈控制 该文章有最后有关于平坦系统的介绍,以及以线性化以后的倒立摆的线性系统的例子。

起重机模型建立

956bc2f46c55dda0339ace7a63cff9f4.png
图1 起重机实验实物

起重机的实际物理过程可以简化为以下两个质量块的模型:

在水平轨道上的小车视为质量为

的质点,小车上有一个电机输出转矩控制卷筒收放吊绳,吊绳穿过滑轮牵引着质量块即为质点
。假设吊绳始终处于绷直,且质量忽略不计,并且把坐标系建成如图所示,那么小车的水平位移为
,吊绳在
平面内的长度为
,且半径为
的滑轮在该平面上有可以自由转动的铰链,于是有吊绳移动时的相对于垂线的偏角
,质量块相对于小车质心位置的横纵位置记为
929425f4c5112f7f25b94d802344758f.png
图2 起重机平面内的几何关系
16053e941f71c43a505c6ca106650d5f.png
图3 小车上的受力关系

小车电机牵引吊绳的转矩为

,受到的摩擦转矩为
,滑轮的转动惯量为
,其角速度为
。小车受到由一侧电机经滚珠丝杠转化来的水平推力
,也受到水平阻力
,此外吊绳上的拉力为
,滑轮水平摆动会受到摆动阻力转矩
。于是我们可以借助拉格朗日方程第二形式来建立系统模型。

设广义坐标

,则物体的位矢为

(1)

其时间导数为

(2)

故有动能

(3)

总势能

(4)

而系统受到的广义外源力

分别为

(5)

于是有拉格朗日量

(6)

得到三个拉格朗日方程

将二阶项移到左边,即

9821f1ff4989bdbcb34649a9fc86746d.png
图4 拉格朗日方程

这是三个二阶非线性微分方程,于是可以引入新的状态变量

(7)

得到系统的状态方程

(8)

其中

我们已经成功建立了系统的状态方程,以上细节计算十分繁琐易错,不建议手算,应当使用字母运算的软件工具,比如Maple、Matlab。

基于平坦输出描述的前馈控制

众所周知,要想一端输入信号和系统另一端输出信号轨迹一致,必须要用到受控系统的逆系统来实现轨迹追踪的前馈控制。而基于平坦输出的微分参数化,可以轻松得到一个非线性平坦系统的逆系统,这样就能实现前馈追踪控制,在这里则使用双自由度的前馈控制的设计。

要证明该系统是平坦系统,必须找到一组平坦输出,使得有它产生的微分参数能够线性无关地表示所有状态变量,以及输入变量。

质量块相对于小车的坐标

可以选为一组平坦输出。但要证明它是系统的平坦输出,直接利用拉格朗日方程的解去表示,会十分困难,于是我们可以借助传统的牛顿力学受力分析以及基本几何关系来求他们之间的关系。

由牛顿第二定律得

(9)

由几何关系可知

(10)

继续通过求导,易知剩余的状态变量也可以用

的微分参数表示

(11)

而当输入变量为

时,继续借助受力分析,通过中间变量
的参数化,输入变量也能用平坦输出的微分参数表示

(12)

可见,如果想要用微分参数描述状态输入量,

都至少存在连续的四阶导数。保证这个条件后,系统即平坦系统,完全能控。

目标轨迹设计

现在来确定输入目标轨迹,已知质量块的位置

为平坦输出,起点为
,其终点为
,轨迹为平面内抛物线,最高点坐标
,要求在18秒内走完这段行程。现在要确定
,可以采用多项式插值的方法轨迹拟合。那么关于始末位置有10个约束条件。即

(13)

设轨迹多项式为

(14)

解得这10个待定系数,得到目标轨迹横坐标分量

(15)

易得关于目标轨迹纵坐标分量

(16)

显然,目标轨迹

微分度足够,可以满足输入要求。而如果想要确定原路返程的目标轨迹,只需要令
,其他都可以保持不变。

摩擦阻力的建模

承接上文,在电机运行中出现的阻力

以及阻力矩
,是以持续干扰(Dauerstörung)的方式出现的,为了消除它的影响,就可以对它建模,并且在基于平坦性的前馈控制输入时加上它,这样就是主动补偿,消去它的影响。同时这也对后面构建观测器以及控制器至关重要。

本实验的各个扰动模型,基于干摩擦以及湿摩擦的性质,已经给出,并且参数也经过识别,不过会因为老化,参数产生波动。

滑轮摆动的转矩由下式估计描述

(17)

包含的参数有:粘性摩擦系数

;干摩擦力
;静摩擦力
;静摩擦转干摩擦因数

吊绳卷筒上转动的转矩由下式估计描述

(18)

其中卷筒转动角速度为

,包含的参数有:粘性摩擦系数
;干摩擦力
;静摩擦力
;静摩擦转干摩擦转速

小车阻力由下式估计描述

(19)

小车阻力的参数跟小车的运动方向有关。

若为正向,有:粘性摩擦系数

;干摩擦力
;静摩擦力
;静摩擦转干摩擦速度

若为负向,有:粘性摩擦系数

;干摩擦力
;静摩擦力
;静摩擦转干摩擦速度

上面三种阻力模型所需的变量

都可用平坦输出微分参数描述。

下一节更新会继续讨论观测器、控制器的设计以及在MATLAB/Simulink中的模拟。

下一章传送门:

善道:控制实验:起重机模型非线性系统基于微分平坦性的轨迹控制(二)​zhuanlan.zhihu.com
0998025180b5ea5bba294ad2bfdeacb8.png



推荐阅读
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 计算当前记录与下一条记录之间的天数差异
    本文介绍如何使用SQL查询来计算当前记录与其下一条记录之间的天数差异,通过创建测试视图并使用分析函数LEAD和LAG来实现。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
  • 本文深入解析了Linux系统中常用的文件和目录操作命令,包括但不限于`ls`、`cd`等。通过详细讲解每个命令的功能、语法及应用场景,帮助读者掌握这些基本工具的使用方法,提升在Linux环境下的操作效率。此外,文章还介绍了如何结合选项和参数来实现更复杂的文件管理任务,为初学者提供了丰富的实践示例和技巧。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • Git核心命令全解析:掌握日常开发必备技能
    本文深入解析了 Git 的核心命令,帮助开发者掌握日常开发中的必备技能。从 `git init` 命令开始,介绍了如何将当前目录转变为 Git 可管理的仓库。接着详细讲解了 `git add` 命令的使用方法,包括如何将文件(如 `readme.txt`)添加到暂存区,以便在后续提交时进行版本控制。此外,还探讨了其他关键命令,如 `git commit` 和 `git push`,以确保代码变更能够安全地保存和同步到远程仓库。通过这些命令的综合应用,开发者可以更加高效地管理和协作项目。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 本文介绍了如何使用 Spark SQL 生成基于起始与终止时间的时序数据表。通过 `SELECT DISTINCT goods_id, get_dt_date(start_time, i) as new_dt` 语句,根据不同的时间间隔 `i` 动态填充日期,从而构建出完整的时序数据记录。该方法能够高效地处理大规模数据集,并确保生成的数据表准确反映商品在不同时间段的状态变化。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • TypeScript ESLint: 避免使用隐式 any 类型,建议指定更具体的类型以提高代码可维护性
    在使用 Vue 引入 SVGSpriteLoader 时遇到了问题。具体表现为在 `shims-vue.d.ts` 文件中进行相关配置后,WebStorm 报错。为了解决这一问题,建议避免使用隐式 `any` 类型,而是指定更具体的类型,以提高代码的可维护性和类型安全性。可以通过在 ESLint 配置中禁用隐式 `any` 类型来实现这一目标。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
author-avatar
phpxiaofei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有