机械臂轨迹规划篇(一)MATLAB测试三次多项式样条插值
MATLAB三次多项式样条插值
- 前言
- 机械臂运动空间
- 三次多项式插值原理
- MATLAB仿真测试
前言
最近这一段时间有点忙,所以博客这方面也更的少了,不过我有学到新的知识,还是会尽量更的,由于之前一直也在Matlab里仿真过机械臂,所以这次就准备更下Matlab里使用D-H模型搭建机械臂,用三次、五次多项式样条插值规划机械臂轨迹算法。
机械臂运动空间
机械臂运动轨迹规划在空间可以分为两大类:关节空间轨迹规划与笛卡尔空间轨迹规划。机械臂关节空间的轨迹规划解决机械臂从起始位姿到终止位姿去取放物体的问题。机械臂末端移动的过程并不重要,只要求运动是平滑的且没有碰撞产生。而笛卡尔空间轨迹规划要解决的是机械臂末端确定的轨迹规划问题;在关节空间中进行轨迹规划时,算法简单、工具移动效率高、关节空间与直角坐标空间连续的对应关系是不存在的,因此机构的奇异性问题一般不会发生。对于无路径的要求,应尽量在关节空间进行轨迹规划。
三次多项式插值原理
三次多项式插值适用于起点和终点速度为零的情况。约束关节在起点和终点为零的角度值,规定轨迹端点位置角速度为定值。
设关节角满足下式:
{ θ ( t ) = a 0 + a 1 t + a 2 t 2 + a 3 t 3 θ ( t ) ˙ = a 1 + 2 a 2 t + 3 a 3 t 2 θ ( t ) ¨ = 2 a 2 + 6 a 3 t \begin{cases} \theta(t)=a_0+a_1t+a_2t^2+a_3t^3\\\dot{\theta(t)}=a_1+2a_2t+3a_3t^2\\\ddot{\theta(t)}=2a_2+6a_3t\\ \end{cases} ⎩⎪⎨⎪⎧θ(t)=a0+a1t+a2t2+a3t3θ(t)˙=a1+2a2t+3a3t2θ(t)¨=2a2+6a3t
将相邻两个点看作是一小段轨迹的起点与终点,分别用 θ 0 \theta_0 θ0和 θ f \theta_f θf表示,设起始速度 v 0 v_0 v0,终止速度v_f。
{ θ ( t 0 ) = θ 0 θ ( t f ) = θ f θ ( t 0 ) ˙ = v 0 θ ( t f ) ˙ = v f \begin{cases} \theta(t_0)=\theta_0\\\theta(t_f)=\theta_f\\\dot{\theta(t_0)}=v_0\\\dot{\theta(t_f)}=v_f \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧θ(t0)=θ0θ(tf)=θfθ(t0)˙=v0θ(tf)˙=vf
将约束条件代入函数,可以求得系数(设t_0=0)
{ a 0 = θ 0 a 1 = v 0 a 2 = 3 t f 2 ( θ f − θ 0 ) − 1 t f ( 2 v 0 + v f ) a 3 = 2 t f 3 ( θ 0 − θ f ) + 1 t f 2 ( v 0 + v f ) \begin{cases} a_0=\theta_0\\a_1=v_0\\a_2=\frac{3}{t_f^2}(\theta_f-\theta_0)-\frac{1}{t_f}(2v_0+v_f)\\a_3=\frac{2}{t_f^3}(\theta_0-\theta_f)+\frac{1}{t_f^2}(v_0+v_f) \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧a0=θ0a1=v0a2=tf23(θf−θ0)−tf1(2v0+vf)a3=tf32(θ0−θf)+tf21(v0+vf)
三次多项式轨迹规划函数如下:
{ θ ( t ) = θ 0 + v 0 t + a 2 t 2 + [ 3 t f 2 ( θ f − θ 0 ) − 1 t f ( 2 v 0 + v f ) ] t 2 + [ 2 t f 3 ( θ 0 − θ f ) + 1 t f 2 ( v 0 + v f ) ] t 3 θ ( t ) ˙ = v 0 + 2 [ 3 t f 2 ( θ f − θ 0 ) − 1 t f ( 2 v 0 + v f ) ] t + 3 [ 2 t f 3 ( θ 0 − θ f ) + 1 t f 2 ( v 0 + v f ) ] t 2 θ ( t ) ¨ = 2 [ 3 t f 2 ( θ f − θ 0 ) − 1 t f ( 2 v 0 + v f ) ] + 6 [ 2 t f 3 ( θ 0 − θ f ) + 1 t f 2 ( v 0 + v f ) ] t \begin{cases} \theta(t)=\theta_0+v_0t+a_2t^2+[\frac{3}{t_f^2}(\theta_f-\theta_0)-\frac{1}{t_f}(2v_0+v_f)]t^2+[\frac{2}{t_f^3}(\theta_0-\theta_f)+\frac{1}{t_f^2}(v_0+v_f)]t^3\\\dot{\theta(t)}=v_0+2[\frac{3}{t_f^2}(\theta_f-\theta_0)-\frac{1}{t_f}(2v_0+v_f)]t+3[\frac{2}{t_f^3}(\theta_0-\theta_f)+\frac{1}{t_f^2}(v_0+v_f)]t^2\\\ddot{\theta(t)}=2[\frac{3}{t_f^2}(\theta_f-\theta_0)-\frac{1}{t_f}(2v_0+v_f)]+6[\frac{2}{t_f^3}(\theta_0-\theta_f)+\frac{1}{t_f^2}(v_0+v_f)]t \end{cases} ⎩⎪⎪⎨⎪⎪⎧θ(t)=θ0+v0t+a2t2+[tf23(θf−θ0)−tf1(2v0+vf)]t2+[tf32(θ0−θf)+tf21(v0+vf)]t3θ(t)˙=v0+2[tf23(θf−θ0)−tf1(2v0+vf)]t+3[tf32(θ0−θf)+tf21(v0+vf)]t2θ(t)¨=2[tf23(θf−θ0)−tf1(2v0+vf)]+6[tf32(θ0−θf)+tf21(v0+vf)]t
MATLAB仿真测试
基于上面的信息,我们就可以用Matlab来写三项式插值的脚步代码,设机械臂某关节在5s内由初始点A经过中间点B到达目标点C的位置、速度、加速度变化情况,设
θ A = 25 , θ B = 70 , θ C = 50 ; θ A ˙ = 30 , θ B ˙ = 20 , θ C ˙ = 30 ; θ A ¨ = 2 , θ B ¨ = 4 , θ C ¨ = 3 \theta_A=25 ,\theta_B=70,\theta_C=50;\\\dot{\theta_A}=30,\dot{\theta_B}=20,\dot{\theta_C}=30;\\ \ddot{\theta_A}=2,\ddot{\theta_B}=4,\ddot{\theta_C}=3 θA=25,θB=70,θC=50;θA˙=30,θB˙=20,θC˙=30;θA¨=2,θB¨=4,θC¨=3
clear;clc;close all;
q_array=[25,70,50];%指定起止位置
t_array=[0,2,5];%指定起止时间
v_array=[30,20,30];%指定起止速度
a_array=[2,4,3];%指定起止加速度
t=t_array(1);q=q_array(1);v=v_array(1);a=a_array(1);%初始状态
for i=1:1:length(q_array)-1 %每一段规划的时间
T=t_array(i+1)-t_array(i);
a0=q_array(i);
a1=v_array(i);
a2=(q_array(i+1)-q_array(i))*3/(T^2)-(2*v_array(i)+v_array(i+1))/T;
a3=(q_array(i)-q_array(i+1))*2/(T^3)+(v_array(i)+v_array(i+1))/(T^2);
ti=t_array(i):0.02:t_array(i+1);
qi=a0+a1*(ti-t_array(i))+a2*(ti-t_array(i)).^2+a3*(ti-t_array(i)).^3;
vi=a1+2*a2*(ti-t_array(i))+3*a3*(ti-t_array(i)).^2;
ai=2*a2+6*a3*(ti-t_array(i));
t=[t,ti(2:end)];q=[q,qi(2:end)];v=[v,vi(2:end)];a=[a,ai(2:end)];
end
subplot(3,1,1),plot(t,q,'r'),xlabel('t'),ylabel('position');hold on;plot(t_array,q_array,'*','color','r'),grid on;
subplot(3,1,2),plot(t,v,'b'),xlabel('t'),ylabel('velocity');hold on;plot(t_array,v_array,'o','color','g'),grid on;
subplot(3,1,3),plot(t,a,'g'),xlabel('t'),ylabel('accelerate');hold on;plot(t_array,a_array,'^','color','b'),grid on;
下图为Matlab测试结果
从曲线可以看出,红色关节角度曲线平滑,而蓝色速度曲线在中间点2s处出现突
变,绿色加速度曲线突变的更加明显。
机械臂轨迹规划篇(一)MATLAB测试三次多项式样条插值相关推荐
- 基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计
基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计(报告+ppt) 摘 要:本文的研究对象为EEZYbotARM MK2三自由度机械臂,分析了其机械结构,建立D-H参数表,同时在MATLA ...
- 基于MATLAB的关节型六轴机械臂轨迹规划仿真(2021实测完整代码)
我是一个目录 基于MATLAB的关节型六轴机械臂轨迹规划仿真 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3实验结果 4 全部代码 基于MATLAB的关节型 ...
- 采用rrt进行机械臂轨迹规划得到轨迹的算法步骤
采用RRT进行机械臂轨迹规划得到轨迹的算法步骤如下: 定义机械臂的状态空间和操作空间,其中状态空间包括机械臂的关节角度.末端执行器的位置和姿态等信息,操作空间包括机械臂的关节空间和笛卡尔空间. 初始化 ...
- 【机械仿真】基于matlab简化几何解法六轴机械臂位置规划【含Matlab源码 2128期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab简化几何解法六轴机械臂位置规划[含Matlab源码 2128期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
- matlab 并联机械臂_MATLAB robot toolbox 机械臂轨迹规划
%机器人构建 clc; clear; L1=link([pi/2 150 0 0]); L2=link([0 570 0 0]); L3=link([pi/2 130 0 0]); L4=link([ ...
- 【机械臂轨迹规划】足式机器人足端摆线轨迹曲线
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.摆线函数原理 二.摆线函数缺点 总结 参考资料 前言 本文先对摆 ...
- 机械臂轨迹规划最新论文
Task constrained motion planning for 7-degree of freedom manipulators with parameterized submanifold ...
- matlab 角度转四元数_基于Matlab的机械臂路径规划
什么是 trajectory(路径)规划 中文路径在英语中可能有两种翻译: 1. path 2. trajectory 首先告诉大家,我们所说的"路径"是后者--trajector ...
- 【机械】基于简化几何解法的六轴机械臂位置规划附matlab代码
1 内容介绍 基于简化几何解法的六轴机械臂位置规划附matlab代码 2 部分代码 clc; clear; %载入数据 importfile('shuiping.mat'); theta_shuipi ...
最新文章
- android+notepad教程,Android平台应用开发实例:Notepad
- QTextCodec中的setCodecForTr等终于消失了 (Qt5)
- Java 洛谷 P2141 珠心算测验
- C语言 泛型链表的实现
- 用 pandas + matplotlib 绘制精美的K线图
- java 利用JAX-RS快速开发RESTful 服务
- HDU - 4348To the moon——主席树+区间修改
- LeetCode 418. 屏幕可显示句子的数量(DP)*
- 常见浏览器的兼容问题
- 20190817:(leetcode习题)旋转图像
- python金融数据分析电子版_python 金融大数据分析 pdf
- bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
- NLP学习一 形式语言与自动机
- pq分解法matlab编程,基于MATLAB的PQ分解法电力系统潮流计算.doc
- Android微信抢红包服务源码
- mac显示和隐藏文件命令
- C#判断用户是否使用微信浏览器,并据此来显示真实内容或二维码
- 相似度系列-3:传统方法ROUGE ROUGE: A Package for Automatic Evaluation of Summaries
- 预计每天全世界上传的短视频超过4亿条
- HC32L136/HC32L176开发之硬件IIC驱动AT24C64