• 基于matlab的一级倒立摆直线运动稳定性控制仿真


    目录

    一、理论基础

    二、MATLAB核心仿真

    三、仿真结论分析

    四、参考文献 


    一、理论基础

           倒立摆系统是是一个具有高阶次、不稳定、多变量、非线性和强藕合特性的不稳定系统。在控制过程中,为了简化直线一级倒立摆系统分析,在建立实际数学模型过程中,忽略了空气阻力和各种摩擦之后,将直线一级倒立摆系统直接抽象成小车和匀质杆组成的系统,如图1所示。

    M  小车质量

    m  摆杆质量

    b  小车摩擦系数

    l   摆杆转动轴心到杆质心的长度

    I  摆杆惯量

    F  加在小车上的力

    x  小车位置

     其中,N——小车与摆杆相互作用力的水平方向的分量,

    P——小车与摆杆相互作用力的垂直方向的分量。

    以下是应用牛顿法建立直线一级倒立摆系统的动力学方程过程:

    通过受力分析可知,由小车水平方向所受的合力,可得如下方程:

           由方程组(7)知该系统是明显的非线性系统。为便于控制器的设计,需要将系统在工作点(= 0)进行线性化处理。当摆杆与垂直向上方向之间的夹角与 1(单位为弧度)之比很小时,则可以进行近似处理: 

    二、MATLAB核心仿真

    1. R1 = str2double(get(handles.edit5,'string'));
    2. I1 = str2double(get(handles.edit6,'string'));
    3. R2 = str2double(get(handles.edit7,'string'));
    4. I2 = str2double(get(handles.edit8,'string'));
    5. R3 = str2double(get(handles.edit9,'string'));
    6. I3 = str2double(get(handles.edit10,'string'));
    7. R4 = str2double(get(handles.edit11,'string'));
    8. I4 = str2double(get(handles.edit12,'string'));
    9. M = str2double(get(handles.edit13,'string'));
    10. CC1 = R1 + sqrt(-1)*I1;
    11. CC2 = R2 + sqrt(-1)*I2;
    12. CC3 = R3 + sqrt(-1)*I3;
    13. CC4 = R4 + sqrt(-1)*I4;
    14. k = str2double(get(handles.edit1,'string'));
    15. V = str2double(get(handles.edit2,'string'));
    16. dt = 0.01*V;
    17. l = str2double(get(handles.edit3,'string'));
    18. % M = 2.0;
    19. m = 0.1;
    20. g = 9.81;
    21. TT = str2double(get(handles.edit4,'string'));
    22. %系统初始值
    23. zf = [0 0 0 0]';
    24. z = [0 0 2 0]';
    25. r = 0.2;
    26. %创建倒立摆系统
    27. c1 = M*l;
    28. c2 = m*l;
    29. c3 = m*g;
    30. c4 =(M+m)*g;
    31. %倒立摆的四个矩阵,具体可以看理论文档上的说明
    32. A = [0 1 0 0;c4/c1 0 0 0;0 0 0 1;-c3/M 0 0 0];
    33. B = [0 -1/c1 0 1/M]';
    34. C = [1 0 0 0;0 0 1 0];
    35. D = [0 0]';
    36. %配置极点
    37. cpl =[CC1 CC2 CC3 CC4];
    38. Ks = place(A,B,cpl);
    39. Y = [];
    40. for i=1:TT
    41. z1 =(A-B*Ks)*(z-zf);
    42. z = z + z1*dt;
    43. y(:,i) = z;
    44. %动画
    45. x1 = z(3)-k/2+z(4)*dt*i;x2=z(3)+k/2+z(4)*dt*i;
    46. y1 =-4;
    47. y2 =-2.5;
    48. x4 =(x1+x2)/2+l*sin(z(1));
    49. y4 = y2+l*cos(z(1));
    50. t = 0:pi/100:2*pi;
    51. %倒立摆上的球体
    52. x3 = x4+r*cos(t);
    53. y3 = y4+r*sin(t);
    54. axes(handles.axes1);
    55. plot(x3,y3,'r.');
    56. hold on
    57. %轨道
    58. plot([-40,40],[-4,-4],'k','linewidth',2);
    59. hold on
    60. %模拟小车
    61. plot([x1,x2],[y1,y1],'b','linewidth',2);
    62. hold on
    63. plot([x2,x2],[y1,y2],'b','linewidth',2);
    64. hold on
    65. plot([x1,x2],[y2,y2],'b','linewidth',2);
    66. hold on
    67. plot([x1,x1],[y1,y2],'b','linewidth',2);
    68. hold on
    69. %倒立摆
    70. plot([(x1+x2)/2,x4],[y2,y4],'m','linewidth',2);
    71. hold off
    72. xlabel('小车位移');
    73. ylabel('高度');
    74. axis([-30 30 -5 15])
    75. Y = [Y,(x1+x2)/2];
    76. axes(handles.axes2);
    77. plot(Y);
    78. axis([0,TT,-15,15]);
    79. xlabel('时间');
    80. ylabel('小车位移');
    81. pause(0.001);
    82. if (i==1)
    83. pause(0.01);
    84. end
    85. if (abs(z(1)-zf(1))<=0.001)&(abs(z(3)-zf(3))<=0.002)
    86. break;
    87. end
    88. end

    三、仿真结论分析

    运行后,matlab启动GUI操作界面:

    四、参考文献 

    [1]邢景虎, 陈其工, 江明. 基于LQR的直线一级倒立摆最优控制系统研究[J]. 工业仪表与自动化装置, 2007(6):3.A08-45

  • 相关阅读:
    第一章:docker环境安装
    手把手教你电机FOC控制【三】
    [开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务
    windows10上mysql5.7下载以及安装
    MyBatis中$和#
    Arduino 基础语法
    Android 基本属性绘制文本对象FontMetrics
    字符编码
    Docker数据存储&容器之间数据共享
    作为测试工程师的发展之路-如何做好测试开开发?
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/126376744