matlab蛇形机械手仿真建模

初学者哈哈,因为一次建模需要,速学机器人仿真。记录下自己的小成果,万一哪天又用到了呢?

(一个很粗糙的蛇形机械手demo)

基础理论可参考B站教学视频(我没看完):

【机械臂运动学教程】机械臂+旋转矩阵+变换矩阵+DH+逆解+轨迹规划+机器人+教程

 

【仿真工具】

MATLAB R2019a + robot-9.10

robot-9.10需要自行下载安装,安装官方地址:

http://petercorke.com/wordpress/toolboxes/robotics-toolbox

安装教程:matlab安装Robotics Toolbox 机器人工具箱,内附百度云盘下载链接

每次启动matlab需要重新输入startup_rvc启动工具箱。

 

【开始仿真】

先贴出效果图:

(1)初始时呈竖直形态。

 

(2)调节各关节角度。

 

(3)各种角度都成(这里限制了每个关节只能在 ±30⁰角度活动)

 

再贴出完整源码:

完整源码:

clear L
warning off
%        theta     d       a        alpha     sigma
L1 = Link([0       0       0         0         0     ]); % 定义连杆的DH参数
L2 = Link([pi      0       0.43      0         0     ]);
L3 = Link([ 0      0       0.43      0         0     ]);
L4 = Link([ 0      0       0.43      0         0     ]);
L5 = Link([ 0      0       0.43      0         0     ]);
L6 = Link([ 0      0       0.43      0         0     ]);
L7 = Link([ 0      0       0.43      0         0     ]);

% 限制转动角度
L1.qlim=[-pi/6,pi/6];
L2.qlim=[pi*5/6,pi];
L3.qlim=[-pi/6,pi/6];
L4.qlim=[-pi/6,pi/6];
L5.qlim=[-pi/6,pi/6];
L6.qlim=[-pi/6,pi/6];
L7.qlim=[-pi/6,pi/6];
L8.qlim=[-pi/6,pi/6];

mrbt=SerialLink([L1 L2 L3 L4 L5 L6 L7], 'name', '蛇形臂', 'base',transl(0,0,0.2)*troty(pi/2));
q0 = [0,pi,0,0,0,0,0];    % 设置输出时的theta姿态,初始为竖直状态

mrbt.teach;
result = mrbt.getpos(); % 调节完成后按X,可得到调后的变量
axis([-3 3 -3 3 0 4])
mrbt.plot(q0);
disp("D-H参数表及其他参数:")
mrbt.display();

% 运动学正解:根据关节角结算出末端位姿
T = mrbt.fkine([-13.8,150,4.8,7.8,8.4,8.4,23.4]);

% 运动学逆解:根据末端位姿结算出关节角
qi = mrbt.ikine(T);
disp('根据关节角,计算末端位姿:')
disp(T)
disp('根据末端位姿,计算关节角:')
disp(qi)

 

【输出结果及解析】

其中,mrbt.display()输出D-H参数表以其他参数:

参数含义如下:

theta:关节角

d:横距

a:杆件长度

alpha:扭转角

sigma:关节类型(0代表旋转关节,非0代表移动关节;默认为0)

 

具体参考以下链接:

Matlab机器人工具箱机械手建模详解

matlab机器人工具箱攻略——矩阵变换,运动学

matlab中Link函数与SeriaLink函数学习笔记

4自由度臂型机器人MATLAB仿真

 

运动学正解与逆解:

比较糙的示例,根据需要自行使用:

% 运动学正解:根据关节角结算出末端位姿
T = mrbt.fkine([-13.8,150,4.8,7.8,8.4,8.4,23.4]);

% 运动学逆解:根据末端位姿结算出关节角
qi = mrbt.ikine(T);
disp('根据关节角,计算末端位姿:')
disp(T)
disp('根据末端位姿,计算关节角:')
disp(qi)

输出结果:

 

【遇到的问题】

其他给忘了诶,就剩下面这个了。。。

如果修改杆的个数出现了下面报错:

错误使用 SerialLink/fkine (line 85) q must have 9 columns

检查一下参数是否超出或者遗漏。若检查后没有问题,不慌。。。也可能是超出解空间的问题。

(1)第一种解决方案:

修改plot的坐标轴,扩大x,y或z的范围

axis([-3 3 -3 3 0 4])

表示:axis([xmin xmax ymin ymax zmin zmax])

(2)第二种解决方案:

修改下面a列各连杆的长度,使其能够在解空间内

%        theta     d       a        alpha     sigma
L1 = Link([0       0       0         0         0     ]); % 定义连杆的DH参数
L2 = Link([pi      0       0.43      0         0     ]);
L3 = Link([ 0      0       0.43      0         0     ]);
L4 = Link([ 0      0       0.43      0         0     ]);
L5 = Link([ 0      0       0.43      0         0     ]);
L6 = Link([ 0      0       0.43      0         0     ]);
L7 = Link([ 0      0       0.43      0         0     ]);

 

初次学习,如果有误,希望大家留言,一起进步鸭!

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值