Matlab仿真六轴机械臂常用代码 (常见报错集锦)

1. 

此类型的变量不支持使用点进行索引。

出错 SerialLink/animate (第 105 行)
                        if h.link(L) ~= 0

出错 SerialLink/plot (第 299 行)
    robot.animate(qq);
【报错解决:上一次生成的plot图还没关】

2.

索引超出数组元素的数目(4)。

出错 SerialLink/plot>create_robot (line 468) d = norm( d(4:6)-d(1:3) ) / 72;

出错 SerialLink/plot (line 251) handle = create_robot(robot, opt);

【报错解决:

命令行输入

edit SerialLink.plot + 回车 

在 function plot 那段改成这样

    [myModifyForViewErrorA, myModifyForViewErrorB]=view(gca);
    if isequal([myModifyForViewErrorA, myModifyForViewErrorB],[0,90])
        view(3)
    end


 也就是加一个 view(3)

保存+关闭+重启 即可 

3. 常用代码 

clear;
close all;
clc;
%% 基于MATLAB的关节型六轴机械臂仿真

%% 参数定义
%机械臂为六自由度机械臂
clear L;
 
%角度转换
angle=pi/180;  %度
 
%D-H参数表

theta1 = 0; D1 = 460;    A1 = -155  ; alpha1 = -pi/2;  offset1 = 0;
theta2 = 0; D2 =   0;    A2 = -614  ; alpha2 = 0;     offset2 = 0;
theta3 = 0; D3 =   0;    A3 = -199.5; alpha3 = -pi/2;  offset3 = 0;
theta4 = 0; D4 = 600;    A4 = 0;      alpha4 = pi/2;  offset4 = 0;
theta5 = 0; D5 =   0;    A5 = 0.46  ; alpha5 = -pi/2; offset5 = 0;
theta6 = 0; D6 = 100;    A6 = 0;      alpha6 = 0;    offset6 = 0;

%% DH法建立模型,关节转角,关节距离,连杆长度,连杆转角,关节类型(0转动,1移动)

L(1) = Link([theta1, D1, A1, alpha1, offset1], 'standard')
L(2) = Link([theta2, D2, A2, alpha2, offset2], 'standard')
L(3) = Link([theta3, D3, A3, alpha3, offset3], 'standard')
L(4) = Link([theta4, D4, A4, alpha4, offset4], 'standard')
L(5) = Link([theta5, D5, A5, alpha5, offset5], 'standard')
L(6) = Link([theta6, D6, A6, alpha6, offset6], 'standard')

% 定义关节范围
L(1).qlim =[-160*angle, 180*angle];  %% +90
L(2).qlim =[-120*angle,120*angle];
L(3).qlim =[-180*angle, 180*angle];
L(4).qlim =[-190*angle, 190*angle];
L(5).qlim =[-360*angle, 360*angle];
L(6).qlim =[-200*angle, 200*angle];

%% 显示机械臂
robot0 = SerialLink(L,'name','six');
f = 1 	
%画在第1张图上
% 初始角 -90 90 0 0 0 0 
jA = deg2rad(-100)
jB = deg2rad(80)
jC = deg2rad(0)
jD = deg2rad(0)
jE = deg2rad(-30)
jF = deg2rad(0)

theta = [jA jB jC jD jE jF];				%初始关节角度
figure(f)

p=robot0.fkine(theta);       			%fkine正解函数,根据关节角theta,求解出末端位姿p

robot0.plot(theta);
title('六轴机械臂模型');

robot0.teach

H = double(p)

%世界对法兰的矩阵
AngleH = H(1:3,1:3)  
B = AngleH(1,2)
AngleHDeg = rad2deg(rotm2eul(AngleH,'ZYX'))

phi   = rad2deg(atan2(AngleH(2,3), -AngleH(1,3)))      % 第一次旋转角度(绕 Z 轴)
theta = rad2deg(atan2(sqrt(AngleH(1,3)^2 + AngleH(2,3)^2), AngleH(3,3)))             % 第二次旋转角度(绕 X' 轴)
psi   = rad2deg(atan2(AngleH(1,2), AngleH(1,1)))       % 第三次旋转角度(绕 Z'' 轴)

%% 正向过 绕x轴 (yaw)旋转180度 保持z轴不变)
P1= [
    1  0 0  0
    0  -1 0  0
    0  0 1  0
    0  0 0  1] ;
%%  正向过程 绕z(yaw轴旋转-90度)
P2 = [0 -1 0 0
      1 0 0 0
      0  0 1 0
      0 0 0 1];

%% 末端相对法兰的姿态矩阵
TranTool = [
0.87773 -0.0049 -0.4799 -0.698
0.0093 0.9999 0.0027 -70.447
0.4798 -0.010 0.8772 434.456
0      0      0      1];

% 法兰相对世界坐标的姿态 * 法兰相对末端的坐标旋转 = 末端坐标系下法兰对世界的姿态
H2 = H * P1 *P2

% 末端坐标系下法兰对世界的姿态 * 末端相对法兰的姿态矩阵
Result = H2*(TranTool)



% 提取平移向量 XYZ
XYZ = Result(1:3, 4);

invTran = inv(TranTool)

%%测试矩阵乘法
AngleR = invTran  * inv(P2) * inv(P1) * H




 
% 提取矩阵 R_xyz

ResultInv = AngleR(1:3,1:3);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值