机械臂-五次多项式与三次多项式对比

news2024/9/29 7:24:48

##1、三次多项式算法
代码如下:

L(1) = Link(  'd',     0.081,  'a' ,-0.01 , 'alpha',   pi/2 ,'offset',0);
L(2) = Link(  'd',     0 ,  'a' , 0.099 , 'alpha',   0 ,'offset',pi/2);
L(3) = Link(  'd',  0 ,  'a' , -0.01 , 'alpha',pi/2,'offset',pi/2);
L(4) = Link( 'd',  0.117+0.123,  'a' , 0 , 'alpha', pi/2 ,'offset',0);
L(5) = Link( 'd',0 ,  'a' , 0.057 , 'alpha',pi/2,'offset',-pi);
robot = SerialLink(L,'name','五自由度机械臂'); %建立连杆机器
robot.display;
robot.teach;       %画出模型并进行调控
robot.plot([0 0 0 0 0]) %输入一定参数后机器人图形
%%
Theta=[40,-30,-30,30,-15;
       0,15,0,10,20;
       -40,30,30,-20,30];
Velocity=[0,0,0,0,0,0;40,40,20,30,20,10;0,0,0,0,0,0];
Accle=[0,0,0,0,0,0;0,0,0,0,0,0;0,0,0,0,0,0];
[m,n]=size(Theta);
% 三次多项式轨迹规划,定义插补次数n,根据驱动器支持的最大插补次数设定
Time=[0,0,0,0,0,0;5,5,5,5,5,5;10,10,10,10,10,10];
StopTime=Time(3,1);
FixedStep=0.2;
SimpleNum=0:FixedStep:StopTime;Cunt=length(SimpleNum);
for i=1:n
    %% 求每个关节角的五次多项式插补轨迹点
    [q(:,i),qd(:,i),qdd(:,i)] = threejtraj_Function(Theta(:,i),Time(:,i), ...
                                Velocity(:,i),Accle(:,i)); 
end
qT=q';vT=qd';aT=qdd';t=2000;
%% 求正解
T=robot.fkine(deg2rad(q));        %求正解,得到每次对应的空间位姿矩阵
JTA=transl(T);                  %空间位姿矩阵转化为位置矩阵
%% 绘制末端位置
W=[-700,+700,-700,+700,0,+1000]*0.001;
% 求约束角度的正解,获取末端位姿
T1=robot.fkine(deg2rad(Theta(1,:))); 
T2=robot.fkine(deg2rad(Theta(2,:))); 
T3=robot.fkine(deg2rad(Theta(3,:))); 
% 动态仿真
% figure('Color',[1,1,1],'Position',[485,180,386,310],'Visible','on');
hold on
plot3(JTA(1:end,1), JTA(1:end,2), JTA(1:end,3),'b','LineWidth',1.5);
axis equal;   %设置坐标轴范围
hold on;grid on;
plot3(T1(1,4),T1(2,4),T1(3,4),'o','color','r','LineWidth',2);%#7E2F8E
plot3(T2(1,4),T2(2,4),T2(3,4),'o','color','r','LineWidth',2);
plot3(T3(1,4),T3(2,4),T3(3,4),'o','color','r','LineWidth',2);
robot.plot(q*(pi/180)); 

%%
figure(3)
i=1:5;
subplot(3,1,1);
plot(q(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('位置');
grid on;
subplot(3,1,2);

plot(qd(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('速度');
grid on;
subplot(3,1,3);

plot(qdd(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('加速度');
grid on;

结果如下:
在这里插入图片描述
在这里插入图片描述
##2、五次多项式
代码如下:

clear
clc
close all

%标准DH
%Link(DH,option):
L(1) = Link(  'd',     0.081,  'a' ,-0.01 , 'alpha',   pi/2 ,'offset',0);
L(2) = Link(  'd',     0 ,  'a' , 0.099 , 'alpha',   0 ,'offset',pi/2);
L(3) = Link(  'd',  0 ,  'a' , -0.01 , 'alpha',pi/2,'offset',pi/2);
L(4) = Link( 'd',  0.117+0.123,  'a' , 0 , 'alpha', pi/2 ,'offset',0);
L(5) = Link( 'd',0 ,  'a' , 0.057 , 'alpha',pi/2,'offset',-pi);
% L(6) = Link( 'd',  0.225 ,  'a' , 0 , 'alpha',0,'offset',0);
robot = SerialLink(L,'name','五自由度机械臂'); %建立连杆机器
robot.display;
robot.teach;       %画出模型并进行调控
% robot.plot([0]) %输入一定参数后机器人图形
%%
%轨迹规划
Theta=[40,-30,-30,30,-15;
       0,15,0,10,20;
       -40,30,30,-20,30];
Velocity=[0,0,0,0,0,0;40,40,20,30,20,10;0,0,0,0,0,0];
Accle=[0,0,0,0,0,0;0,0,0,0,0,0;0,0,0,0,0,0];
[m,n]=size(Theta);
% 三次多项式轨迹规划,定义插补次数n,根据驱动器支持的最大插补次数设定
Time=[0,0,0,0,0,0;5,5,5,5,5,5;10,10,10,10,10,10];
StopTime=Time(3,1);
FixedStep=0.2;
SimpleNum=0:FixedStep:StopTime;Cunt=length(SimpleNum);
for i=1:n
    %% 求每个关节角的五次多项式插补轨迹点
    [q(:,i),qd(:,i),qdd(:,i)] = Fivejtraj_Function(Theta(:,i),Time(:,i), ...
                                Velocity(:,i),Accle(:,i),FixedStep); 
end
qT=q';vT=qd';aT=qdd';t=2000;
robot.plot(q*(pi/180)) 
Tc=robot.fkine(q*(pi/180))
Tjtraj=transl(Tc);
hold on
plot2(Tjtraj,'r');grid on;

figure(3)
i=1:5;
subplot(3,1,1);
plot(q(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('位置');
grid on;
subplot(3,1,2);

plot(qd(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('速度');
grid on;
subplot(3,1,3);

plot(qdd(:,i));
legend('theta1','theta2','theta3','theta4','theta5')
title('加速度');
grid on;

结果如下:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

JVM中分代回收机制

为什么要分为新生代和老年代? 分为新生代(Young Generation)和老年代(Old Generation)是为了更有效地管理和优化内存的使用。 新生代主要存放生命周期较短的对象,例如方法的局部变量、临时变量等。由于这…

奥威BI财务数据分析方案:借BI之利,成就智能财务分析

随着智能技术的发展,各行各业都走上借助智能技术高效运作道路,财务数据分析也不例外。借助BI商业智能技术能够让财务数据分析更高效、便捷、直观立体,也更有助于发挥财务数据分析作为企业经营管理健康晴雨表的作用。随着BI财务数据分析经验的…

数据结构介绍

1、什么是数据结构呢? 计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。数据结构是为了更方便的管理和使用数据,需要结合具体的业务来进行选择。一般情况下,精心选择的数据结构可以带来更高的运行或者存储效率。…

STM32单片机并口通信编程实例:代码详解与应用案例

引言: 单片机并口通信是一种传统而常用的通信方式,通过并行方式进行数据传输。尽管串口通信在现代应用中更加普遍,但并口通信在一些特定领域的应用仍然具有重要意义。本文将介绍单片机并口通信的原理、配置和实践方法,并给出STM32…

中电金信通过KCSP认证 云原生能力获权威认可

中电金信通过KCSP(Kubernetes Certified Service Provider)认证,正式成为CNCF(云原生计算基金会)官方认证的 Kubernetes 服务提供商。 Kubernetes是容器管理编排引擎,底层实现为容器技术,是云原…

【数据结构与算法】普里姆算法

普里姆算法 最小生成树 最小生成树,简称MST。 给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这就叫最小生成树。N 个顶点,一定有 N - 1 条边半酣全部顶点N - 1 条边都在图中举例说明…

爬虫逆向实战(五)--猿人学第三题

一、数据接口分析 主页地址:猿人学第三题 1、抓包 通过抓包可以发现数据接口是api/match/3 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 无cookie是否加密? 无 二、发送请求 …

【Java】智慧工地SaaS平台源码:AI/云计算/物联网/智慧监管

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

Redis对象和五种常用数据类型

Redisobject 对象 对象分为键对象和值对象 键对象一般是string类型 值对象可以是string,list,set,zset,hash q:redisobj的结构 typedef struct redisObject { //类型 unsigned type:4; //编码 unsigned encoding:4; //指向底层实现…

ArcGIS Pro如何制作不规则形状图例

在默认的情况下,ArcGIS Pro生成的图例是标准的点、直线和矩形的,对于湖泊等要素而言,这样的表示方式不够直观,我们可以将其优化一下,制作不规则的线和面来代替原有图例,这里为大家介绍一下制作方法&#xf…

广东灯具3D扫描抄数建模服务3D测绘出图纸三维逆向设计-CASAIM

灯具三维逆向建模是一种将实际物体转换为数字模型的过程。通过逆向工程技术,可以将现有的灯具进行3D扫描,然后利用专业的逆向设计软件将其转换为准确的三维模型。 以下是CASAIM实施灯具三维逆向建模的一般步骤图: 1. 扫描:三维扫…

基于Prometheus监控Kubernetes集群

目录 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装flannel、cni 2.8、部署测…

读高性能MySQL(第4版)笔记03_监控

1. 服务级别帮助你定义客户满意的程度和标准,以便你在解决性能、可扩展性挑战等事情与开发内部工具之间做出时间权衡 2. 服务水平指标(SLI) 2.1. 如何衡量客户是否满意 3. 服务水平目标(SLO) 3.1. 为了确保客户满意…

三维模型OSGB格式轻量化顶点压缩主要技术方法分析

三维模型OSGB格式轻量化顶点压缩主要技术方法分析 在三维模型应用中,轻量化处理是提高数据传输效率、减少渲染时间和优化用户体验的重要手段。而OSGB格式是一种常见的三维模型格式,在进行轻量化处理时,顶点压缩是一种常用的技术方法。本文将…

Redis 十大数据类型

Redis数据类型都有哪些? Redis支持丰富的数据类型,那么具体在Redis7中都有哪些数据类型呢?请看下图: 官网介绍:https://redis.io/docs/data-types/。 其中,String、Hash、List、Set、Sorted Set等类型是大…

爬虫逆向实战(十五)--阿某某营登录

一、数据接口分析 主页地址:阿某某营 1、抓包 通过抓包可以发现登录接口是Users/Login 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个s加密参数 请求头是否加密? 无响应是否加密? 无cookie是…

2022年电赛C题——小车跟随行驶系统——做题记录以及经验分享

前言 自己打算将做过的电赛真题,主要包含控制组的,近几年出现的小车控制题目,自己做过的真题以及在准备电赛期间刷真题出现的问题以及经验分享给大家 这次带来的是22年电赛C题——小车跟随行驶系统,这道题目指定使用的是TI的单片…

uniapp微信小程序区分正式版,开发版,体验版

小程序代码区分是正式版,开发版,还是体验版 通常正式和开发环境需要调用不同域名接口,发布时需要手动更换 或者有些东西不想在正式版显示,只在开发版体验版中显示,也需要去手动隐藏 官方没有明确给出判断环境的方法&a…

web实现酷炫的canvas粒子动画背景

文章目录 前言一、particle-bg1. git地址:2. 安装3. 使用4. 完整demo 二、tsParticles1. 源码地址:2. 安装3. 引入4. 使用5. 几个例子5.1 ts粒子五彩纸屑烟花5.2 多粒子产卵器-用tsParticles制作5.3 ts粒子鼠标吸引力5.4 粒子烟花 源码地址完结 前言 粒…

C++--深入类和对象(上)

引言: 本篇博客将深入探究C中的类和对象。我们将从普通高校教学点开始,逐步介绍类的定义、对象的创建和使用,以及类与对象之间的关系。通过详细讲解访问控制和成员函数,我们将揭示封装的重要性以及如何实现数据的隐藏和安全性。 目…