基于MATLAB的关节型六轴机械臂轨迹规划仿真

news2024/11/18 5:56:09

笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的matlab仿真分析

目录

1 实验目的

2 实验内容

2.1标准D-H参数法

2.2实验中使用的Matlab函数

3 全部代码

4 仿真结果 


1 实验目的

基于机器人学理论知识,利用标准D-H参数法建立关节型机器人的数学模型,使用Matlab的Robotics Toolbox工具包搭建模型。

2 实验内容

2.1标准D-H参数法

标准D-H参数法常用于建立关节型机器人的数学模型,D-H参数法是一种对连杆的坐标描述,而关节机器人本质上就是一系列连杆通过关节连接起来而组成的空间开式运动链。

对于连杆本身,其功能在于保持其两端的关节轴线具有固定的几何关系,连杆的特性由轴线决定,通常用四个连杆参数来描述,连杆长度,连杆扭转角,连杆偏移量和关节角

2.2实验中使用的Matlab函数

Link函数

用于定义六轴机器人的一个轴。
包含了机器人的运动学参数、动力学参数、刚体惯性矩参数、电机和传动参数;
可采用DH法建立模型,其中包含参数:关节转角,关节距离,连杆长度,连杆转角,关节类型(0转动,1移动)。

% 定义六轴机器人的一个轴
L(1) = Link([theta1, D1, A1, alpha1, offset1], 'standard')

SerialLink函数

用于构建机械臂。
它的类函数比较多,包括显示机器人、动力学、逆动力学、雅可比等;

% 'six'为机械臂名称
robot = SerialLink(L,'name','six');

fkine正解函数

用于求解出末端位姿p。

theta = [0.1,0,0,0,0,0];    %指定的关节角
p=robot.fkine(theta)        %fkine正解函数,根据关节角theta,求解出末端位姿p


ikine逆解函数

用于求解出关节角q。

q=ikine(robot,p)           %ikine逆解函数,根据末端位姿p,求解出关节角q

轨迹规划

(1)jtraj
已知初始和终止的关节角度,利用五次多项式来规划轨迹;

T1=transl(0.5,0,0);		  %根据给定起始点,得到起始点位姿
T2=transl(0,0.5,0);		  %根据给定终止点,得到终止点位姿
init_ang=robot2.ikine(T1);%根据起始点位姿,得到起始点关节角
targ_ang=robot2.ikine(T2);%根据终止点位姿,得到终止点关节角
step = 20;
[q ,qd, qdd]=jtraj(init_ang,targ_ang,step); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数

(2)ctraj
已知初始和终止的末端关节位姿,利用匀加速、匀减速运动来规划轨迹。

T0 = robot2.fkine(init_ang);%运动学正解
T1 = robot2.fkine(targ_ang);%运动学正解
Tc = ctraj(T0,T1,step);     %得到每一步的T阵
tt = transl(Tc);

3 全部代码

%% MATLAB素质三连https://www.guyuehome.com/34853
clear;
close all;
clc;
%% 实验一 基于MATLAB的关节型六轴机械臂仿真

%% 参数定义
%机械臂为六自由度机械臂
clear L;
 
%角度转换
angle=pi/180;  %度
 
%D-H参数表
theta1 = -pi/2;   D1 = 89.2;   A1 = 0;      alpha1 = -pi/2; offset1 = 0;
theta2 = 0;       D2 = 0;      A2 = 425;    alpha2 = 0;     offset2 = 0;
theta3 = 0;       D3 = 0;      A3 = 392;    alpha3 = 0;     offset3 = 0;
theta4 = pi/2;    D4 = 109.3;  A4 = 0;      alpha4 = pi/2;  offset4 = 0;
theta5 = -pi/2;   D5 = 94.75;  A5 = 0;      alpha5 = -pi/2; offset5 = 0;
theta6 = 0;       D6 = 82.5;   A6 = 0;      alpha6 = 0;     offset6 = 0;

%% DH法建立模型,关节转角,关节距离,连杆长度,连杆转角,关节类型(0转动,1移动)

L(1) = Link([theta1, D1, A1, alpha1, offset1], 'standard')
L(2) = Link([theta2, D2, A2, alpha2, offset2], 'standard')
L(3) = Link([theta3, D3, A3, alpha3, offset3], 'standard')
L(4) = Link([theta4, D4, A4, alpha4, offset4], 'standard')
L(5) = Link([theta5, D5, A5, alpha5, offset5], 'standard')
L(6) = Link([theta6, D6, A6, alpha6, offset6], 'standard')

% 定义关节范围
L(1).qlim =[-180*angle, 180*angle];
L(2).qlim =[-180*angle, 180*angle];
L(3).qlim =[-180*angle, 180*angle];
L(4).qlim =[-180*angle, 180*angle];
L(5).qlim =[-180*angle, 180*angle];
L(6).qlim =[-180*angle, 180*angle];

%% 显示机械臂
robot0 = SerialLink(L,'name','ur5');
f = 1 									%画在第1张图上
theta = [0 pi/2 0 0 pi 0];				%初始关节角度
figure(f)
robot0.plot(theta);
title('六轴机械臂模型');
%% 加入teach指令,则可调整各个关节角度
robot1 = SerialLink(L,'name','ur5');
f = 2
figure(f)
robot1.plot(theta);
robot1.teach
title('六轴机械臂模型可调节');
%% 实验二 基于MATLAB的六轴机械臂轨迹规划仿真

%% 2.2求解运动学正解
robot2 = SerialLink(L,'name','ur5');
theta2 = [0.1,0,0,0,0,0];   			%实验二指定的关节角
p=robot2.fkine(theta2)       			%fkine正解函数,根据关节角theta,求解出末端位姿p
q=ikine(robot2,p)            			%ikine逆解函数,根据末端位姿p,求解出关节角q
robot2.plot(q,'movie','circleCHAZHI.gif');%保存
%% 2.3 jtraj 已知初始和终止的关节角度,利用五次多项式来规划轨迹
% T1=transl(0.5,0,0);					%根据给定起始点,得到起始点位姿
% T2=transl(0,0.5,0);					%根据给定终止点,得到终止点位姿
T1=transl(400,-500,0);						%根据给定起始点,得到起始点位姿
T2=transl(0,400,600);						%根据给定终止点,得到终止点位姿
init_ang=robot2.ikine(T1);				%根据起始点位姿,得到起始点关节角
targ_ang=robot2.ikine(T2);				%根据终止点位姿,得到终止点关节角
step = 20;
f = 3

%轨迹规划方法
figure(f)
[q ,qd, qdd]=jtraj(init_ang,targ_ang,step); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
grid on
T=robot2.fkine(q);						%根据插值,得到末端执行器位姿
nT=T.T;
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)),'LineWidth',2);%输出末端轨迹
title('输出末端轨迹');
robot2.plot(q);							%动画演示 

%% 求解位置、速度、加速度变化曲线
f = 4
figure(f)
subplot(3,2,[1,3]); 					%subplot 对画面分区 三行两列 占用1到3的位置
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
robot2.plot(q);							%动画演示

figure(f)
subplot(3, 2, 2);
i = 1:6;
plot(q(:,1));
title('位置');
grid on;

figure(f)
subplot(3, 2, 4);
i = 1:6;
plot(qd(:,1));
title('速度');
grid on;

figure(f)
subplot(3, 2, 6);
i = 1:6;
plot(qdd(:,1));
title('加速度');
grid on;

t = robot2.fkine(q);					%运动学正解
rpy=tr2rpy(t);   						%t中提取位置(xyz)
figure(f)
subplot(3,2,5);
plot2(rpy);

%% ctraj规划轨迹 考虑末端执行器在两个笛卡尔位姿之间移动  
f = 5
T0 = robot2.fkine(init_ang);			%运动学正解
T1 = robot2.fkine(targ_ang);			%运动学正解

Tc = ctraj(T0,T1,step);  				%得到每一步的T阵

tt = transl(Tc);
figure(f)
plot2(tt,'r');
title('直线轨迹');

4 仿真结果 

转载于基于MATLAB的关节型六轴机械臂轨迹规划仿真(2021实测完整代码) - 古月居基于MATLAB的关节型六轴机械臂轨迹规划仿真(2021实测完整代码)icon-default.png?t=N7T8https://www.guyuehome.com/34853

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1200366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最全面的软考架构师复习资料(历时2年整理)

一、面向服务的架构 1.请分别用200字以内文字说明什么是面向服务架构(SOA)以及ESB在SOA的作用与特点 面向服务的体系架构(SOA)是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义接口进行通信。他可以根据需求…

【操作系统】4.2 文件系统

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

[CISCN 2023 西南]do_you_like_read

打开题目,大概是一个购买书籍的网站,有登陆的功能 我们可以先分析下给的源码 在admin.php中会验证是否为admin用户 我们尝试爆破下密码,爆出来为admin123 登陆后发现存在文件上传漏洞 我们分析下源码 存在文件后缀检测,如果为p…

【第四章】软件设计师 之 计算机网络

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、七层模型 2、网络技术标准与协议 中介 别…

信捷 XDH 输出点流水灯

本文以XDH 为例,实现输出点流水灯,测试输出点是否正常。 用到了FOR NEXT循环和偏移量实现。 程序下载链接如下: https://download.csdn.net/download/weixin_39926429/88527971

Python的基础语句大全

以下是Python的基础语句大全: 变量定义语句: var_name var_value输出语句: print(var_name)输入语句: var_name input()条件语句: if condition:// do something if condition is True elif condition:// do somethi…

手机地磁传感器与常见问题

在手机中,存在不少传感器,例如光距感,陀螺仪,重力加速度,地磁等。关于各传感器,虽功能作用大家都有所了解,但是在研发设计debug过程中,却总是会遇到很多头疼的问题。关于传感器&…

链表的实现(文末附完整代码)

链表的概念及结构 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 我们在上一篇文章所学习的顺序表是连续存储的 例如: 顺序表就好比火车上的一排座位,是连续的 而链表就好比是火车…

字节面试:请说一下DDD的流程,用电商系统为场景

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业字节、如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&…

matlab GUI界面实现ZieglerNicholas调节PID参数

1、内容简介 略 11-可以交流、咨询、答疑 ZieglerNicholas、PID、GUI 2、内容说明 GUI界面实现ZieglerNicholas调节PID参数 通过ZieglerNicholas调节PID参数,设计了GUI 3、仿真分析 略 4、参考论文 略 链接:https://pan.baidu.com/s/1yQ1yDfk-_…

vue+mongodb+nodejs实现表单增删改查

ExpressMongodbVue实现增删改查 效果图 前言 最近一直想学下node,毕竟会node的前端更有市场。但是光看不练,感觉还是少了点什么,就去github上看别人写的项目,收获颇丰,于是准备自己照葫芦画瓢写一个。 作为程序员,一…

电容的作用

文章目录 总结1.降压2.滤波3.延时4.耦合5.旁路电容 总结 1.降压 问题: 直接连接灯泡会烧掉 解决方案 进一步为了防止电容放电,伤人,加入一个大电阻 2.滤波 直流的情况 交流的情况 频率与容抗的关系 3.延时 4.耦合 滤除直流成分&#xf…

学习c#的第七天

目录 C# 封装 概念 Public 访问修饰符 Private 访问修饰符 Protected 访问修饰符 Internal 访问修饰符 Protected Internal 访问修饰符 总结 C# 封装 概念 在面向对象程序设计中,封装是一种将数据和方法包含在一个单元中,并控制对这些数据和方…

LeetCode算法心得——高级访客(模拟枚举+小窗口)

大家好,我是晴天学长,今天的周赛第二题,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .高级访客 给你一个长度为 n 、下标从 0 开始的二维字符串数组 access_times 。对于每个 …

Redis五种数据类型及命令操作(二)

🎈个人公众号:🎈 :✨✨✨ 可为编程✨ 🍟🍟 🔑个人信条:🔑 知足知不足 有为有不为 为与不为皆为可为🌵 🍉本篇简介:🍉 本篇记录Redis五种数据类型及命令操作,如…

Oracle(2-1) Networking Overview

文章目录 一、基础知识1、Network Environ Challenges 网络环境挑战2、Simple Network :2-Tier 简单的两层网络3、Simple to Complex : N-Tier 简单到复杂:N层网络4、Oracle Network Solutions Oracle网络解决方案5、Key Features of Oracle Net Oracle Net的主要功…

[MySQL] MySQL表的基础操作

文章目录 一、创建表 1、1 SQL语法 1、2 实例演示 二、查询表 三、修改表 3、1 修改表名字 3、2 新增列(字段) 3、3 修改列类型 3、4 修改列名 3、5 删除表 四、总结 🙋‍♂️ 作者:Ggggggtm 🙋‍♂️ 👀 专…

详解Redis持久化(上篇——RDB持久化)

Redis持久化的作用和意义 Redis 持久化是一种机制,用于将内存中的数据写入磁盘,以保证数据在服务器重启时不会丢失。持久化是为了解决内存数据库(如 Redis)在服务器关闭后,数据丢失的问题。 Redis 持久化的主要作用和…

如何判断一个角是否大于180度(2)

理论计算见上一篇: 如何判断一个角是否大于180度?_kv1830的博客-CSDN博客 此篇为代码实现 一。直接上代码: import cv2 as cv import numpy as np import mathdef get_vector(p_from, p_to):return p_to[0] - p_from[0], p_to[1] - p_from…

【第六章】软件设计师 之 数据结构与算法基础

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、数据结构与算法基础 2、数据 3、稀疏矩阵…