当前位置: 首页 > news >正文

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.jsqmd.com/news/235698/

相关文章:

  • PCBA再流焊温度曲线优化操作指南
  • 基于SpringBoot+Vue的人事系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 快速理解SystemVerilog过程块:always与initial深度剖析
  • UVC协议如何简化监控开发流程:核心要点
  • 通信协议入门:rs232和rs485的区别全面讲解
  • 快速上手:AI 图像风格迁移的代码实现方法
  • WinDbg调试用户态应用核心要点解析
  • 零基础掌握硬件电路设计原理分析核心要点
  • 数据预处理中的非对称Sigmoid函数定制
  • Power BI中财务周数据的可视化分析
  • 调试UART中断异常的五大核心要点总结
  • 基于Altium Designer的gerber文件转成pcb文件操作详解
  • GPU驱动卸载失败?display driver uninstaller超详细版解决方案
  • Redis扫描命令的探索与实践
  • 新手进阶Python:给办公看板加权限管理,多角色安全协作
  • 无监督顺序投影学习哈希:USPLH算法的训练实现
  • iOS 17.4 中的 StoreKit 故障与解决方案
  • 零基础掌握PyQt上位机串口调试工具开发
  • 电感的作用核心要点:自感与互感的实际影响
  • 优化启动效率:使用xtaskcreate进行快速任务初始化
  • 双层锚点图哈希(Two-Layer Anchor Graph Hashing)测试编码函数实现详解
  • 解决Python Levenshtein安装问题
  • 4位全加器实验常见问题排查与数码管调试技巧
  • MuMu模拟器安卓12安装面具magisk激活Lsposed框架保姆级教程雷电模拟器也适用
  • MATLAB实现固定基下的稀疏编码:支持LARs与SLEP的多稀疏度求解
  • 快速理解LVGL组件在家居场景的布局技巧
  • 互补投影哈希(CPH)算法实现详解
  • 快速理解multisim14.3安装机制及其依赖组件
  • 电车顶不住,涨价卖车,但外资油车降价狙击,进退失据!
  • I2C总线多主设备通信机制深度剖析