基于MATLAB的关节型六轴机械臂轨迹规划仿真
笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的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实测完整代码)https://www.guyuehome.com/34853
相关文章:

基于MATLAB的关节型六轴机械臂轨迹规划仿真
笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的matlab仿真分析 目录 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3 全部代码 4 仿真结果 1 实验目的 基于机器人学理论知识&…...

双11狂欢最后一天
大家好,本年度双11即将到来,为了答谢大家多年来的支持及更广泛的推广VBA的应用,“VBA语言専功”在此期间推出巨大优惠:此期间打包购买VBA技术资料实行半价优惠。 1:面向对象:学员及非学员 2:打…...

YOLOX: Exceeding YOLO Series in 2021(2021.8)
文章目录 AbstractIntroduction介绍前人的工作提出问题解决 YOLOXYOLOX-DarkNet53Implementation detailsYOLOv3 baselineDecoupled headStrong data augmentationAnchor-freeMulti positivesSimOTAEnd-to-end YOLOOther BackbonesModified CSPNet in YOLOv5Tiny and Nano dete…...

HBuilderX 运行Android App项目至雷电模拟器
一、下载安装HBuilderX HBuildeX官网 安装最新的正式版,或者点击历史版本查看更多版本;【ps:Alpha版本为开发版,功能更多,但是也不稳定,属于测试版本】 直接将压缩包解压,运行HBuildeX即可。 二…...

Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析
前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案…...

续:将基于Nasm汇编的打字小游戏,移植到DOSBox
续:将基于Nasm汇编的打字小游戏,移植到DOSBox 文章目录 续:将基于Nasm汇编的打字小游戏,移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇:【编程实践】黑框框里的打字小游戏,但…...

外部访问K8S集群内部的kafka集群服务
不许转载 kafka 部署 把 kafka 部署到 k8s 后,我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort, 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图,这是 kafka 在集群中的网…...
AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法
在TensorFlow2环境下执行1.X版本的代码时报错: AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘ 当然第一时间想到的是利用 如下代码 来解决问题(大部分情况都是这样), tf.compat.v1但是又出现以下报错 Att…...
物奇平台耳机恢复出厂设置功能实现
是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙音频,DSP音频项目核心开发资料, 物奇平台耳机恢复出厂设置功能实现 一 需求 1 耳机接收到充电盒长按12S指令后触发, 2 接收到…...

RFID携手制造业升级,为锂电池生产带来前所未有的可靠性
应用背景 随着科技的发展和全球化的推进,产品的生产过程越来越复杂,且对品质的要求也越来越高。在锂电池生产领域,由于其高能量密度、长寿命和环保特性,已被广泛应用于电动汽车、储能系统等领域。然而,锂电池的安全性和…...
【星海出品】flask (四) 三方工具使用
学习的灵魂是公社,学习的目标是人民自治.学习是非暴力革命方式的社会改革.学习是人民对抗资本剥夺的文明方式.学习失败了,就如同巴黎公社失败了一样.但是它为今后进行成功的社会改革指明了正确的方向.学习的逻辑并不复杂,一句话,必须让知识数量与知识价值基本吻合.管理学习也不…...
MongoDB 索引
类似关系型数据库,mongodb也建立自己的一套索引机制和查询优化方法。本文简单介绍mongodb的索引。后续文章讲详细介绍索引的操作,监控和查询优化方法等。 索引 索引,是一组按照特殊结构排列的,方便检索的数据。索引中保存了集合…...

[Hive] INSERT OVERWRITE DIRECTORY要注意的问题
在使用Hive的INSERT OVERWRITE语句时,需要注意以下问题: 数据覆盖:INSERT OVERWRITE语句会覆盖目标目录中的数据。因此,在执行该语句之前,请确保目标目录为空或者你希望覆盖的数据已经不再需要。数据格式:…...

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新
时代在变,唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新,湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长,民建长沙市委常委,民建湖南省环资委副主任,省、市民建企联会常务副会长&…...

DHorse(K8S的CICD平台)的实现原理
综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如…...

类图复习:类图简单介绍
入职新公司在看新项目的代码,所以借助类图梳理各个类之间的关系,奈何知识已经还给了老师,不得不重新学习下类图的相关知识,此处将相关内容记录下方便后续使用。 文章目录 类图语法类与类的关系画类图 类图语法 语法描述public-pr…...

【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词【好】
【字符串】【双指针翻转字符串快慢指针】Leetcode 151 反转字符串中单词 解法1 双指针翻转字符串快慢指针更新数组大小 ---------------🎈🎈题目链接🎈🎈------------------- ---------------🎈🎈解答链接…...

3D Gaussian Splatting:用于实时的辐射场渲染
Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…...
【nlp】文本处理的基本方法
文本处理的基本方法 1 什么是分词2 什么是命名实体识别3 什么是词性标准1 什么是分词 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形…...
C++17 std::filesystem
std::filesystem 是 C17 标准引入的文件系统库,提供了一套用于处理文件和目录的 API。它主要包括以下几个核心类: std::filesystem::path:用于表示文件系统路径。它提供了一系列方法,允许你对路径进行各种操作,如拼接…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...