三自由度机械臂连续轨迹控制Simulink仿真

博客搬家到自己搭建的 主页(wonghaotian.com) 啦q(≧▽≦q),大家快来逛逛鸭!

 

提供完整文件下载(Click to SAVE)

DEMO

 

控制要求

机械臂初始时刻姿态自行确定,经过5s机械臂末端执行器沿直线运动到目标点x=0.3m、y=0.5m、z=1.2m,5s之后机械臂停留在目标点。沿直线运动属于连续轨迹控制,不能直接指定起始点和终止点进行点对点控制。

 

结构参数

机械臂结构参数

 

分析流程

  1. 在Solidworks中建立真实机械臂模型,针对MATLAB修改模型,把电机等和相连杆件合并成一个刚体,导出到SimMechanics中,检查坐标系和初始位置是否正确;
  2. 修改转动副参数,添加信号输入、输出端口,连接PID控制回路;
  3. 插入示波器测量末端x、y、z三个方向上的位移,插入XY、YZ、XZ三个平面内的轨迹显示器;
  4. 编写位置反解函数;
  5. 先输入(x,y,z)坐标进行点位控制的调试,确认位置反解结果是否正确;
  6. 确定无误后,插入x、y、z与时钟变量u的函数关系;
  7. 调试PID参数,以获得更平稳、更接近直线轨迹的运动。
Simulink模型

 

 

 

位置反解程序

MATLAB在符号计算方面很弱,关于运动学逆解公式是怎么得来的,这里有一条经验:三个自由度用 MATLAB 直接求解是解不出来的,我们注意到q1直接由x、y可以得出,跟其他的没什么关系,这样把原本的3个方程3个未知数转化成2个方程2个未知数,MATLAB轻松求解。当然,Mathematica可以直接求解三元符号方程组。

function [q1,q2,q3] = fcn(x,y,z)
% Iuput: 目标点坐标x,y,z;
% Output: 各关节转角q1,q2,q3;
%% 结构参数
L1 = 0.3;    % 转动副2回转中心到地面的垂直距离
L2 = 0.6;    % 转动副2、3之间的距离
L3 = 0.6;    % 转动副3回转中心到末端探头球心的距离
%% 运动学逆解
q1 = -atan(x/y);
q2 = -2*atan((2*L2*(L1 - z) + (L2^2*((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2))/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3) + (L3^2*((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2))/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3) - ((L1 - z)^2*((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2))/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3) - ((x^2 + y^2)*((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2))/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3) - (2*L2*L3*((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2))/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3))/(2*L2*(x^2 + y^2)^(1/2) + L2^2 - L3^2 + x^2 + y^2 + (L1 - z)^2));
q3 = -2*atan(((x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3)*(L2^2 + L3^2 - x^2 - y^2 - (L1 - z)^2 + 2*L2*L3))^(1/2)/(x^2 - L3^2 - L2^2 + y^2 + (L1 - z)^2 + 2*L2*L3));
end

这里是空间3自由度,q1比较明显,在平面3自由度中也是完全一样的,一定有一个自由度可以被转化掉,但是不那么明显。在平面三自由度位置反解中,你会发现只能列出2个约束方程,可是要解出3个未知量,所以必须再加一个方程,也就是末端姿态角theta,要求机械臂不仅运动到指定点,而且满足末端执行器角度要求。这里我也把平面三自由度的位置反解程序给出来吧,大家自己体会。

% 平面三自由度位置反解程序

% 直接列3个方程企图求解3个未知量
% 大家可以试一下,用MATLAB解这个符号方程组会让你怀疑人生,根本解不出来
syms L1 L2 L3 q1 q2 q3 x y theta
eqn1 = x == L1 * cos(q1) + L2 * cos(q1 + q2) + L3 * cos(theta);
eqn2 = y == L1 * sin(q1) + L2 * sin(q1 + q2) + L3 * sin(theta);
eqn3 = theta == q1 + q2 + q3;
[q1, q2, q3] = solve(eqn1, eqn2, eqn3, q1, q2, q3)


% 我们对上述程序改动一下,干掉3个方程
% 既然 theta=q1+q2+q3 我们考虑只求q1、q2,之后q3自然出来了
syms L1 L2 L3 q1 q2 q3 x y theta
syms u v
eqn1 = L1 * cos(q1) + L2 * cos(q1 + q2) == u;  % 其中 u = x-L3*cos(theta)
eqn2 = L1 * sin(q1) + L2 * sin(q1 + q2) == v;  % 其中 v = y-L3*sin(theta)
[q1, q2] = solve(eqn1, eqn2, q1, q2)
q3 = theta - q1 - q2

 

  • 35
    点赞
  • 315
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
### 回答1: 自由度机械臂轨迹跟踪Matlab仿真程序是一种利用Matlab软件编程实现的模拟机械臂控制运动轨迹的过程。该程序可以模拟机械臂自由度上的运动,并根据给定的轨迹机械臂进行跟踪控制。 在编写该仿真程序时,首先需要定义机械臂的结构和参数,包括关节长度、关节角度和工具末端位置等。然后根据机械臂运动方程,利用运动学和动力学模型推导出控制算法。其中,常用的控制算法包括PD控制PID控制、模糊控制等。 使用Matlab软件的Simulink工具箱,可以方便地建立机械臂仿真模型,并通过连接器模块和传感器模块获取机械臂的状态信息。然后,根据控制算法和轨迹规划算法,通过控制器模块对机械臂进行控制,使其沿着给定的轨迹进行运动跟踪。 在仿真程序中,可以对机械臂控制性能进行评估和优化。通过调整参数和控制策略,可以实现机械臂的高精度轨迹跟踪,提高机械臂运动速度和稳定性。 总之,自由度机械臂轨迹跟踪Matlab仿真程序可以帮助工程师和研究人员在计算机上进行机械臂控制算法的开发和验证,为实际机械臂控制系统设计提供指导和参考。 ### 回答2: 自由度机械臂轨迹跟踪在matlab中的仿真程序通常基于运动学模型和控制算法来实现。 首先,运动学模型可以描述机械臂运动过程。对于自由度机械臂来说,可以使用DH参数来建立运动学模型。DH参数包括每个关节的位移、旋转角度和长度等,通过定义关节变量和链式法则可以得到末端执行器的位置和姿态。 在matlab中,可以利用符号计算工具箱对DH参数进行符号运算,建立机械臂运动学方程。通过输入机械臂的关节角度,可以得到末端执行器的位置和姿态。这样,可以根据所需的轨迹生成函数,设定机械臂的目标位置和姿态。 其次,控制算法可以实现机械臂轨迹跟踪。常用的控制算法包括PID控制器、模型预测控制和反馈线性化控制等。在matlab中,可以使用控制系统工具箱来设计和实现这些控制算法。 通过将机械臂运动学模型和控制算法结合起来,可以编写matlab仿真程序进行轨迹跟踪。程序的输入包括目标轨迹机械臂的初始状态,输出包括实际轨迹轨迹误差等。 在仿真程序中,可以通过调整控制参数来优化轨迹跟踪的性能。根据实际情况,可以对机械臂运动范围、速度限制和负载要求进行仿真和分析,以验证轨迹跟踪算法的有效性和鲁棒性。 综上所述,通过matlab仿真程序可以实现自由度机械臂轨迹跟踪,评估控制算法的性能,并优化系统参数。这对于机械臂控制和应用具有重要意义。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值