Matlab/Simulink六自由度机器人运动学与控制系统仿真(一)【附源文件】_matlab机器人运动学仿真_学机械的鱼鱼的博客-程序员宅基地

技术标签: matlab  机器人仿真  矩阵  线性代数  MATLAB机器人计算与应用  

irb1600机器人坐标系建立、正运动学计算与simulink验证

本文章为系列文章,以IRB1600机器人为例,建立机器人正运动、逆运动学、控制系统模型,并在simulink中进行仿真,与理论计算结果进行对比验证
(一) irb1600机器人坐标系建立、正运动学计算与simulink验证
(二) 机器人逆运动学计算
(三) 机器人运动学控制系统仿真



一、坐标系建立与D-H参数表

本文以irb1600机器人为分析对象,irb1600机器人坐标系建立如下图所示,DH参数表如表1所示,采用后置坐标系法建立。

在这里插入图片描述
在这里插入图片描述
初始角度是指,图片所示位姿,各个关节对应的角度值

二、位姿变换矩阵与正运动学计算

依据D-H参数表,计算变换矩阵如下:
在这里插入图片描述
在这里插入图片描述
当th1=0,th2=90°,th3=0,th4=180°,th5=180°,th6=0,计算得到机器人末端位姿为:

在这里插入图片描述

三、在Simulink中进行仿真验证

1.将urdf文件导入simulink中

在SolidWorks中将三维模型输出为urdf格式,命名为irb1600.urdf,注意导出时应注意机器人位姿最好为初始位姿,不要设置为随意姿态。
导入simulink的命令为:

smimport('irb1600.urdf')

增加Transform Sensor,用以在simulink中测量机器人末端的位置,最终建模如下。(如有细节看不懂,可文章下方留言~)
在这里插入图片描述

2.启动simulink进行验证

通过上述建立的D-H参数,计算得到的正运动学结果,作为simlink中机器人模型的关节角度输入,再通过simulink反馈的机器人末端位置,与理论计算结果进行对比,验证机器人运动学解算的正确性。

计算源码如下。这里使用的是robotics toolbox计算正运动学,也可以使用前文计算得到的变换矩阵来计算,两种方法都可以:

%使用前startup_rvc打开机器人工具箱
clear;
%theta,d, a ,alpha
L1 = Link('d', 481.5, 'a', 135, 'alpha', pi/2);
L2 = Link( 'd',0,    'a',475,   'alpha',0);
L3 = Link( 'd',0,    'a',0,      'alpha',pi/2);
L4 = Link( 'd',600,  'a',0,      'alpha',pi/2);
L5 = Link( 'd',0,    'a',0,      'alpha',pi/2);
L6 = Link( 'd',72.5,    'a',0,      'alpha',0);

L2.qlim=[0,pi/4];
L3.qlim=[-pi/2,pi/2];

robot = SerialLink([L1 L2 L3 L4 L5 L6],'name','irb1600');
%%
% % %定义关节角度,如果要改变输入,改这里就行
q1=0;
q2=pi/2;
q3=0;
q4=pi;
q5=pi;
q6=0;
% %该组关节角度理论计算的对应末端位置为807.50956.5


robot.fkine([q1 q2 q3 q4 q5 q6])


%%
%使用如下命令将urdf文件导入simulink
% smimport('irb1600.urdf')

%统一初始位姿。
%因为机器人D-H坐标系的零位,和urdf文件的零位不统一,所以需要减去初始关节角度。
%也可以在导入urdf文件时,把模型调整到D-H坐标系认定的零位, 但是姿态会看起来很奇怪。这里还是采用减去初始关节角度这种方式。
q1_sm=q1;
q2_sm=q2-pi/2;
q3_sm=q3;
q4_sm=q4-pi;
q5_sm=q5-pi;
q6_sm=q6;

%启动simulink验证
robot_sm = importrobot('irb1600.urdf');
robot_sm.DataFormat = 'column';
open_system('irb1600_fk.slx')
sim('irb1600_fk.slx') 
%%


仿真结果如下(单位:米),可以验证得到正运动学计算是正确的的。Y方向0.39mm的误差,为三维模型误差,可近似为0。
在这里插入图片描述
此时机器人的位置和姿态如下,可以发现与我们建立D-H坐标时的初始姿态一致,再次证明建立的正运动学是正确的。
在这里插入图片描述

四、总结

本文分析IRB1600机器人的正运动学并在simulink中进行了验证。如有疑问,欢迎评论区讨论~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuyu_94/article/details/124805675

智能推荐

陌陌面试官:说说Spring AOP 的原理、SpringMVC 的处理过程?_程序员白楠楠的博客-程序员宅基地

Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。2021Java面试宝典# Spring AOP 原理简单说说 AOP 的设计: 每个 Bean 都会被 JDK 或者 Cglib 代理。取决于是否有接口。 每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 Spring 内核控制流程,内层拦截器是用户设置,也就是 AOP。

使用ImageIO加载GIF图片_imageio读取gif_Ocean_WANG_的博客-程序员宅基地

众所周知,iOS并不是很好支持GIF图片,用的框架并不能很好支持,往往达不到想要的效果,下面介绍如何使用ImageIO实现GIF图片的加载,废话不多说,直接上代码// 获取NSData类型 guard let filePath = Bundle.main.path(forResource: "demo.gif", ofType: nil) else { return } ..._imageio读取gif

路由器CAR限速策略_西京刀客的博客-程序员宅基地

DoS防范:路由器CAR限速策略拒绝服务(DoS)是目前黑客广泛使用的一种手段,它通过独占网络资源、使其他主机不能进行正常访问,从而导致网络瘫痪,我们可以通过在接入路由器上采用CAR限速策略来达到抵御的目的。DoS对于网站而言是最可怕的威胁之一。DoS是目前黑客广泛使用的一种手段,它通过独占网络资源、使其他主机不能进行正常访问,从而导致网络瘫痪,我们可以通过_car限速

动态控件的创建和使用--动态按钮_fc841105的博客-程序员宅基地

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。一、创建动态控件:为了对照,我们先来看一下静态控件的创建。放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适

51单片机基础点亮第一个LED实验_点亮第一个led灯实验报告_tjjingpan的博客-程序员宅基地

点亮第一个LED实验/*************************************************************************************** 点亮第一个LED实验 *实现现象:下载程序后D1指示灯点亮注意事项:无 *********..._点亮第一个led灯实验报告

sybase-sql语法-replace用法_weixin_30399155的博客-程序员宅基地

1.去空格update hyl_temp02 --去空格set acc_nbr=replace(acc_nbr,' ','');commit;2.去回车update hyl_temp02 --去回车set acc_nbr=trim(replace(replace(acc_nbr,char(13),''),char(10),''));commit;..._sybase replace

随便推点

第2关:Pandas缺失值类型_第2关:pandas缺失值类型_向天再还十斤肉的博客-程序员宅基地

任务描述本关任务:根据所学知识完成右侧选择题。相关知识本关卡主要介绍Pandas自带的几个处理缺失值的工具的用法,该系列Pandas实训的缺失值主要有三种形式:null、NaN或NA。选择处理缺失值的方法一般情况下可以分为两种:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个**标签值(sentinel value)**表示缺失值。 掩码方法中掩码可能是一个与原数组维度相同的完整布尔类型数组,也可能是用一个比特(0或1)表示有缺失值的局部状态; 标签方法中,_第2关:pandas缺失值类型

idea插件开发--组件--编程久坐提醒_idea 久坐提醒插件 提示没有动图_a18792721831的博客-程序员宅基地

gitee地址:https://gitee.com/jyq_18792721831/studyplugin.gitidea插件开发入门idea插件开发–配置idea插件开发–服务-翻译插件idea插件开发--组件--编程久坐提醒介绍组件应用程序启动项目打开模块打开应用程序/项目关闭监听程序代码中注册监听器声明注册监听器项目级的监听器声明注册的其他配置自定义监听器接口消息系统设计主题消息总线连接广播嵌套消息组件定义应用程序级别项目级别监听器定义Java 计时器实例需求分解项目创建配置界面存储服务配置和_idea 久坐提醒插件 提示没有动图

java File的几个客来碗小知识-路径分隔符-创建多级目录-判断文件拓展名_混水摸鱼LDK的博客-程序员宅基地

1.File.separatorFile.separator代表的是路径分隔符如果开发是在win平台,而项目跑在Linux上的话,这时使用String的路径可能会出现问题,因为两个平台的路径分隔符不同。File.separator在win下代表的是 \\,在Linux上代表的是 /因为反斜杠在java中有转义的意思,所以\\其实是\,所以输出的是一个\2.file.mkdirs()平时创建文件夹用的是file.mkdir()这个方法,用file.mkdirs()可以一下创建多级目录3.f

Js操作Redis_js redis_雲小妖的博客-程序员宅基地

前提条件1、电脑已经安装Redis;2、电脑已经安装NodeJS;1、准备创建项目js语言的项目初始化项目并在package.json文件中加入如下包"redis": "^3.0.2",在项目中安装Redis包,执行yarnyarn将Redis包引入js文件代码示例const redis = require('redis');const client = redis.createClient( 6379, '127.0.0.1');export async functio_js redis

把闲置ipad当win10的扩展屏_ipad如何当win10第二屏幕_永修彭于晏的博客-程序员宅基地

利用ipad当win10的扩展屏准备工具:ipad上下载splashtop(app store免费下载)同一个wifi下 Win10s上下载splashtop(https://www.splashtop.com/cn/support)Ipad打开splashtop注册完成之后,会显示一个空白的列表然后安装win10下的splashtop,打开之后登陆刚注..._ipad如何当win10第二屏幕

oracle 树型结构数据的查询_weixin_34395205的博客-程序员宅基地

Oracle中start by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * fromtable start with org_id = ...

推荐文章

热门文章

相关标签