机械臂轨迹规划篇(一)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处出现突
变,绿色加速度曲线突变的更加明显。

### 回答1: STM32机械臂插值算法是指在机械臂控制和运动过程中,为了使机械臂的运动更加平滑、快速和精确,采用插值算法对运动路径进行精细化的处理。 机械臂系统的插值算法一般分为两步,第一步是生成轨迹,第二步是插值轨迹上的点。STM32机械臂系统采用的插值算法主要有线性插值、二次插值三次插值。其中,线性插值是最简单的插值算法,适用于直线和轻负载运动。二次插值适用于抛物线形状的曲线轨迹,能够处理轻负载和一些带弯曲的底盘运动。三次插值通常用于复杂或曲线型轨迹,可以实现高速重载和高精度控制,对CPU的要求更高。 在STM32机械臂控制系统中,插值算法需要依靠运动控制板和控制器完成,控制板负责计算和生成轨迹,控制器则根据轨迹上的点来控制电机的速度、方向和转动角度,并对机械臂进行实时反馈控制,从而实现自动抓取、放置、加工等动作。 总之,STM32机械臂插值算法可以提高机械臂的精度、速度和稳定性,减少机械臂运动过程中的震荡和抖动,提高生产效率和品质,是现代工业制造中不可或缺的一部分。 ### 回答2: STM32机械臂插值算法是一种将机械臂末端从一个位置移动到另一个位置的方法。插值算法的目的是实现平滑调节机械臂末端的速度和加速度,使其运动轨迹更加精确和稳定。在STM32机械臂插值算法中,主要包括线性插值三次样条插值和贝塞尔曲线插值。其中,线性插值是最简单的插值方法,通过将机械臂的运动轨迹划分成一些小线段,然后在每个小线段内运用线性公式来形成运动曲线。三次样条插值是一种平滑插值方法,通过对控制点进行三次多项式插值,可以保证机械臂末端的轨迹连续一阶导数,从而实现平滑移动。贝塞尔曲线插值则是一种更加高级的算法,通过控制贝塞尔曲线上的点,可以实现机械臂的平滑运动,同时也可以调整机械臂运动的速度和加速度。总之,STM32机械臂插值算法是一种非常重要的方法,可以帮助机械臂实现更加精确和高效的移动,从而提高自动化生产线的效率和质量。 ### 回答3: STM32机械臂插值算法是一种基于32位微控制器的运动控制技术,用于实现机械臂运动过程中的平滑、均匀、连续的运动轨迹。机械臂插值算法通过将机械臂运动过程分为多个微小的线性或非线性段,然后在这些段之间进行插值运算,使机械臂的运动更加平滑和自然。 STM32机械臂插值算法是一种高效、稳定的运动控制技术,其核心特点包括高精度、高可靠性、高速度、低噪音、低误差等。在实际机械臂运动控制中,插值算法可以大幅提升机械臂的精度和效率,同时降低机械臂的能耗和机械冲击力,提高机械臂运动过程中的稳定性和平滑性。 在STM32机械臂插值算法的实现过程中,需要注意以下几点:首先,要根据机械臂运动特点确定插值算法类型,包括三次样条插值、贝塞尔插值、直线插值等。其次,要进行运动参数的计算和优化,包括加速度、速度、位置等。最后,要结合运动控制器实现机械臂的运动控制,确保运动轨迹的精度和稳定性。 总之,STM32机械臂插值算法是现代机械臂运动控制技术中不可缺少的一环,其应用范围广泛,能够极大地提高机械臂的运动效率和精度,同时也能够保证机械臂的安全性和稳定性。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值