目录
Stewart平台,又称六自由度平台,是一种可以在三个平移和三个旋转方向上进行精确运动控制的机械装置。它通常由六个可伸缩的支腿连接在两个平行的板之间,其中一个板是固定的,另一个板可以通过改变支腿的长度来移动。这种平台常用于飞行模拟器、机器人、航天器、工程测试等领域,因为它可以精确地模拟多维度的运动。
六自由度Stewart平台(6-DOF Stewart Platform)是一种精密的空间运动模拟装置,其设计允许在六个自由度上进行独立的运动,包括三维空间的平移(沿X、Y、Z轴)和旋转(绕X、Y、Z轴)。这种平台广泛应用于飞行模拟、机器人技术、精密测量设备、虚拟现实等领域。Stewart平台由固定底座、活动平台和六根连杆组成。每根连杆的两端分别连接在一个固定基座上的球关节和活动平台上另一个球关节。通过改变每根连杆的长度(通常是通过伺服电机驱动的伸缩机构实现),平台可以实现全方位的运动。
1.Stewart平台理论概述
六自由度Stewart平台(6-DOF Stewart Platform)是一种高性能的并联机器人,以其发明者Scott Stewart命名,它能够实现空间中6个自由度的独立运动,包括三个平动自由度(X、Y、Z方向的直线运动)和三个转动自由度(绕X、Y、Z轴的旋转)。该平台由一个上平台、一个下平台以及六根连杆(通常由伺服电机驱动的伸缩机构)组成,每根连杆通过球形接头分别连接上下平台,形成六个闭环的驱动链路。
-
上平台(Mobile Platform):上平台是六自由度Stewart平台的工作面,可以根据指令在空间中完成复杂的运动。
-
下平台(Fixed Platform):下平台固定不动,作为整个系统的基准。
-
连杆(Legs):六根连杆的长度可以独立调整,通过伺服电机的精确控制,使上平台在空间中实现六个自由度的运动。
坐标系定义: 设定固定基座坐标系为Oxyz,活动平台坐标系为O'x'y'z'。连杆长度为li,连杆与固定基座的连接点坐标为Pi,连杆与活动平台的连接点坐标为Pi′。
几何关系: 通过球关节的几何约束,连杆末端与平台连接点之间的距离始终保持不变,即:
动力学模型: 平台的运动可以通过调节连杆长度来实现。设平台相对于基座的姿态由欧拉角(俯仰角θ、偏航角ψ、滚动角φ)和位移(dx、dy、dz)描述,活动平台坐标系下的连杆末端坐标Pi′ 可以通过齐次变换矩阵T 描述:
其中 T 包含旋转矩阵 R 和平移向量t,R 可以通过欧拉角计算得到。
牛顿-拉格朗日方程: 平台的动力学行为可以通过牛顿-拉格朗日方程描述,其中包括动能 T 和势能 V:
这里的qi 表示平台的广义坐标(包括旋转和平移的六个自由度),q˙i 是其时间导数,τi 是外部作用力(即连杆驱动力)。
连杆长度计算: 根据三角关系,连杆长度可以通过平台的当前位置和姿态计算得到。对于第i 根连杆,有:
其中,(x,y,z) 是活动平台坐标系原点在基座坐标系下的位置,(xi′,yi′,zi′) 是连杆末端在活动平台坐标系下的位置。
逆运动学求解: 实际应用中,通常需要通过给定平台期望的姿态和位置,反向计算出各连杆应有的长度。这涉及到复杂的非线性优化问题,常用的求解方法有解析法、数值法和迭代法等。
2.matlab程序
.................................................................
%% 结果输出与可视化
fprintf('** 结果展示 **\n')
figure()
view(10, 10)
hold on
% 绘制平台与基座上的点及连线
for i = 1 : length(bp7) - 1
v1 = [pp7(i,:); pp7(i+1,:)];% 平台上相邻两点连线
v2 = [bp7(i,:); bp7(i+1,:)];% 基座上相邻两点连线
v3 = [pp7(i,:); bp7(i,:)];% 平台与基座对应点连线
% 输出初始状态下第i个执行器的长度(单位:mm)
fprintf('Actuator %d initial length: %d mm\n', i, pdist(v3,'euclidean'))
plot3(v1(:,1),v1(:,2),v1(:,3),'k')% 平台上相邻点连线(黑色实线)
plot3(v2(:,1),v2(:,2),v2(:,3),'k')% 基座上相邻点连线(黑色实线)
plot3(v3(:,1),v3(:,2),v3(:,3),':k')% 平台与基座对应点连线(黑色虚线)
% 计算平台点绕原点旋转后的坐标,并绘制旋转后对应点及连线
points_platform_h_i = pp7(i,:)-[0,0,h];
points_platform_h_ip1 = pp7(i+1,:)-[0,0,h];
vv1 = [points_platform_h_i*Rmat+[0,0,h]; points_platform_h_ip1*Rmat+[0,0,h]];
plot3(vv1(:,1),vv1(:,2),vv1(:,3),'r') % 平台上旋转后相邻点连线(红色实线)
vv2 = [points_platform_h_i*Rmat+[0,0,h]; bp7(i,:)];
% 输出旋转后第i个执行器的长度(单位:mm)
fprintf('Actuator %d final length : %d mm\n', i, pdist(vv2,'euclidean'))
plot3(vv2(:,1),vv2(:,2),vv2(:,3),'--r')
end
grid on
i = length(bp7);
v1 = [pp7(i,:); pp7(1,:)];
v2 = [bp7(i,:); bp7(1,:)];
plot3(v1(:,1),v1(:,2),v1(:,3),'k')
plot3(v2(:,1),v2(:,2),v2(:,3),'k')
v3 = [pp7(i,:); bp7(i,:)];
plot3(v3(:,1),v3(:,2),v3(:,3),':k')
fprintf('Actuator %d initial length: %d mm\n', i, pdist(v3,'euclidean'))
points_platform_h_i = pp7(i,:)-[0,0,h];
points_platform_h_ip1 = pp7(1,:)-[0,0,h];
vv1 = [points_platform_h_i*Rmat+[0,0,h]; points_platform_h_ip1*Rmat+[0,0,h]];
plot3(vv1(:,1),vv1(:,2),vv1(:,3),'r')
vv2 = [points_platform_h_i*Rmat+[0,0,h]; bp7(i,:)];
fprintf('Actuator %d final length : %d mm\n', i, pdist(vv2,'euclidean'))
plot3(vv2(:,1),vv2(:,2),vv2(:,3),'--r')
up4065