目录
一、理论基础
二级倒立摆是一个复杂非线性、强耦合、多变量的自然不稳定系统,它也是双足行走机器人、火箭飞行姿态控制等许多控制对象的最简单模型。倒双摆是一个复杂强耦合、非线性、多变量的自然不稳定系统,它也是双足行走机器人、火箭飞行姿态控制等许多控制对象的最简单模型。对倒立摆机构的控制常常用来检验控制理论的有效性,关于二级倒立摆的研究主要涉及两个问题:一是摆杆在倒立点位置的稳定和镇定控制;二是摆杆从自然悬垂位置摆到倒立点位置的摆起控制。针对二级倒立摆系统的稳定和镇定问题已提出了多种控制方案,应用传统控制理论中的状态反馈和动态观测器理论,分别实现了二级倒立摆的平衡控制。在智能控制领域,应用模糊控制、神经网络控制、拟人控制,都成功地实现了二级倒立摆的平衡稳定。
二级倒立摆(Double Inverted Pendulum)是一个经典的控制系统问题,用于研究控制理论和算法在复杂多变的动态系统中的应用。它是倒立摆问题的扩展,由两个连续的摆杆组成,每个摆杆上都有一个可控制的小车。这种系统具有高度的非线性性和不稳定性,因此成为测试和验证控制算法的良好模型。
系统结构: 二级倒立摆系统由两个摆杆和两个关节连接的小车组成。摆杆可以在关节处旋转,而小车可以在线性轨道上移动。摆杆的角度和小车的位置是系统的状态变量,控制的目标是使得摆杆保持竖直,从而实现稳定的控制。
系统动力学: 二级倒立摆的动力学是高度非线性的,可以使用物理公式和动力学方程来描述。这些方程涉及到摆杆的质量、长度、摩擦等参数,以及小车的质量、加速度等参数。系统的动力学可以用微分方程组表示。
控制挑战: 由于系统的非线性和不稳定性,控制二级倒立摆是一项挑战性的任务。通常需要设计高级控制策略,如模型预测控制(MPC)、递归最小二乘(RLS)控制等,以保持系统的稳定性和实现所需的性能。
应用: 二级倒立摆问题在控制理论和机器人控制领域具有重要意义。它可以用来验证控制算法的鲁棒性、性能和适应性,以及测试不同控制器在复杂动态系统上的表现。此外,它也被广泛用于教学和研究,帮助学生理解控制理论的应用和实际系统的挑战。
倒立摆是控制理论中的典型被控对象,它具有高阶次、非线性、快速、多变量、强耦合、不稳定的特点,通常用来验证某个理论的正确性。在系统设计中,通常引入一个合适的控制方法使得就倒立摆系统成为一个稳定系统,由此来检验控制方法对于不稳定性、非线性、快速性系统的处理能力。倒立摆有三种控制方法在实际应用中较为常见,即线性控制、预测控制和智能 控 制 。
二级倒立摆系统,其基本结构如下图所示:

直线型二级倒立摆主要由小车,轨道线路以及两个倒立摆构成。对于二级倒立摆的控制需要根据摆体位置、摆体速度、1号摆杆的坐标、1号摆杆的速度、2号摆杆的坐标、2号摆杆的速度六个参数决定的。假设倒立摆系统中小车的质量为M;1号摆杆的质量为m1;摆杆2的质量为m2;质量块的质量为m3;那么根据二阶倒立摆的拉格朗日计算公式可知:



二级倒立摆的空间状态状态方程:


二、核心程序
..........................................................................
% Convert radians to degrees
ang = Y(:,1:2)*180/pi;
% Set up first frame
figure('Color', 'white')
subplot(2,1,1)
plot(T, ang, 'LineWidth', 2)
hh1(1) = line(T(1), ang(1,1), 'Marker', '.', 'MarkerSize', 20, ...
'Color', 'b');
hh1(2) = line(T(1), ang(1,2), 'Marker', '.', 'MarkerSize', 20, ...
'Color', 'r');
xlabel('time (sec)')
ylabel('angle (deg)')
subplot(2,1,2)
hh2 = plot([0, x(1,1);x(1,1), x(1,2)], [0, y(1,1);y(1,1), y(1,2)], ...
'.-', 'MarkerSize', 20, 'LineWidth', 2);
axis equal
axis([-2*L 2*L -2*L 2*L])
ht = title(sprintf('Time: %0.2f sec', T(1)));
% Get figure size
pos = get(gcf, 'Position');
width = pos(3);
height = pos(4);
% Preallocate data (for storing frame data)
mov = zeros(height, width, 1, length(T), 'uint8');
% Loop through by changing XData and YData
for id = 1:length(T)
% Update graphics data. This is more efficient than recreating plots.
set(hh1(1), 'XData', T(id), 'YData', ang(id, 1))
set(hh1(2), 'XData', T(id), 'YData', ang(id, 2))
set(hh2(1), 'XData', [0, x(id, 1)], 'YData', [0, y(id, 1)])
set(hh2(2), 'XData', x(id, :), 'YData', y(id, :))
set(ht, 'String', sprintf('Time: %0.2f sec', T(id)))
% Get frame as an image
f = getframe(gcf);
% Create a colormap for the first frame. For the rest of the frames,
% use the same colormap
if id == 1
[mov(:,:,1,id), map] = rgb2ind(f.cdata, 256, 'nodither');
else
mov(:,:,1,id) = rgb2ind(f.cdata, map, 'nodither');
end
end
% Create animated GIF
imwrite(mov, map, 'animation.gif', 'DelayTime', 0, 'LoopCount', inf)
up164
三、仿真结论


文章详细介绍了二级倒立摆的理论基础,包括其作为复杂非线性系统的特性,以及在控制理论中的应用。核心程序部分展示了MATLAB代码,用于将倒立摆的运动数据转换为图形动画,呈现系统的动态行为。通过仿真,验证了控制策略在稳定二级倒立摆系统中的有效性。
1731

被折叠的 条评论
为什么被折叠?



