cart-pole 建模

使用matlab symbolic toolbox进行拉格朗日建模,并转为LTI模型

%% Cart-Pole Lagrangian modeling + symbolic linearization (upright, theta=0) clear; clc; syms x dx ddx real syms th dth ddth real syms M m l g u real % --- Generalized coordinates q = [x; th]; dq = [dx; dth]; ddq = [ddx; ddth]; % --- Kinetic & Potential energy % Cart velocity: dx % Pole mass position: px = x + l*sin(th), pz = l*cos(th) % Velocities: vpx = dx + l*cos(th)*dth; vpz = -l*sin(th)*dth; v2 = vpx^2 + vpz^2; T_cart = 0.5*M*dx^2; T_pole = 0.5*m*v2; T = T_cart + T_pole; % Potential energy (zero at upright th=0 ⇒ V = m*g*l*(1 - cos(th))) V = m*g*l*(1 - cos(th)); % Lagrangian L = T - V; % --- Generalized forces (only x is actuated by force u) Q = [u; 0]; % --- Euler-Lagrange: d/dt(dL/ddq) - dL/dq = Q dLd_dq = jacobian(L, q).'; % ∂L/∂q dLd_ddq = jacobian(L, dq).'; % ∂L/∂dq % Time derivative of dLd_ddq (treat q,dq as functions of time) % Use total derivative: d/dt = (∂/∂q)*dq + (∂/∂dq)*ddq d_dt_dLd_ddq = jacobian(dLd_ddq, q)*dq + jacobian(dLd_ddq, dq)*ddq; EL = d_dt_dLd_ddq - dLd_dq - Q; % = 0 gives equations of motion % Solve for accelerations ddq = [ddx; ddth] sol = solve(EL == 0, ddq); ddx_expr = simplify(sol.ddx); ddth_expr = simplify(sol.ddth); % --- Build nonlinear state-space: X=[x;dx;th;dth] f = [ dx; ddx_expr; dth; ddth_expr ]; g_u = jacobian(f, u); % input channel (should be a 4x1) f0 = subs(f, u, 0); % drift when u=0 % --- Linearize around upright equilibrium: x=0, dx=0, th=0, dth=0, u=0 xeq = [0; 0; 0; 0]; ueq = 0; A = simplify( subs( jacobian(f, [x, dx, th, dth]), ... [x, dx, th, dth, u], [xeq.', ueq] ) ); B = simplify( subs( g_u, [x, dx, th, dth, u], [xeq.', ueq] ) ); % --- Optional: pretty-print A, B disp('A ='); pretty(A); disp('B ='); pretty(B); % --- 验证:将A,B化简到常见形式(象征参数不数值化) A_simplified = simplify(A); B_simplified = simplify(B); % --- 如果想代入具体参数,取消注释以下行: % Mv = 1.0; mv = 0.1; lv = 0.5; gv = 9.81; % A_num = double(subs(A_simplified, {M,m,l,g}, {Mv,mv,lv,gv})); % B_num = double(subs(B_simplified, {M,m,l}, {Mv,mv,lv}));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCBA再流焊温度曲线优化操作指南

PCBA再流焊温度曲线优化实战全解:从原理到缺陷控制 你有没有遇到过这样的情况? 贴片机精度拉满,钢网开孔也合规,锡膏印刷看起来完美无瑕——可一进回流炉,问题就来了:QFN底下空洞超标、0402电阻“立碑”成…

基于SpringBoot+Vue的人事系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 随着信息技术的快速发展,企业人事管理逐渐从传统的手工操作向数字化、智能化方向转变。传统的人事管理方式存在效率低下、数据易丢失、信息共享困难等问题,亟需一套高效、安全、易用的管理系统来优化人力资源配置,提升企业管理水平。基于…

快速理解SystemVerilog过程块:always与initial深度剖析

掌握SystemVerilog的灵魂: always 与 initial 的真实世界解析 你有没有遇到过这样的情况?写完一段代码,仿真跑起来结果莫名其妙——信号没初始化、计数器卡死、输出全是高阻态……翻来覆去查逻辑也没发现问题。最后发现,罪魁祸…

UVC协议如何简化监控开发流程:核心要点

UVC协议如何让监控开发“开箱即用”:从原理到实战的深度解析你有没有遇到过这样的场景?新买了一个USB摄像头,插上电脑后还没来得及安装驱动,系统就已经弹出提示:“已检测到新的视频设备”——打开会议软件,…

通信协议入门:rs232和rs485的区别全面讲解

从调试口到工业总线:RS232与RS485的本质差异与实战选型指南你有没有遇到过这样的场景?一台设备通过串口连不上PC,换根线就好了;或者在工厂里布了一圈RS485总线,结果数据乱跳、通信时断时续。更头疼的是,明明…

快速上手:AI 图像风格迁移的代码实现方法

环境配置安装必要的Python库,包括TensorFlow或PyTorch作为深度学习框架,以及OpenCV或Pillow用于图像处理。推荐使用conda或pip创建虚拟环境以避免依赖冲突。pip install tensorflow opencv-python numpy选择预训练模型下载VGG19或ResNet等预训练模型作为…

WinDbg调试用户态应用核心要点解析

用WinDbg破译崩溃日志:用户态调试的实战艺术你有没有遇到过这样的场景?生产服务器上的某个服务突然退出,只留下一个几百MB的.dmp转储文件;客户发来一段模糊的“程序已停止工作”截图,却无法复现问题;测试环…

零基础掌握硬件电路设计原理分析核心要点

从零开始搞懂硬件电路设计:不只是看懂原理图,而是真正“看穿”它 你有没有过这样的经历?打开一份电路图,满屏的电阻、电容、芯片引脚,看起来都认识,但合在一起就完全不知道它是怎么工作的。想自己搭个温控小…

数据预处理中的非对称Sigmoid函数定制

在数据预处理中,标准化和归一化是常见的步骤。其中,Sigmoid函数因其输出范围为0到1的特性,在数据缩放中被广泛应用。然而,传统的Sigmoid函数对称性强,无法满足所有数据集的需求,尤其是在希望定制曲线形状的情况下。今天我们将探讨如何定制一个非对称的Sigmoid函数,并通过…

Power BI中财务周数据的可视化分析

在日常的数据分析中,财务数据的处理和展示往往是重中之重。特别是对于财务周数据的分析,能够有效帮助企业了解当前的财务状况,并与历史数据进行对比。本文将介绍如何在Power BI中创建一个卡片视图来展示当前财务周和前一财务周的金额。 数据准备 假设我们有如下数据表: …

调试UART中断异常的五大核心要点总结

一次UART中断异常排查的深度复盘:从数据丢失到系统稳定的五大实战要点最近在调试一款工业网关设备时,遇到了一个典型的“UART接收中断突然停止响应”的问题。现象很诡异:上电初期通信正常,但运行几分钟后,某个串口的数…

GPU驱动卸载失败?display driver uninstaller超详细版解决方案

GPU驱动卸载失败?一招彻底解决!DDU实战全解析 你有没有遇到过这样的情况:想升级显卡驱动,结果安装程序弹出“Error 1”;或者刚换了一块新显卡,系统却死活识别不了;甚至重装系统后屏幕黑屏、分辨…

基于Altium Designer的gerber文件转成pcb文件操作详解

如何用 Altium Designer 把 Gerber 文件“变”回 PCB?一个工程师的实战手记你有没有遇到过这种场景:手头有一块现成的电路板,客户只给了你一叠 Gerber 文件用于生产——但你现在需要改设计、做升级,却发现原始的.PcbDoc源文件找不…

Redis扫描命令的探索与实践

在日常的开发工作中,缓存的使用变得越来越普遍。Redis作为一个高性能的键值对数据库,因其支持的数据类型丰富且操作简单而被广泛应用于各种场景。然而,在使用过程中,我们常常会遇到一些需要扫描所有键的情况,比如系统维护、数据迁移或者缓存清理等。本文将结合实例,探讨如…

iOS 17.4 中的 StoreKit 故障与解决方案

引言 最近,许多iOS开发者在升级到iOS 17.4之后,遇到了一个令人头疼的问题:StoreKit框架停止工作,导致无法从App Store获取产品信息。这不仅影响了应用的内购功能,还可能影响用户体验和收入。在本文中,我们将探讨这个问题的具体表现、可能的原因,并提供一个有效的解决方…

新手进阶Python:给办公看板加权限管理,多角色安全协作

大家好!我是CSDN的Python新手博主~ 上一篇我们用Flask搭建了办公数据看板,实现了局域网内数据共享,但很多小伙伴反馈“所有人都能看所有数据,比如销售员工能看到其他部门的业绩,不太安全”。今天就带来超落…

无监督顺序投影学习哈希:USPLH算法的训练实现

在大数据检索和近似最近邻搜索领域,无监督哈希方法通过学习紧凑的二进制编码来加速查询过程。其中,无监督顺序投影学习哈希(Unsupervised Sequential Projection Learning for Hashing,简称USPLH)是一种高效的迭代方法,它通过逐步引入伪成对约束来学习投影方向,确保哈希…

零基础掌握PyQt上位机串口调试工具开发

从零打造专业级串口调试助手:PyQt上位机开发实战全解析 你有没有遇到过这样的场景?手头的STM32板子烧录了新固件,但串口打印出一堆乱码;ESP32上传感器数据老是断连,想查问题却只能靠“盲调”;Arduino项目需…

双层锚点图哈希(Two-Layer Anchor Graph Hashing)测试编码函数实现详解

双层锚点图哈希(Two-Layer Anchor Graph Hashing)是单层锚点图哈希(AGH)的改进版本,通过引入双层阈值机制,在保持原有高效性的同时显著提升哈希码的质量和检索精度。单层 AGH 只使用零阈值进行二值化,而双层 AGH 为每一比特分别学习两个独立的阈值(正样本阈值和负样本阈…

优化启动效率:使用xtaskcreate进行快速任务初始化

从上电到就绪:用 xTaskCreate 打造极速启动的嵌入式系统 你有没有遇到过这样的场景?设备按下电源键后,屏幕迟迟不亮,Wi-Fi 模块几十秒才连上,传感器数据迟迟无法上报——用户还没开始使用,耐心就已经耗尽…