初学者哈哈,因为一次建模需要,速学机器人仿真。记录下自己的小成果,万一哪天又用到了呢?
(一个很粗糙的蛇形机械手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?角度活动)
文章图片
再贴出完整源码:
【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参数表以其他参数:
文章图片
参数含义如下:
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列各连杆的长度,使其能够在解空间内
%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]);
初次学习,如果有误,希望大家留言,一起进步鸭!
推荐阅读
- 最优化问题|改进交叉算子的自适应人工蜂群黏菌算法
- matlab|嵌入均衡池的黏菌优化算法
- 最优化问题|加入领导者的黏菌优化算法
- MATLAB图形界面|基于Matlab的汽车出入库计时计费系统
- Matlab旅程|MATLAB的结构化程序设计
- matlab 内存管理 清理内存
- matlab中使用colormap没有效果
- Matlab|圆柱绕流
- MATLAB|Splart-Allmaras湍流模型及MATLAB编程~
- regionprops统计被标记的区域的面积分布,显示区域总数。