六轴机器人轨迹规划之五段位置s曲线插补

news/2024/11/20 23:27:53/

1.原理
五段s曲线相较于三段s曲线而言加速度也是连续变化的,能适用于平稳性要求更高的场合。分为加加速、加减速、匀速、减加速、减减速这五段。
设除匀速段以为,其余四段的时间相等都为 Ta T a ,总时间为 T T ,匀速段速度为vs,四个变速段斜率大小都为 A A ,整段轨迹的总位移L、加加速段位移 L1 L 1 、加减速段位移 L2 L 2

Ta=vsAL1=16AT3aL2=56AT3aT=4Ta+L2L12L2vs { T a = v s A L 1 = 1 6 A T a 3 L 2 = 5 6 A T a 3 T = 4 T a + L − 2 L 1 − 2 L 2 v s

则加速度分段函数为
a=At,(0tTa)A(t2Ta),(Tat2Ta)0,(2TatT2Ta)A[t(T2Ta)],(T2TatTTa)A(tT),(TTatT) a = { A t , ( 0 ≤ t ≤ T a ) − A ( t − 2 T a ) , ( T a ≤ t ≤ 2 T a ) 0 , ( 2 T a ≤ t ≤ T − 2 T a ) − A [ t − ( T − 2 T a ) ] , ( T − 2 T a ≤ t ≤ T − T a ) A ( t − T ) , ( T − T a ≤ t ≤ T )

对加速度积分可得
v=12At2,(0tTa)12A(t2Ta)2+AT2a,(Tat2Ta)vs,(2TatT2Ta)12AtT+2Ta)2+AT2a,(T2TatTTa)12A(tT)2,(TTatT) v = { 1 2 A t 2 , ( 0 ≤ t ≤ T a ) − 1 2 A ( t − 2 T a ) 2 + A T a 2 , ( T a ≤ t ≤ 2 T a ) v s , ( 2 T a ≤ t ≤ T − 2 T a ) − 1 2 A ( t − T + 2 T a ) 2 + A T a 2 , ( T − 2 T a ≤ t ≤ T − T a ) 1 2 A ( t − T ) 2 , ( T − T a ≤ t ≤ T )

对速度积分可得到位移s的分段函数
s=16At3,(0tTa)16A(t2Ta)3+AT2atAT3a,(Tat2Ta)AT2atAT3a,(2TatT2Ta)16A(tT+2Ta)3+AT2atAT2a,(T2TatTTa)16A(tT)32AT3a+AT2bT,(TTatT) s = { 1 6 A t 3 , ( 0 ≤ t ≤ T a ) − 1 6 A ( t − 2 T a ) 3 + A T a 2 t − A T a 3 , ( T a ≤ t ≤ 2 T a ) A T a 2 t − A T a 3 , ( 2 T a ≤ t ≤ T − 2 T a ) − 1 6 A ( t − T + 2 T a ) 3 + A T a 2 t − A T a 2 , ( T − 2 T a ≤ t ≤ T − T a ) 1 6 A ( t − T ) 3 − 2 A T a 3 + A T b 2 T , ( T − T a ≤ t ≤ T )

3.matlab代码实现
指定位置、速度、斜率

clc;
clear;
%初始条件
x_arry=[0,10,20,30];
v_arry=[2,2,2];
A_arry=[3,3,3];
weiyi=[x_arry(1)];sudu=[0];shijian=[0];timeall=0;jiasudu=[0]
for i=1:1:length(x_arry)-1;
%清空a=[];v=[];s=[];
%计算加减速段的时间和位移L=x_arry(i+1)-x_arry(i);A=A_arry(i);vs=v_arry(i);Ta=sqrt(vs/A);L1=A*(Ta^3)/6;L2=A*(Ta^3)*(5/6); 
%计算整段轨迹的总位移T=4*Ta+(L-2*L1-2*L2)/vs;for t=0:0.001:Tif t<=Ta;%加加速度阶段ad=A*t;vd=0.5*A*t^2;sd=(1/6)*A*t^3;a=[a,ad];v=[v,vd];s=[s,sd];elseif t>Ta && t<=2*Ta;%加减速阶段ad=-A*(t-2*Ta);vd=-0.5*A*(t-2*Ta)^2+A*Ta^2;sd=-(1/6)*A*(t-2*Ta)^3+A*Ta^2*t-A*Ta^3;a=[a,ad];v=[v,vd];s=[s,sd];elseif t>2*Ta && t<=T-2*Ta;%匀速阶段ad=0;vd=vs;sd=A*Ta^2*t-A*Ta^3;  a=[a,ad];v=[v,vd];s=[s,sd];elseif t>T-2*Ta && t<=T-Ta;%减加度阶段ad=-A*(t-(T-2*Ta));vd=-0.5*A*(t-T+2*Ta)^2+A*Ta^2;sd=-(1/6)*A*(t-T+2*Ta)^3+A*Ta^2*t-A*Ta^3;a=[a,ad];v=[v,vd];s=[s,sd];elseif t>T-Ta && t<=T;%减减阶段ad=A*(t-T);vd=0.5*A*(t-T)^2;sd=(1/6)*A*(t-T)^3-2*A*Ta^3+A*Ta^2*T;a=[a,ad];v=[v,vd];s=[s,sd];endend
%时time=[timeall:0.001:timeall+T];timeall=timeall+T;
%连接每一段轨迹weiyi=[weiyi,s(2:end)+x_arry(i)];sudu=[sudu,v(2:end)];jiasudu=[jiasudu,a(2:end)];shijian=[shijian,time(2:end)];
end
subplot(3,1,1),plot(shijian,weiyi,'r');xlabel('t'),ylabel('position');grid on;
subplot(3,1,2),plot(shijian,sudu,'b');xlabel('t'),ylabel('velocity');grid on;
subplot(3,1,3),plot(shijian,jiasudu,'g');xlabel('t'),ylabel('accelerate');grid on;

结果如下
这里写图片描述


http://www.ppmy.cn/news/491201.html

相关文章

k8s中的endpoint

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 架构系列文章 service selector service通过selector和pod建立关联。 k8s会根据service关联到pod的podIP信息组合成一个endpoint。 若service定义中没有selector字段&#xff0c;service被创建时&#xf…

Kubernetes k8s理论篇

目录 一、k8s概述 1.1 什么是k8s&#xff1f; 1.1.1 作用 1.1.2 由来 1.1.3 含义 1.2 为什么需要K8S K8S的目标是让部署容器化应用简单高效。 1.3 k8s的特性 二、Kubernetes集群架构与组件 2.1Master组件 2.1.1 Kube-apiserver 2.1.2 Kube-controller-manager 2.…

matlab实现S函数的五种方式

Matlab允许你使用以下五种方式之一来实现S函数:A Level-1 M-file S-function provides a simple M interface to interact with a small portion of the S-function API. Level-2 M-file S-functions supersede Level-1 M-file S-functions.Level 1 M文件S函数----这种方式提供…

k8s入门:部署应用到 k8s 集群

系列文章 第一章&#xff1a;✨ k8s入门&#xff1a;裸机部署 k8s 集群 第二章&#xff1a;✨ k8s入门&#xff1a;部署应用到 k8s 集群 第三章&#xff1a;✨ k8s入门&#xff1a;service 简单使用 第四章&#xff1a;✨ k8s入门&#xff1a;StatefulSet 简单使用 第五章&…

python s append_Python语句序列s=[1,2,3,4];s.append([5,6]);print(len(s))的运行结果是______。...

【单选题】Python语句序列“a=(1,2,3,None,(),[]);print(len(a))”的运行结果是()。 (2.0分) 【填空题】Python语句序列"s=[1,2,3,4];s.append([5,6]);print(len(s))"的运行结果是______。 (1.0分) 【判断题】判断正误 MOV [1200H], [SI] 【填空题】Python表达式10+5…

计算机b s架构模式图,深入理解B/S架构

最近看招聘信息很多都要求理解B/S架构,自己面试时也被问到过这个问题,查找了一些资料,整理出这篇博客。 一: B/S的概念 B/S(Brower/Server,浏览器/服务器)模式又称B/S结构,是Web兴起后的一种网络结构模式。 浏览器是客户端最主要的应用软件,客户机上只需要安装一个浏览器…

sprintf_s的用法探究

这个函数定义如下 int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ... ); 参数说明是这样的&#xff0c;第一个参数buffer是输出存储位置&#xff0c;第二个参数sizeOfBuffer是最大允许的字符数。 下面通过代码简单探究一下这个函数的应用…

S形曲线速度规划--5段式

为了减小机器人加速过程的冲击&#xff0c;这里梳理一下S形加减速相关知识。1. S加减速曲线 计算公式&#xff1a; 加加速度j ( t ) { J 0 ≤ t ≤ t 1 − J t 1 ≤ t ≤ t 2 0 t 2 ≤ t ≤ t 3 − J t 3 ≤ t ≤ t 4 J t 4 ≤ t ≤ t 5 j(t)\begin{cases} J & 0\leq t \l…