news 2026/4/23 10:47:49

cart-pole 建模

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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}));
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 4:01:23

Elasticsearch搜索优化:超详细版查询性能调优指南

Elasticsearch搜索性能调优实战:从面试题到生产级优化你有没有遇到过这样的场景?凌晨三点,监控系统突然报警:Elasticsearch集群CPU飙升至95%,Kibana查询超时,日志检索几乎瘫痪。而罪魁祸首,可能…

作者头像 李华
网站建设 2026/4/18 10:25:52

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

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

作者头像 李华
网站建设 2026/4/17 21:25:22

Redis扫描命令的探索与实践

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

作者头像 李华
网站建设 2026/4/23 10:46:36

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

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

作者头像 李华
网站建设 2026/4/12 17:19:11

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

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

作者头像 李华
网站建设 2026/4/16 18:52:39

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

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

作者头像 李华