目录

1. Matlab机器人工具箱

2. 创建MDH单机械臂

3. 创建MDH双臂机器人

UR构型双臂

如何进行轨迹仿真

4. MDH-双臂机器人


1. Matlab机器人工具箱

官方网站Robotics Toolbox | Peter Corke

下载,使用Matlab打开安装即可

机械臂文档SerialLink

2. 创建MDH单机械臂

clear;
clc;
%建立机器人模型
%       theta    d        a        alpha     offset
% L1=Link([0       0.4      0.025    pi/2   0      -pi/2     ]); %定义连杆的D-H参数
% L2=Link([pi/2   0        0.56     0       0     pi/2     ]);
% L3=Link([0       0        0.035    pi/2   0   0     ]);
% L4=Link([0       0.515    0        pi/2   0   0     ]);
% L5=Link([pi      0        0        pi/2   0   0     ]);
% L6=Link([0       0.08     0        0      0   0     ]);%   theta |         d |         a |     alpha |     type|   offset |
L(1)=Link([0       -72        150        0      0     pi/2  ],'modified'); % 关节1这里的最后一个量偏置
L(2)=Link([0       0          22        pi/2      0    -pi/2  ],'modified');
L(3)=Link([0       0           285        0          0    -pi/2 ],'modified');
L(4)=Link([0       220        3.5           -pi/2      0    0 ],'modified');robot=SerialLink(L,'name',''); %连接连杆,机器人取名manman
robot.plot([-pi/2,-10*pi/180,-12*pi/180,0]);%输出机器人模型,后面的角为输出时的theta姿态

其中,Link、Seriallink等函数可参考官方API说明SerialLink

参数解释

classdef Link < matlab.mixin.Copyableproperties% kinematic parameterstheta % kinematic: link angled     % kinematic: link offsetalpha % kinematic: link twista     % kinematic: link lengthjointtype  % revolute='R', prismatic='P' -- should be an enummdh   % standard DH=0, MDH=1offset % joint coordinate offsetname   % joint coordinate nameflip   % joint moves in opposite direction% dynamic parametersm  % dynamic: link massr  % dynamic: position of COM with respect to link frame (3x1)I  % dynamic: inertia of link with respect to COM (3x3)Jm % dynamic: motor inertiaB  % dynamic: motor viscous friction (1x1 or 2x1)Tc % dynamic: motor Coulomb friction (1x2 or 2x1)G  % dynamic: gear ratioqlim % joint coordinate limits (2x1)end

创建实例

% Examples::% A standard Denavit-Hartenberg link%        L3 = Link('d', 0.15005, 'a', 0.0203, 'alpha', -pi/2);% since 'theta' is not specified the joint is assumed to be revolute, and% since the kinematic convention is not specified it is assumed 'standard'.%% Using the old syntax%        L3 = Link([ 0, 0.15005, 0.0203, -pi/2], 'standard');% the flag 'standard' is not strictly necessary but adds clarity.  Only 4 parameters% are specified so sigma is assumed to be zero, ie. the joint is revolute.%%        L3 = Link([ 0, 0.15005, 0.0203, -pi/2, 0], 'standard');% the flag 'standard' is not strictly necessary but adds clarity.  5 parameters% are specified and sigma is set to zero, ie. the joint is revolute.%%        L3 = Link([ 0, 0.15005, 0.0203, -pi/2, 1], 'standard');% the flag 'standard' is not strictly necessary but adds clarity.  5 parameters% are specified and sigma is set to one, ie. the joint is prismatic.%% For a modified Denavit-Hartenberg revolute joint%        L3 = Link([ 0, 0.15005, 0.0203, -pi/2, 0], 'modified');


3. 创建MDH双臂机器人

参考知乎专栏:OpenRobotSL - 知乎、Matlab双臂机器人建模仿真 - 知乎

实际上,如果就把双臂中的每个臂当做单个的机械臂进行规划,那么用matlab进行双臂建模就没有太大必要,只需要对每个单臂进行单独规划即可。但是,如果涉及到双臂之间的协同轨迹规划,如上图所示,这时用matlab进行双臂建模仿真就会显得事半功倍。本文先只介绍双臂在matlab中的正运动学建模,后续会补充在matlab中如何进行双臂轨迹规划。

具体创建双臂机器人过程如下文所示,详细请移步该文章查看Matlab双臂机器人建模仿真 - 知乎

此时腰关节连杆坐标系就是基坐标系X0Y0Z0,此时的肩关节坐标系X2Y2Z2就是单臂机器人的基坐标系,然后就从肩关节坐标系开始建立单臂的DH坐标系,也可以认为是单独的腰关节连杆坐标系+单臂的DH坐标系,需要注意的是建立整体DH坐标系时腰关节与肩关节之间需要加-pi/2角度偏置,目的是将puma560构型的机械臂垂下去,下图中的虚线X2即为不加偏置的肩关节坐标系,实线X2即为加了偏置角度后的肩关节坐标系,d=肩宽/2。

对应的matlab正运动学仿真如下所示:

腰关节与肩关节之间也可以不加偏置角度,这样的话,两个坐标系之间的转换就可以画成如下所示。

对应的matlab正运动学仿真如下所示:

UR构型双臂

本文UR采用标准DH建模,建模过程全网可搜,标准DH坐标系建立如下。

分析上图,黑色坐标系X0Y0Z0是世界坐标系,也可认为这是腰关节坐标系,红色虚线坐标系X1Y1Z1是肩关节坐标系(也就是UR的基坐标系{0}),此时腰关节与肩关节不存在角度偏置,matlab仿真建模就是如下所示

亮蓝色实线坐标系X1Y1Z1是加了pi/2偏置角度后的肩关节坐标系,matlab建模仿真如下所示

如何进行轨迹仿真

进行轨迹仿真的最重要一点就是,如何将世界(全局坐标系)坐标系下(也为腰关节坐标系)的轨迹映射到肩关节坐标系(机械臂的基坐标系)下,弄明白这一点,使用matlab进行双臂轨迹算法验证就简单很多了~

以PUMA560腰关节与肩关节有-pi/2角度偏置的双臂构型为例,如下图所示,

世界(全局,也为腰关节)坐标系下的位姿表示为$^0_{n}T$,这就是我们算法验证时所给定的轨迹位姿,都是相对于世界坐标系的;现在的问题就是,将轨迹位姿映射到肩关节(机械臂基坐标系)下,也就是求$^2_{n}T$。这个就很简单了,即$^2_{n}T=inv(^0_{2}T)^0_{n}T$。$^0_{2}T$即为单臂基坐标系相对于腰关节坐标系的姿态变换矩阵,根据腰关节和肩关节之间的坐标变换,可以分析得出,腰关节坐标系先绕X1轴(自己的)旋转pi/2,再绕动轴Z1旋转-pi/2,最后再沿着动轴Z1移动d长度,故$^0_{2}T=trotx(90)trotz(-90)*transz(d)$。按照上述步骤即可将全局坐标系下的位姿映射到单臂局部坐标系下了。


4. MDH-双臂机器人

4轴双臂机器人MDH参数表格

代码示例

% 2021年9月9日
% 双臂飞行机器人,机械臂4Dof运动学模型及工作空间绘制
% haowanghk@gmail.com
clear all;
clc;
%   theta |         d |         a |     alpha |     type|   offset |
L(1)=Link([0       -0.072        0.150        0      0     pi/2  ],'modified'); % 关节1这里的最后一个量偏置
L(2)=Link([0       0          0.022        pi/2      0    -pi/2  ],'modified');
L(3)=Link([0       0           0.285        0          0    -pi/2 ],'modified');
L(4)=Link([0       0.22        0.0035           -pi/2      0    0 ],'modified');
% L(5)=Link([0       0           0           -pi/2       0     ],'modified');
% L(6)=Link([0       0            0           pi/2      0     ],'modified');
%                  0.262
p560L=SerialLink(L,'name','LEFT');
p560L.tool=[0 -1 0 0;1 0 0 0;0 0 1 0 ;0 0 0 1;]; R(1)=Link([0       -0.072        -0.15        0      0     pi/2  ],'modified'); % 关节1这里的最后一个量偏置
R(2)=Link([0       0          0.022        pi/2      0    -pi/2  ],'modified');
R(3)=Link([0       0           0.285        0          0    -pi/2 ],'modified');
R(4)=Link([0       0.22        0.0035           -pi/2      0    0 ],'modified');
% R(5)=Link([0       0           0           -pi/2       0     ],'modified');
% R(6)=Link([0       0           0           pi/2      0     ],'modified');
%                  0.262
p560R=SerialLink(R,'name','RIGHT');
p560R.tool=[0 -1 0 0;1 0 0 0;0 0 1 0 ;0 0 0 1;];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   platformplatform=SerialLink([0 0 0 0],'name','platform','modified');%虚拟腰部关节
platform.base=[1 0 0 0;0 1 0 0;0 0 1 0 ;0 0 0 1;]; %基座高度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   RpR=SerialLink([platform,p560R],'name','R'); % 单独右臂模型,加装底座
pR.display();view(3)
hold on
grid on
axis([-1.5, 1.5, -1.5, 1.5, -1.0, 1.5])pR.plot([0 pi/4 pi/4 0 0]) % 第一个量固定为0,目的是为了模拟腰关节,左臂下同
hold on%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   L
pL=SerialLink([platform,p560L],'name','L'); % 单独左臂模型,加装底座
pL.display();
pL.plot([0 -pi/4 pi/4 0  0])
hold on

右臂连杆参数表格

左臂连杆参数表格

创建结果

示教

工业机器人(9)-- Matlab机器人工具箱之创建单臂/双臂机器人SDH/MDH方法相关推荐

  1. Matlab机器人工具箱(3):双臂操作(从模型建立到轨迹规划)

    从 Matlab机器人工具箱(3) 开始,使用的机器人工具版本更换到v10版本 他们的区别还是挺大的: 一个是单位的问题:从m变为mm 还有一个是变量类型的问题,变换矩阵从正常的矩阵形式变为se3类型 ...

  2. matlab 4轴机器人建模,MATLAB机器人工具箱6轴机械臂DH建模仿真

    机器人工具箱常用函数 Link类 Link 对象包括连杆的各种属性:运动学参数.惯性张量.电机.传递矩阵等 Link 的类函数: 信息/显示方式: display : 显示连杆参数表格 dyn : 显 ...

  3. MATLAB机器人工具箱6轴机械臂DH建模仿真

    机器人工具箱常用函数 Link类 Link 对象包括连杆的各种属性:运动学参数.惯性张量.电机.传递矩阵等 Link 的类函数: 信息/显示方式: display : 显示连杆参数表格 dyn : 显 ...

  4. 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人

    目录 设置UpTensorFlow.js代码 康奈尔电影报价数据集 通用句子编码器 电影聊天机器人在行动 终点线 下一步是什么? 下载项目文件-9.9 MB TensorFlow+JavaScript ...

  5. MATLAB机器人工具箱详解1—RTB 10.4版本简介及安装

    机器人学工具箱(Robotic Toolbook for Matlab) 是matlab中专门用于机器人仿真的工具箱,在机器人建模.轨迹规划.控制.可视化方面使用非常方便.本次安装环境为Windows ...

  6. MATLAB机器人工具箱【1】——建模+正逆运动学+雅克比矩阵

    MATLAB机器人工具箱[1]-- 机械臂建模+正逆运动学+雅克比矩阵 1. 二维空间位姿描述 2. 三维空间位姿描述 3. 建立机器人模型 3.1 Link 类 3.2 SerialLink 类 3 ...

  7. Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学

    Matlab机器人工具箱(1)--机器人的建立.绘制与正逆运动学 前言 rtbdemo 机器人的建立 代码解析 单个Link的解释 建立机器人整体的解释 绘制 正运动学 逆运动学 微分运动学(求雅克比 ...

  8. MATLAB机器人工具箱【3】—— 动力学相关函数及用法

    MATLAB机器人工具箱[3]-- 动力学相关函数及用法 1. 查看机器人动力学参数 2. 逆动力学 3. 正动力学 4. 机器人动力学方程 5. 赋予机器人动力学参数 本文在参考B站up主刘海涛大佬 ...

  9. 机器人工具箱plot3d功能介绍

    文章目录 前言 一.ABB120参数 二.机器人工具箱(丐版) 三.机器人工具箱(plus版) 前言 使用MATLAB机器人工具箱进行运动学及轨迹规划验证,机器人模型是以连杆的形式表示,不能直观表示出 ...

最新文章

  1. 深度学习常用数据集资源(计算机视觉领域)
  2. 在析构函数中delete this指针问题
  3. 采集音频和摄像头视频并实时H264编码及AAC编码
  4. linux c 复制拷贝文件
  5. C++案例-评委打分
  6. [转]微信小程序开发需要注意的29个坑
  7. HTML5 CSS3初学者指南(3) – HTML5新特性
  8. Linux系统编程----7(信号集,信号屏蔽,信号捕捉)
  9. (软件工程复习核心重点)第五章详细设计习题
  10. java api 第一个类是_JAVA之Object常用API
  11. 剑指offer之二叉搜索树的第K个结点
  12. 网络安全-应急响应之入侵排查篇及相关工具
  13. centos lnmp一键安装
  14. 利用matlab检测曲线,如何在matlab中检测平滑曲线
  15. java程序员表情包_听说,这些表情包只有程序员才懂
  16. GNSS说第(七)讲---自适应动态导航定位(七)---抗差估计理论介绍
  17. Tomcat运行成功但是报500错误
  18. 以太网性能测试仪-Y.1564测试
  19. 2021-03-22 什么是SFP端口
  20. css不换行省略号 没作用,flex布局下,css设置文本不换行时,省略号不显示的解决办法...

热门文章

  1. 设计原则 - 单一职责原则
  2. C#实现PDF转PNG图片
  3. 关于高电平与低电平的使用
  4. aws eks 配置nginx tls 和 nginx ingress controller
  5. 【网址】在线手册/手册网
  6. 关于Inter CPU的一些认识
  7. 打开word出现运行时错误‘-2147418113 (8000fff)‘的解决办法
  8. java多线程并发之旅-34-性能与可伸缩性
  9. linux查找最近文件在哪里,Linux查找最近修改的文件
  10. java生成指定位数的随机英文字符串