六自由度运动平台(Stewart并联机构)通过六条可伸缩支链共同驱动上平台,可以实现三个平移自由度和三个转动自由度,常用于飞行模拟、振动试验和运动平台等场景。
我在MoHub上发现了一个基于MWORKS Sysplorer的六自由度液压平台案例。获取模型后,我结合Modelica模型和仿真动画进行了分析。案例不仅搭建了Stewart平台的机械与液压系统,还加入了轨迹规划和逆运动学计算,可以将给定的平台位姿转换成六个液压缸的伸长量。
下面主要看它如何完成“目标位姿 → Stewart逆解 → 六缸驱动 → 平台运动”这条链路。
一、这个案例解决什么问题
Stewart平台的控制难点在于六条支链必须协调运动。
例如,希望平台向上移动10 mm,看似只是一个简单的Z方向平移,但实际上六条液压缸都需要按照平台几何结构同步改变长度;如果再加入滚转、俯仰和偏航,六条支链的伸缩关系会更加复杂。
因此,需要解决一个关键问题:
已知平台期望位姿,六条支链分别应该伸长多少?
这就是Stewart平台的逆运动学问题。
与正运动学相比,Stewart机构的逆运动学更加直接:给定平台的位置和姿态后,根据上下平台铰点的几何关系,可以分别计算六条支链的目标长度。
案例进一步把逆运动学结果送给液压驱动系统,因此整体过程可以概括为:
轨迹规划 → 目标位姿 → 逆运动学 → 六杆伸长量 → 液压缸驱动 → 平台运动
二、模型与逆运动学原理
模型主要由三部分组成:
-
MechanicsSystem.Stewart2:六自由度Stewart多体机械模型; -
HydraulicSystem.HydraulicSystem:六套换向阀和液压缸组成的驱动系统; -
TrajectorySystem:轨迹规划与逆运动学计算。
轨迹输入使用Ramp模块生成平滑的位置变化,例如:
Modelica.Blocks.Sources.Ramp rampX(
offset = x0,
startTime = StartTime,
height = x,
duration = Duration);
Modelica.Blocks.Sources.Ramp rampY(
offset = y0,
startTime = StartTime,
height = y,
duration = Duration);
相比直接给位置阶跃,Ramp可以让平台在一定时间内逐渐运动到目标位置,减少瞬时变化。
Stewart逆运动学
逆解的核心是根据目标平台位置和姿态,计算移动平台六个铰点在基座坐标系中的位置。
模型先根据滚转、俯仰和偏航角生成旋转矩阵,再将移动平台铰点旋转、平移到全局坐标系:
translation = pos + home;
R = TM.axesRotations(sequence, rot);
T = TM.to_T(R);
for i in 1:6 loop
pMoveJoint[:,i] =
T * pJoint[:,i] + translation;
legVector[:,i] =
pMoveJoint[:,i] - bJoint[:,i];
legLength[i] =
sqrt(legVector[1,i]^2
+ legVector[2,i]^2
+ legVector[3,i]^2);
extend[i] =
legLength[i] - legLength0;
end for;
其中:
-
pJoint:移动平台铰点坐标; -
bJoint:固定基座铰点坐标; -
legVector:每条支链的空间向量; -
legLength:当前支链长度; -
extend:相对初始长度的伸长量。
模型中的支链初始长度约为:
0.927237 m
平台初始高度约为:
0.944567 m
计算得到的六个extend最终作为六个液压缸的运动指令。
三、实际仿真效果
案例提供了两个不同用途的仿真模型。
1. 系统模型
模型将参考信号、液压驱动系统和Stewart多体机械平台连接起来。
液压部分包含六个三位四通换向阀、六个液压缸和节流元件,机械部分则由上下平台以及六条运动支链组成。
2. 六缸直接驱动
Stewart_RandomDrive采用六路错相正弦信号直接控制液压缸,不经过逆运动学。
这一工况主要用于检查:
液压驱动系统和多体机械结构能否正常联合运动。
从动画中可以看到,随着六个液压缸不断伸缩,上平台产生连续的平移和姿态变化。
3. 轨迹规划与逆解驱动
Stewart_Trajectory则先给定平台目标位姿,再通过逆运动学计算六条支链的伸长量。
本次轨迹中:
x = 0.01 m
y = 0.01 m
z = 0.01 m
逆解结果随后驱动六个液压缸,使平台按照规划轨迹发生相应运动。
仿真时间为0~6 s,结果能够直观看到:
位姿指令 → 六杆长度计算 → 液压驱动 → 平台运动
这一过程。
四、结果说明了什么
两个仿真模型验证的是不同环节。
Stewart_RandomDrive主要验证液压系统和机械模型之间的联合仿真关系,说明六个液压缸可以驱动Stewart机构产生六自由度运动。
Stewart_Trajectory则进一步加入逆运动学,使平台位姿不再由六个液压缸独立决定,而是先指定目标位置和姿态,再统一计算六条支链长度。
这也是Stewart平台控制中的关键思想:
真正需要规划的是平台位姿,而不是人工分别决定六根液压缸伸多少。
不过,这个案例主要用于系统结构和逆运动学原理验证。
当前模型将逆解得到的支链伸长量直接用于驱动液压系统,没有进一步建立每条液压缸的独立位置反馈,也没有加入摩擦补偿、机械间隙、结构柔性和力位混合控制。
因此,它验证的主要是:
轨迹规划 + 逆运动学 + 液压驱动的前向链路。
还不能直接等同于实际六自由度运动平台中的高精度闭环伺服控制。
五、总结
这个案例展示了如何在MWORKS Sysplorer中将Stewart六自由度平台的多体机械、液压驱动和轨迹规划连接起来进行系统级仿真。
其中最关键的部分是逆运动学:根据平台期望的位置和姿态,计算六条支链的目标长度,再由六个液压缸共同驱动平台完成运动。
两个Demo分别验证了六缸液压驱动和位姿逆解两条关键链路,可以用于理解Stewart平台的机构运动学、液压驱动以及轨迹规划方法。
如果继续扩展,还可以在此基础上加入液压缸位置闭环、姿态反馈、力控制和奇异位形检测,使模型进一步接近实际六自由度运动平台的控制系统。
本文分析的案例来自MoHub,案例页面提供相关模型及运行文件:
https://mohub.net/model/25437/summary
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_44849550/article/details/164877382




