MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制 1.搭建了六自由度Stewart并联机器人simulink/simscape仿真模型 2.建立了逆向运动学仿真 输入位置和姿态求解各个杆长 3.运用pid控制器进行动力学跟踪控制
江湖上混机器人这行的,谁没被Stewart平台虐过?这玩意儿六个腿支棱着动平台,搞起逆解来能把人绕晕。今天咱就撸起袖子,用MATLAB整活这个铁疙瘩的仿真,顺便把PID那套控制玄学给安排上。
先看硬件架构(啪地甩出Simscape模型截图)。在Simulink里搭这货得用Multibody模块,重点在于铰链连接别装反——上平台六个球铰,下平台六个虎克铰,装错一个直接原地劈叉。核心参数得在InitFcn里配好:
platformRadius = 0.5; % 动平台半径 baseRadius = 0.8; % 静平台半径 legMinLength = 0.7; % 别让执行器缩成棍 cylinderRadius = 0.03; % 支腿粗细影响视觉效果建模时最坑爹的是坐标系对齐,动平台的Z轴必须垂直于安装面。有个邪门技巧:先画个正六边形当安装点,用齐次变换矩阵摆位置:
theta = (0:60:300)' + 30; % 六等分加30度偏移 upperPoints = platformRadius * [cosd(theta), sind(theta), zeros(6,1)]; lowerPoints = baseRadius * [cosd(theta), sind(theta), zeros(6,1)];逆运动学才是重头戏。输入位姿[X,Y,Z,Roll,Pitch,Yaw],算出六个腿要伸多长。核心是找动平台各点在基坐标下的位置:
function L = inverseKinematics(pose, upperPoints, basePoints) R = eul2rotm(pose(4:6), 'ZYX'); % 欧拉角转旋转矩阵 T = [R, pose(1:3)'; zeros(1,3), 1]; transformedPoints = (T * [upperPoints'; ones(1,6)])'; L = vecnorm(transformedPoints(:,1:3) - basePoints, 2, 2); end注意这里用的ZYX旋转顺序,和无人机姿态控制一个套路。实际跑起来得加个死区限制,防止算出来腿长超出物理限制。
动力学控制这块,PID参数调得人想摔键盘。建议先在单自由度系统试水:
Kp = 1200; % 刚性不够就加P Ki = 50; % 抗静差得靠这个 Kd = 300; % 阻尼大了会抖成帕金森Simulink里做力控时,要把PID输出转换成执行器力。有个骚操作是用Velocity-Force接口,把控制量通过Jacobian矩阵转换:
Force = J' * PID_output; % 注意转置别写反调试时盯着支腿加速度曲线,要是出现高频抖动,八成是微分项过冲了。这时候掏出滤波大法:
dTermFilter = tf([1],[0.02 1]); % 一阶低通拯救世界最后说几个血泪教训:1.仿真步长别超过1ms,否则接触力计算会抽风 2.初始位姿一定要在可达工作空间内 3.PID的抗饱和处理必须做,不然积分项能上天。
跑起来后效果挺带劲——平台在三维空间里蛇皮走位,六个执行器像跳机械舞似的此起彼伏。虽然现实中的Stewart平台可能更暴躁,但至少在仿真里,咱算是把这六条腿的牲口给驯服了。