3-5-3机械臂轨迹规划matlab仿真

        查看很多文章有三次多项式插值,五次多项式插值,找了很久没有发现有3-5-3混合多项式插值的代码,想想估计是太简单了, 没有人写这个东西。我当机立断,想把这个代码写出来。虽然简单,但是对于我这种matlab小白来说还是有些吃力。

        本文代码借鉴:https://blog.csdn.net/jldemanman?type=blog

        代码写出来,我也不知道对不对,希望各位大佬能给我提提建议,纯小白一枚。

clear;
clc;
q_array=[0,5,10,20];%指定起止位置
t_array=[0,1.5,2,5];%指定起止时间
v_array=[0,10,20,0];%指定起止速度
a_array=[0,2,5,0];%指定起止加速度

t=t_array(1);%初始状态
q=q_array(1);
v=v_array(1);
a=a_array(1);

for i=1:1:length(q_array)-1;%每一段规划的时间
    if i==1
        a10 = q_array(i);
        a11 = v_array(i);
        a12=(3/(t_array(i+1)-t_array(i))^2)*(q_array(i+1)-q_array(i))-(1/(t_array(i+1)-t_array(i)))*(2*v_array(i)+v_array(i+1));
        a13=(2/(t_array(i+1)-t_array(i))^3)*(q_array(i)-q_array(i+1))+(1/(t_array(i+1)-t_array(i))^2)*(v_array(i)+v_array(i+1));%计算三次多项式系数
        
        tz = t_array(i)+0.001:0.001:t_array(i+1);
        qz = a10+a11*(tz-t_array(i))+a12*(tz-t_array(i)).^2+a13*(tz-t_array(i)).^3;
        vz = a11+2*a12*(tz-t_array(i))+3*a13*(tz-t_array(i)).^2;
        az = 2*a12+6*a13*(tz-t_array(i));
        t=[t,tz];
        q=[q,qz];
        v=[v,vz];
        a=[a,az];
        
    elseif i==2
        T=t_array(i+1)-t_array(i)
        a20=q_array(i);
        a21=v_array(i);
        a22=a_array(i)/2;
        a23=(20*q_array(i+1)-20*q_array(i)-(8*v_array(i+1)+12*v_array(i))*T-(3*a_array(i)-a_array(i+1))*T^2)/(2*T^3);
        a24=(30*q_array(i)-30*q_array(i+1)+(14*v_array(i+1)+16*v_array(i))*T+(3*a_array(i)-2*a_array(i+1))*T^2)/(2*T^4);
        a25=(12*q_array(i+1)-12*q_array(i)-(6*v_array(i+1)+6*v_array(i))*T-(a_array(i)-a_array(i+1))*T^2)/(2*T^5);%计算五次多项式系数 
        ti=t_array(i):0.001:t_array(i+1);
        qi=a20+a21*(ti-t_array(i))+a22*(ti-t_array(i)).^2+a23*(ti-t_array(i)).^3+a24*(ti-t_array(i)).^4+a25*(ti-t_array(i)).^5;
        vi=a21+2*a22*(ti-t_array(i))+3*a23*(ti-t_array(i)).^2+4*a24*(ti-t_array(i)).^3+5*a25*(ti-t_array(i)).^4;
        ai=2*a22+6*a23*(ti-t_array(i))+12*a24*(ti-t_array(i)).^2+20*a25*(ti-t_array(i)).^3;
        t=[t,ti(2:end)];
        q=[q,qi(2:end)];
        v=[v,vi(2:end)];
        a=[a,ai(2:end)];
    else
        a30 = q_array(i);
        a31 = v_array(i);
        a32=(3/(t_array(i+1)-t_array(i))^2)*(q_array(i+1)-q_array(i))-(1/(t_array(i+1)-t_array(i)))*(2*v_array(i)+v_array(i+1));
        a33=(2/(t_array(i+1)-t_array(i))^3)*(q_array(i)-q_array(i+1))+(1/(t_array(i+1)-t_array(i))^2)*(v_array(i)+v_array(i+1));%计算三次多项式系数
        
        ts = t_array(i)+0.001:0.001:t_array(i+1);
        qs = a30+a31*(ts-t_array(i))+a32*(ts-t_array(i)).^2+a33*(ts-t_array(i)).^3;
        vs = a31+2*a32*(ts-t_array(i))+3*a33*(ts-t_array(i)).^2;
        as = 2*a32+6*a33*(ts-t_array(i));
        t=[t,ts];q=[q,qs];v=[v,vs];a=[a,as];
        
    end
    
end

subplot(3,1,1),plot(t,q,'r'),xlabel('t'),ylabel('position');grid on;
subplot(3,1,2),plot(t,v,'b'),xlabel('t'),ylabel('velocity');grid on;
subplot(3,1,3),plot(t,a,'g'),xlabel('t'),ylabel('accelerate');grid on;

位置,速度,加速度 图:

还有一点不明白,为什么要使用3-5-3,用5-5-5不好吗?这样写完全是融合了两者的缺点。加速度很大,突变。难道是我理解的不对???

感谢各位纠错!!

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Matlab提供了机器人工具箱(Robotics Toolbox)来进行轨迹规划。在这个工具箱中,有通用的规划方法和机器人关节空间轨迹规划以及笛卡尔空间轨迹规划的方法。通用的规划方法包括点到点的规划和多维情况下的抛物线过渡的直线插值。关节空间轨迹规划和笛卡尔空间轨迹规划都在工具箱中提供了相应的函数。例如,可以使用`traj`函数进行笛卡尔空间轨迹规划。下面是一个示例代码: ```matlab mdl_puma560 t = 0:0.05:2; T1 = transl(0.3,0,0.3)*rpy2tr(45,10,20); T2 = transl(0.6,0,0.6)*rpy2tr(45,20,25); Tc = ctraj(T1,T2,length(t)); figure plot(t',transl(Tc)); figure plot(t',tr2rpy(Tc)); figure qc = p560.ikine6s(Tc); p560.plot(qc,'trail','b-','movie','ctraj.gif') ``` 这段代码演示了使用Matlab的机器人工具箱进行笛卡尔空间轨迹规划的过程。首先定义了两个位姿T1和T2,然后使用`ctraj`函数生成两个位姿之间的轨迹。然后通过绘图函数显示了位移和姿态的变化。最后通过逆运动学求解,计算了机器人的关节角度,并使用`plot`函数绘制了机器人的轨迹。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Matlab机器人工具箱(3)——轨迹规划](https://blog.csdn.net/weixin_43502392/article/details/105634856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值