小伙伴们大家好!我来了^_^//

今天我们将继续上一次的话题,如何使用MATLAB来实现机器人的建模仿真与控制。在matlab要实现机器人的仿真与控制首先要知道机器人的DH参数,根据机器人的DH参数来推导机器人的正逆运动学,最后编程实现我们想要的仿真控制。

上一篇博客中,我们谈到了通过GUI实现了正逆运动学的计算结果显示与机器人可视化三维模型的运动显示。并未对机器人模型的可视化做过多的说明【实际上PUMA762的可视化在demo中的function loaddata中有说明——将Pro/E中的机器人连杆三维模型STL,通过cad2matdemo.m转换成matlab可读的mat文件,再通过每一个连杆相对于基坐标的变换实现运动的可视化】。但是,这种方式效率低且容易出错。

所以今天再来说说matlab环境中可视化机器人的三维模型的一些问题。

1、从机器人工具箱谈起

机器人工具箱(Robotics Toolbox)由Peter Corke教授编写,十分强大。专门用于机器人仿真,在机器人建模、轨迹规划、控制、可视化方面使用非常方便。主要通过DH建模完成机器人模型并进行相关运动学或动力学运动控制仿真。其中最主要的两个函数为:

Link类中主要是完成机器人建模,如机器人的关节和连杆的运动学动力学参数。

SerialLink类中包含机器人的属性、可视化显示函数;运动学方法(如正运动函数fkine,逆运动学函数ikine,速度雅可比);动力学方法(加速度,正动力学,重力,摩擦力,牛顿欧拉逆动力等)。

先通过机器人工具箱建立模型【首先还是要知道机器人的DH参数,以PUMA560为例】。先用Link建立连杆,再用SerialLink建立机器人。以下为机器人的两种DH参数信息:

分别使用标准DH模型和改进DH模型显示的机器人可视化结果。通过teach的控制面板随意改变两个figure中的机器人关节角度,其末端位姿都是一致的,证明不管是标准DH还是改进DH,其结果都是一样的。如下:

所以,从结果来说这种可视化是能接受的。但是如果能更好的在仿真中观察到真实机器人三维模型,效果会更好。下面就来说说....

2、CAD模型的机器人在MATLAB环境下可视化

可视化的方式有很多【下面给出有参考连接】,这里只介绍使用机器人的URDF(Unified Robotics Description Format,机器人统一描述格式)文件。关于URDF的介绍在古月居上也有,这里就不再说了。【URDF文件的获取:可以直接在github上找你需要的机器人URDF文件;可以通过三维软件如Pro/E或Solidworks导出;或者在机器人生产商的官方网站中查找,一般都会提供】

如果我们有机器人的URDF文件,那么如何在matlab环境下做到可视化和仿真呢?下面就以PUMA560来说明。

如上,将puma560机器人的描述文件包括URDF文件和meshes中三维模型的stl部件添加到路径中后。

在matlab中输入:robot=importrobot('puma560.urdf');show(robot);便可以轻易的显示机器人三维模型。

机器人的RigidBodyTree(刚体结构树)属性如下:

3、运动仿真

现在我们知道了机器人模型的两种可视化方式,如果我们不希望花费时间自己编写机器人的正逆运动学函数,或者你希望验证自己编写的正逆运动学函数的正确性,那么可以直接利用机器人工具箱【Robotics Toolbox,Peter教授编写】或机器人系统工具箱【Robotics System Toolbox,Mathworks官方工具箱】里面的函数来实现对比验证或运动仿真。

如下为分别使用机器人工具箱和机器人系统工具箱,完成笛卡尔末端圆弧路径跟踪的运动仿真演示。

从图中可以观察到机器人末端基本上完成了圆弧的跟踪,但是由于两种方式在逆解过程中的迭代方向和收敛情况不同【两种方式的逆解只给出一个解】,导致逆解有所不同,在可视化动画中,机器人系统工具箱要稳定些,机器人工具箱明显要差很多。

4、核心代码

(1)以下是先使用机器人工具箱完成机器人建模的,包括使用标准DH建立的模型和改进DH建立的机器人模型,最后通过使用工具箱逆解函数ikine()实现对定义好的圆弧路径的跟踪。

%% 标准DH建立puma560机器人模型

clear;

clc;

%建立机器人模型

% theta d a alpha offset

L1=Link([0 0 0 pi/2 0 ],'standard'); %连杆的D-H参数

L2=Link([0 0 0.4318 0 0 ],'standard');

L3=Link([0 0.1501 0.0203 -pi/2 0 ],'standard');

L4=Link([0 0.4318 0 pi/2 0 ],'standard');

L5=Link([0 0 0 -pi/2 0 ],'standard');

L6=Link([0 0 0 0 0 ],'standard');

robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','puma560','base' , ...

transl(0, 0, 0.62)* trotz(0)); %连接连杆,机器人取名puma560

% robot.plot3d([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态

figure(1)

robot.teach() %teach可视化模型并可以单轴驱动,可以查看模型与实际机器人的关节运动是否一致。

%% 改进DH模型又是怎么样的呢?

rmdh =robot.MDH()%将标准DH转换成改进DH

%%

%将转换后的DH代入Link中,standard改为modified。

clc;

%建立机器人模型

% theta d a alpha offset

L11=Link([0 0 0 0 0 ],'modified'); %连杆的D-H参数

L21=Link([0 0 0 pi/2 0 ],'modified');

L31=Link([0 0.1501 0.4318 0 0 ],'modified');

L41=Link([0 0.4318 0.0203 -pi/2 0 ],'modified');

L51=Link([0 0 0 pi/2 0 ],'modified');

L61=Link([0 0 0 -pi/2 0 ],'modified');

robot1=SerialLink([L11 L21 L31 L41 L51 L61],'name','M_puma560'); %连接连杆,机器人取名M_puma560

% robot1.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态

figure(2)

robot1.teach() %teach可视化模型并可以单轴驱动,可以查看模型与实际机器人的关节运动是否一致。

%%

%% 定义圆路径

t = (0:0.2:20)'; count = length(t);center = [-0.25 0.6 0.46];radius = 0.1;%圆心和半径

theta = t*(2*pi/t(end));

points =(center + radius*[cos(theta) sin(theta) zeros(size(theta))])';

plot3(points(1,:),points(2,:),points(3,:),'r')

%% 使用Peter工具箱逆解进行轨迹重现

hold on

% axis([-1 1.2 -1 1.2 -1 1.2])

title("工具箱机器人模型末端运动轨迹");

xlabel('x/米','FontSize',12);

ylabel('y/米','FontSize',12);

zlabel('z/米','FontSize',12);

for i = 1:size(points,2)

pause(0.01)

bx = points(1,i);

by = points(2,i);

bz =points(3,i);

tform = rpy2tr(136,-180,-180; %欧拉角转姿态齐次矩阵

targetPos = [bx by bz]; %末端位置向量

% targetOr = [0.02 -0.14 0.99 -0.01] %四元数

% tform = quat2tform(targetOr) %四元数转姿态齐次矩阵

TR=transl(targetPos)*tform; %位姿齐次矩阵

hold on

grid on

plot3(bx,by,bz,'*','LineWidth',1);

q=robot.ikine(TR)

pause(0.01)

robot.plot(q);%动画演示

end

(2)以下是使用URDF可视化机器人模型,并调用机器人系统工具箱逆解函数ik实现的圆弧路径跟踪。

%% 导入机器人

clear

clc

robot=importrobot('puma560.urdf');

show(robot);

axes.CameraPositionMode = 'auto';

%% Define the trajectory as a circle with a radius of 0.15

t = (0:0.2:20)';

count = length(t);

center = [-0.25 0.6 0.46];

radius = 0.1;

theta = t*(2*pi/t(end));

points =(center + radius*[cos(theta) sin(theta) zeros(size(theta))])';

%% Draw the defined trajectory and inverse kinematics solution

hold on

plot3(points(1,:),points(2,:),points(3,:),'r')

eeOffset = 0.01;

eeBody = robotics.RigidBody('end_effector');%定义末端执行器,并再后面添加到机器人的Link5上

setFixedTransform(eeBody.Joint,trvec2tform([eeOffset 0 0]));

addBody(robot,eeBody,'puma_link_5');

ik = robotics.InverseKinematics('RigidBodyTree',robot);%逆解解算器

weights = [0.1 0.1 0 1 1 1]; %权重

qInitial = robot.homeConfiguration;

%%

%通过点的轨迹循环来跟踪圆。调用每个点的ik对象以生成实现末端位置的关节配置,存储要稍后使用的逆解结果。

for i = 1:size(points,2)

% Solve for the configuration satisfying the desired end effector

tform = rpy2tr(136,-180,-180);%姿态齐次矩阵

tform = trvec2tform(points(:,i)')*tform ;%末端位姿齐次矩阵

qSol(i,:) = ik('end_effector',tform,weights,qInitial);%求解各关节角度

% Start from prior solution

qInitial = qSol(i,:);

end

%% 动画显示

title('robot move follow the trajectory')

hold on

axis([-0.8 0.8 -0.8 0.85 0 1.3]);

for i = 1:size(points,2)

show(robot,qSol(i,:)','PreservePlot',false);%false改为true时,留下重影。

pause(0.3)

plot3(points(1,i),points(2,i),points(3,i),'.','LineWidth',1);

end

hold off

总结:由于作者能力有限,文中难免有描述不足和错误,希望同大家相互交流学习^_^//

(1)关于STL的说明:

(2)如何导入机器人模型到matlab中:

matlab trplot2,一知半解|MATLAB机器人建模与仿真控制(2)相关推荐

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

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

  2. matlab的ctraj,一知半解|MATLAB机器人建模与仿真控制(6)

    1.前记: 此篇说说利用如何在Matlab中进行机器人轨迹规划(Trajectory Planning).先利用机器人工具箱(Robotics Toolbox)函数jtraj和ctraj作演示,来初步 ...

  3. 六自由度方程组 matlab,采用Matlab的六自由度机器人三维运动学仿真_李庆.pdf

    采用Matlab的六自由度机器人三维运动学仿真_李庆 第 ( ) 3 卷 第 期 华侨大学学报 自然科学版 7 3 Vol.37 No.3 年 月 ( ) 2016 5 JournalofHua ia ...

  4. 电力系统matlab建模视频,基于Matlab的小型电力系统的建模与仿真实验1【精品毕设、无需降重】...

    基于Matlab的小型电力系统的建模与仿真 一.实验目的 电力系统的动态仿真研究将不能在实验室中进行的电力系统运行模拟得以实现.在判定一个电力系统设计的可行性时,都可以首先在计算机机上进行动态仿真研究 ...

  5. MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇

    MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇 摘要: 一 导入机器人URDF模型 二 建立关节电机控制的物理模型 三 仿真结果 1-整体物理模型 2-各关节电机PID位 ...

  6. matlab火箭模型,基于Matlab/Simulink的新型火箭建模与仿真平台搭建

    2018 年 11 月第 14 卷 第 4 期 系 统 仿 真 技 术 System Simulation Technology Nov. ,2018 Vol. 14,No. 4 中图分类号: TP3 ...

  7. 光电振荡器的MATLAB仿真,基于Matlab的RLC阻尼振荡电路建模与仿真研究

    基于 Matlab的 RLC阻尼振荡电路建模与仿真研究 收稿日期: 2006 - 05 - 16 作者简介:张天瑜 (1980 - ) ,男 ,江苏无锡人 ,无锡市广播电视大学教师 ,江南大学信控学院 ...

  8. matlab阵风仿真,基于matlab风力发电系统的建模与仿真毕业设计论文

    <基于matlab风力发电系统的建模与仿真毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于matlab风力发电系统的建模与仿真毕业设计论文>相关文档资源请在帮 ...

  9. 基于matlab的风力发电,基于matlab的风力发电机组的建模与仿真

    基于matlab的风力发电机组的建模与仿真 实验一 :风力发电机组的建模与仿真 姓名: 学号: 一.实验目标: 1.能够对风力发电机组的系统结构有深入的了解. 2.能熟练的利用MATLAB软件进行模块 ...

  10. 移动衰落信道 matlab,Matlab在移动衰落信道中建模与仿真

    教育教学论坛 EDUCATIONTEACHINGFORUM 2018 年 4 月第 16 期 Apr.2018 NO.16 Matlab在移动衰落信道中建模与仿真 收稿日期:2017-10-30 基金 ...

最新文章

  1. Matlab与线性代数 -- 稀疏矩阵的图形显示
  2. 用Python解“爬动的蠕虫”题
  3. 云函数连接mysql超时_云函数访问MYSQL数据库出错?
  4. 【2010福建】收稻子 (校BSOJ1114)
  5. 编制一个函数jsValue(),求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数的平均值pjz1,以及不满足此条件的四位数的平均值pzj2
  6. 使用Java处理大文件
  7. 实验2.4 使用系统函数pow(x,y)计算xy的值
  8. Array 对象-sort()
  9. java发送邮件代码
  10. 配置华为防火墙ssh ASDM
  11. tex 表格内容换行_如何让latex表格中一个单元格的文字换行
  12. jQuery-3.4.1下载
  13. OPENGL回归原点
  14. php天眼查数据抓取,python用xpath采集天眼查内容,有反爬,zip拼数据
  15. 【从饮水机到名人堂之c语言】日常学习总结
  16. 聂易铭:3月11日数字货币插针诱惑,做多只能浅尝辄止
  17. python 声音基频f0_ASR中常用的语音特征之FBank和MFCC(原理 + Python实现)
  18. java.lang.RuntimeException: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exc
  19. SpringBoot---MongoDB的简单使用
  20. android官网m魅族15,还是熟悉的味道,魅族三款15系新机现身安卓官网

热门文章

  1. YAML_06 playbook从上往下顺序执行,若报错,不提示,继续往下执行
  2. mysql concat函数进行模糊查询
  3. 基于stm32CubeMX和keil5的stm32f103学习编程
  4. 第三部分数据结构[专业课考试3]
  5. 这几天可能是长时间关注电脑,眼睛没有得到休息,所以就早上起来眼睛有点通...
  6. (二). 细说Kalman滤波:The Kalman Filter
  7. 理解结构与表现相分离
  8. 开机后网络连接迟迟没有反映是怎么回事?
  9. java Thread.yield()用法详解
  10. java打包后找不到图片路径,解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...