本科毕设,内容是一个四自由度机械臂的轨迹规划研究,要实现的功能是通过上位机实现轨迹规划功能。 系统环境为Windows 10 软件环境为Matlab、Qt5
内容介绍
- 通过改进版DH法建立机械臂运动学模型
- 对模型进行正逆运动学分析
- 分析模型的工作空间
- 关节空间中的三次多项式和五次多项式轨迹规划
- 笛卡尔空间中的直线轨迹规划和圆弧轨迹规划
直线和圆弧轨迹规划函数和test4.m
function [theta] = myikine2(pointT, q5, step)
a2 = 135; a3 = 147; a4 = 61; d5 = 131;
theta = zeros(step, 5);
for i = 1:step
px = pointT(i, 1);
py = pointT(i, 2);
pz = pointT(i, 3);
%theta1
theta1 = atan2(py, px);
%theta3
temp1 = px^2 + py^2 + pz^2 - 2 * a4 * (cos(theta1) * px + sin(theta1) * py) + 2 * pz * d5 + a4^2 + d5^2 - a2^2 - a3^2;
temp2 = 2 * a2 * a3;
theta3 = acos(temp1 / temp2);
%theta2
temp1 =- (pz + d5);
temp2 = ((cos(theta3) * a3 + a2)^2 + (sin(theta3) * a3)^2)^0.5;
temp3 = sin(theta3) * a3;
temp4 = cos(theta3) * a3 + a2;
theta2 = asin(temp1 / temp2) - atan2(temp3, temp4);
%theta4
theta4 = -theta2 - theta3;
theta(i, (1:4)) = [theta1, theta2, theta3, theta4];
end
theta(:, 5) = reshape(linspace(q5(1), q5(2), step), step, 1);
正逆运动学函数和test2.m
% Modified DH 建模dobot
clear, clc, close all;
%建立机器人模型
% 关节角 关节偏距 连杆长度 连杆转角 旋转关节 偏差
% theta d a alpha sigma offset
L(1) = Link([0 0 0 0 0 0], 'modified');
L(2) = Link([0 0 0 -pi / 2 0 0], 'modified');
L(3) = Link([0 0 135 0 0 0], 'modified');
L(4) = Link([0 0 147 0 0 0], 'modified');
L(5) = Link([0 131 61 -pi / 2 0 0], 'modified');
%连接连杆
robot = SerialLink(L, 'name', 'Dobot');
angle1 = [-pi / 6, -pi / 6, pi / 3, -pi / 6, pi / 4];
angle2 = [pi / 3, -pi / 60, pi / 30, -pi / 60, -pi / 4];
%运动学正解
fk1 = myfkine(angle1); %正解函数
fk2 = robot.fkine(angle1);%工具箱正解函数
%fk1 = myfkine(angle2); %正解函数
%fk2 = robot.fkine(angle2);%工具箱正解函数
%运动学逆解
ik1 = myikine(fk1);%逆解函数
%实际上robot.ikine函数并不可用
%ik2 = robot.ikine(fk1);%工具箱逆解函数
degik1 = rad2deg(ik1);
%再次运动学正解
ik1_fk = myfkine(ik1(1, :));
关节空间轨迹规划代码和test3.m
function [q, qd, qdd, t] = cubic_traj(theta, V, T, step)
%ζʽ
q = zeros(step, 5); %Ƕ
qd = zeros(step, 5); %ٶ
qdd = zeros(step, 5); %Ǽٶ
t = reshape(linspace(T(1), T(2), step), step, 1);
tf = T(2) - T(1);
a0 = theta(1, :);
a1 = V(1, :);
a2 = (-3 * theta(1, :) + 3 * theta(2, :) - 2 * V(1, :) * tf - V(2, :) * tf) / tf^2;
a3 = (2 * theta(1, :) - 2 * theta(2, :) + V(1, :) * tf + V(2, :) * tf) / tf^3;
for i = 1:5
if i == 4
q(:, i) =- (q(:, 3) + q(:, 2));
else
q(:, i) = a0(i) + a1(i) * (t - t(1)) + a2(i) * ((t - t(1)).^2) + a3(i) * ((t - t(1)).^3);
end
qd(:, i) = a1(i) + 2 * a2(i) * (t - t(1)) + 3 * a3(i) * ((t - t(1)).^2);
qdd(:, i) = 2 * a2(i) + 6 * a3(i) * (t - t(1));
end
完整源码下载: