前言

本文适用对象:

  • 没有机器人的Solidworks模型自己又懒得画的童鞋
  • 没有机器人URDF模型的童鞋

如果你在Matlab帮助里面搜索rigidBody,你大概率会看到matlab自带的例程 链接在这里 教你怎么用rigidBody建立机器人模型,里面有一小节告诉我们怎么用自己推导的DH参数表来建立操作臂模型。

它这里用的例程是PUMA560 机械臂

然后建出来的坐标系模型长这样
就怎么说呢,很TM不直观。。。一是因为重叠的坐标系显示不出来,二是我们很难把这个坐标系跟我们的机器人模型对应。图像显示的目的是让复杂模型简化更为直观,而不是让你更懵逼,因此本文讲解怎么不通过导入URDF的方法直接建立rigidBodyTree机器人模型。

正文

考虑如下的结构的机器人(我特意挑了个特殊的结构,检验一下自己的DH建模水平)

该结构有四个旋转关节,再加上tool frame一共有5个坐标系。经过手动DH建系结果如下:

1.其实你根本不需要DH参数表,直接把坐标系放在关节上,定义好不同坐标系之间的转换就可以跑通仿真了

2.要注意的是,这个结构Tool frame之前需要额外增加一个坐标系满足DH默认条件才能无脑代公式得到正运动学矩阵

简单分析一下这个模型,他有4个连杆(连杆0在地面上了,这里不考虑),4个关节,加上Tool frame的话就有5个坐标系。另外,各个连杆的长度分别定义成L1=0.3 L2=0.3 L3=0.3 L4=0.2。额外添加的坐标系只是为了方便我们代入公式求正运动学转换矩阵,实现仿真演示的话只需要坐标系0~4即可。

OK,开始撸代码,rigidBody代码如下

1. 新建一个rigidBodyTree模型,定义各个连杆长度
%%
% Start with a blank rigid body tree model.
robot = rigidBodyTree('DataFormat','column','MaxNumBodies',4);
%%
% Specify arm lengths for the robot arm.
L1 = 0.3;
L2 = 0.3;
L3 = 0.3;
L4 = 0.2;
2. 定义四个连杆和关节

连杆1是依附在base上的,初始条件下0号坐标系与Matlab的基坐标系重合,因此此时没有相对基坐标系的旋转和平移,且有一个旋转关节在Z0轴

%%
% Add |'link1'| body with |'joint1'| joint.
body = rigidBody('link1');
joint = rigidBodyJoint('joint1', 'revolute');
%定义0号坐标系与基坐标系的相对位置(这里没有旋转与平移)
setFixedTransform(joint,trvec2tform([0 0 0]));
%定义旋转轴方向
joint.JointAxis = [0 0 1];
body.Joint = joint;
addBody(robot, body, 'base');

连杆2依附在连杆1上,有相对转动和平移,为了简化代码这里我们偷了懒(不然需要添加几个旋转矩阵,有兴趣的可以自己尝试),直接换了关节2的方向表达,我们定义了x1为2号关节的转动方向

%%
% Add |'link2'| body with |'joint2'| joint.
body = rigidBody('link2');
joint = rigidBodyJoint('joint2','revolute');
setFixedTransform(joint, trvec2tform([0,0,L1]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link1');

完成后面的几个连杆关节的定义

%%
% Add |'link3'| body with |'joint3'| joint.
body = rigidBody('link3');
joint = rigidBodyJoint('joint3','revolute');
setFixedTransform(joint, trvec2tform([0,L2,0]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link2');
%%
% Add |'link4'| body with |'joint4'| joint.
body = rigidBody('link4');
joint = rigidBodyJoint('joint4','revolute');
setFixedTransform(joint, trvec2tform([0,L3,0]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link3');
%%
% Add |'tool'| end effector with |'fix1'| fixed joint.
body = rigidBody('tool');
joint = rigidBodyJoint('fix1','fixed');
setFixedTransform(joint, trvec2tform([0, L4, 0]));
body.Joint = joint;
addBody(robot, body, 'link4');

至此,建模算是结束了。

3. 检查建模结果

看一下我们的模型

%%
% Show details of the robot
showdetails(robot)
show(robot)


看起来是这么回事,我们试下换不同的关节位置看看。

configuration1 = [0;0.8;-0.6;0];
show(robot,configuration1)


检查无误,建模结束。

4. 完整代码
% Create a |rigidBodyTree| object and rigid bodies with their
% associated joints. Specify the geometric properties of each rigid body
% and add it to the robot.%%
% Start with a blank rigid body tree model.
robot = rigidBodyTree('DataFormat','column','MaxNumBodies',4);
%%
% Specify arm lengths for the robot arm.
L1 = 0.3;
L2 = 0.3;
L3 = 0.3;
L4 = 0.2;
%%
% Add |'link1'| body with |'joint1'| joint.
body = rigidBody('link1');
joint = rigidBodyJoint('joint1', 'revolute');
setFixedTransform(joint,trvec2tform([0 0 0]));
joint.JointAxis = [0 0 1];
body.Joint = joint;
addBody(robot, body, 'base');
%%
% Add |'link2'| body with |'joint2'| joint.
body = rigidBody('link2');
joint = rigidBodyJoint('joint2','revolute');
setFixedTransform(joint, trvec2tform([0,0,L1]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link1');
%%
% Add |'link3'| body with |'joint3'| joint.
body = rigidBody('link3');
joint = rigidBodyJoint('joint3','revolute');
setFixedTransform(joint, trvec2tform([0,L2,0]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link2');
%%
% Add |'link2'| body with |'joint2'| joint.
body = rigidBody('link4');
joint = rigidBodyJoint('joint4','revolute');
setFixedTransform(joint, trvec2tform([0,L3,0]));
joint.JointAxis = [1 0 0];
body.Joint = joint;
addBody(robot, body, 'link3');
%%
% Add |'tool'| end effector with |'fix1'| fixed joint.
body = rigidBody('tool');
joint = rigidBodyJoint('fix1','fixed');
setFixedTransform(joint, trvec2tform([0, L4, 0]));
body.Joint = joint;
addBody(robot, body, 'link4');%%
% Show details of the robot
showdetails(robot)
show(robot)configuration1 = [0;0.8;-0.6;0];
show(robot,configuration1)

Matlab - Solidworks 机器人建模(6)——使用rigidBodyTree构建机器人模型相关推荐

  1. 种群内禀增长率matlab求法,数学建模讲义:第三讲微分方程模型

    <数学建模讲义:第三讲微分方程模型>由会员分享,可在线阅读,更多相关<数学建模讲义:第三讲微分方程模型(74页珍藏版)>请在人人文库网上搜索. 1.第三讲 微分方程模型,动态模 ...

  2. ROS机器人建模与仿真(一)--URDF机器人建模

    前言 经过ROS的保姆级教程之后,相信大家对ROS应该有一个基本的认识了!关于各种工具的使用其实等到真正有所需求之后再去查找即可,roswiki始终是最好的最一手的信息来源.本系列的博客主要用来记录如 ...

  3. Matlab - Solidworks 机器人建模(4)—— 如何把SolidWorks模型导入到Matlab (Simscape模型)

    Matlab - Solidworks 机器人建模(4)-- 如何把SolidWorks模型导入到Matlab (Simscape模型) 1.说在前面 本文会介绍怎么直接把solidworks的模型转 ...

  4. Matlab - Solidworks 机器人建模(5)—— 给模型添加摩擦力

    Matlab - Solidworks 机器人建模(5)-- 给模型添加摩擦力 0. 前言 建好模型并成功进行一次仿真之后,我们发现虽然模型可以像模像样的产生由重力带来的运动,但是也发现零件可以穿过其 ...

  5. matlab四足仿真,基于MATLAB的四足机器人建模与仿真.docx

    摘要:本课题讨论了一种利用MATLAB中Robotics Toolbox对机器人进行的仿真建模的技术,对四足机器人进行行仿真建模.通过设计确定主要研究对象为哺乳类四足机器人.确定了机器人的腿部关节结构 ...

  6. 六自由度机器人(机械臂)运动学建模及运动规划系列(三)——机器人建模及运动学分析的Matlab仿真

    在完成机器人的建模以及运动学分析之后,可以利用Matlab中的Robotics工具箱进行仿真. 本篇目录 一.工具箱下载 二.机器人建模仿真 三.机器人运动学计算仿真 四.小结 一.工具箱下载 要在M ...

  7. matlab 4轴机器人建模,SCARA机器人运动学分析及MATLAB建模仿真.pdf

    SCARA机器人运动学分析及MATLAB建模仿真.pdf 100 SCARA机器人运动学分析及 MATLAB建模仿真 SCARA机器人运动学分析及MATLAB建模仿真 KinematicAnalysi ...

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

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

  9. ros构建机器人运动学模型_ROS环境下的机器人仿真模型构建方法研究

    现代电子技术 Modern Electronics Technique 2018 年 4 月 1 日 第 41 卷第 7 期 Apr. 2018 Vol. 41 No. 7 DOI : 10.1665 ...

  10. ros构建机器人运动学模型_ROS环境下机器人仿真模型构建方法研究.doc

    ROS环境下机器人仿真模型构建方法研究 ROS环境下机器人仿真模型构建方法研究 摘 要: 在众多的机器人仿真平台中,ROS可以封装机器人硬件.提出在ROS环境下构建机器人的仿真模型方法.设计了机器人仿 ...

最新文章

  1. 普林斯顿计算机科学系,普林斯顿大学计算机科学系
  2. POJ--3268--Silver Cow Party【SPFA+邻接表】
  3. linux openoffice centos,centos8 openoffice安装
  4. RuoYi-Cloud 部署篇_04(windows环境 mysql+nginx版本)
  5. HTML入门:html常用的标签
  6. windows NFS 配置
  7. linux 时间服务器安装配置
  8. 【原创】基于Qt5.14的一站式安卓开发环境搭建
  9. (小例子)点击图标/链接发起QQ临时会话
  10. MATLAB 插值函数运用 - interp1
  11. Dell重装系统之官方原版系统
  12. Python实现毫秒级抢单,6翻了!
  13. 毕业设计 - 基于机器视觉的12306验证码识别
  14. Chloe and the sequence
  15. Excel工作表事件(2)- Change事件
  16. oracle北京时区,Oracle中的时区偏移
  17. ArcGIS入门教程(矢量编辑工作流程)
  18. 如何成为有效学习的高手 学习笔记
  19. .net 如何引用迅雷组件
  20. 2012年蓝盾杯信息安全竞赛小记

热门文章

  1. 地图上如何量方位角_利用GPS测量方位角的方法
  2. 霍夫曼编码计算图片压缩率
  3. python 小世界网络
  4. CISCO 6509 三层交换机配置
  5. 阿里云对象存储OSS有什么功能?
  6. [ubuntu]Ubuntu查看cpu温度
  7. C语言或C++中不同类型指针所占内存大小
  8. 如何将html转化成mp4,怎么把mov转换成mp4格式?方法很简单,1分钟完成转换
  9. python opencv rgb值判断红色_Python-opencv实现红绿两色识别操作
  10. 【GT】Assembler 源码解读及使用 !Cocos Creator!