matlab|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启动工具箱。
matlab|matlab蛇形机械手仿真建模
文章图片


【开始仿真】
先贴出效果图:
(1)初始时呈竖直形态。
matlab|matlab蛇形机械手仿真建模
文章图片


(2)调节各关节角度。
matlab|matlab蛇形机械手仿真建模
文章图片


(3)各种角度都成(这里限制了每个关节只能在 ±30?角度活动)
matlab|matlab蛇形机械手仿真建模
文章图片


再贴出完整源码:
【matlab|matlab蛇形机械手仿真建模】完整源码:

clear L warning off %thetadaalphasigma L1 = Link([00000]); % 定义连杆的DH参数 L2 = Link([pi00.4300]); L3 = Link([ 000.4300]); L4 = Link([ 000.4300]); L5 = Link([ 000.4300]); L6 = Link([ 000.4300]); L7 = Link([ 000.4300]); % 限制转动角度 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参数表以其他参数:
matlab|matlab蛇形机械手仿真建模
文章图片

参数含义如下:
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)

输出结果:
matlab|matlab蛇形机械手仿真建模
文章图片


【遇到的问题】
其他给忘了诶,就剩下面这个了。。。
如果修改杆的个数出现了下面报错:
错误使用 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列各连杆的长度,使其能够在解空间内
%thetadaalphasigma L1 = Link([00000]); % 定义连杆的DH参数 L2 = Link([pi00.4300]); L3 = Link([ 000.4300]); L4 = Link([ 000.4300]); L5 = Link([ 000.4300]); L6 = Link([ 000.4300]); L7 = Link([ 000.4300]);


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

    推荐阅读