基于Matlab模拟四连杆机器人

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

4 连杆机器人的运动学模拟器,演示:

- 机器人的硬编码行走。

- 反向运动学控制。

- 通过 Arduino 与物理机器人交互进行卡尔曼滤波

- Q-Learning,从一个位置移动到另一个位置,同时保持稳定并避开障碍物。

- 模拟退火,从一个位置移动到另一个位置,同时保持稳定并避开障碍物。

- 模拟退火向前走,避开遇到的障碍物。

⛄ 部分代码

function fixed2(phiVec,lVec,mVec,pos2,footsep,corners)

%%draws/re-draws robot position with foot 2 fixed.

%Colours background red for any collisions/instabilities

%keep track of lines to be deleted later

initialchildno = length(get(gca,'children'));

%% Initialise animation

switch nargin

    case 5

        lineObj = animInit();

        animation(phiVec,lVec,mVec,lineObj,pos2,footsep,initialchildno);

    case 6

        lineObj = animInit(corners);

        animation(phiVec,lVec,mVec,lineObj,pos2,footsep,initialchildno,corners);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Local functions                                                       %%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Animation initialisation

function lineObj = animInit(corners)

    

    

    lWin = 5.0;    %window size

    figure(1)

    hold on

    axis equal

    axis([-5 5 -0.4 6])

    % Ground plot

    plot([-lWin lWin],[0 0],'k','LineWidth',2)

    %Underground lines

    for j = 1:30

        k = -lWin-1+j*2*lWin/20;

        plot([k;k+0.2],[0;-0.2],'k','LineWidth',2)

    end

    

    if nargin == 1

    

    %Grid added

    gridinitialise([-5;5],30,[0;6],30);

    %Obstacle added

    for i = 1:length(corners)/2

        obstenter(corners(:,2*i-1:2*i))

    end

    end

    

    %link line objects

    lineObj.h1 = line(0,0,'color','k','LineWidth',3);

    lineObj.h2 = line(0,0,'color','k','LineWidth',3);

    lineObj.h3 = line(0,0,'color','k','LineWidth',3);

    lineObj.h4 = line(0,0,'color','k','LineWidth',3);

    

    %foot line objects

    lineObj.f1 = line(0,0,'color','k','LineWidth',3);

    lineObj.f2 = line(0,0,'color','k','LineWidth',3);

    %joint line objects

    lineObj.d1 = line(0,0,'color','k','LineWidth',5,'Marker','o');

    lineObj.d2 = line(0,0,'color','k','LineWidth',5,'Marker','o');

    lineObj.d3 = line(0,0,'color','k','LineWidth',5,'Marker','o');

    

    %centre of mass line object

    lineObj.com = line(0,0,'color','r','LineWidth',3,'Marker','o');

end

    rMat = rmat2calc(phiVec,lVec,pos2);

    r00 = rMat(:,1);

    r11 = rMat(:,2);

    r22 = rMat(:,3);

    r33 = rMat(:,4);

    r44 = rMat(:,5);

    rf1 = rMat(:,6);

    rf2 = rMat(:,7);

    

    [ground, ~] = throughground(rMat);

    scollide = selfcollide(rMat,footsep);

    com = centreofmass(mVec,rMat);

    unstable = stability(com,pos2,0,lVec,2);

    ocoll = 0;

    if nargin == 8

        for i = 1:length(corners)/2

           if obstaclecollide(rMat,corners(:,2*i-1:2*i))

               ocoll = 1;

           end

        end

    end

    

    %set position

     set(lineObj.h1,'xdata',[r00(1) r11(1)],'ydata',[r00(2) r11(2)])

     set(lineObj.h2,'xdata',[r11(1) r22(1)],'ydata',[r11(2) r22(2)])

     set(lineObj.h3,'xdata',[r22(1) r33(1)],'ydata',[r22(2) r33(2)])

     set(lineObj.h4,'xdata',[r33(1) pos2(1)],'ydata',[r33(2) pos2(2)])

     

     set(lineObj.f1,'xdata',[r00(1) rf1(1)],'ydata',[r00(2) rf1(2)])

     set(lineObj.f2,'xdata',[pos2(1) rf2(1)],'ydata',[pos2(2) rf2(2)])

     set(lineObj.d1,'xdata',r11(1),'ydata',r11(2))

     set(lineObj.d2,'xdata',r22(1),'ydata',r22(2))

     set(lineObj.d3,'xdata',r33(1),'ydata',r33(2))

     

     set(lineObj.com,'xdata',com(1),'ydata',com(2))

     

     if ground == 1 || scollide == 1 || unstable == 1 || ocoll == 1

         set(gcf,'color','r');

     else

         set(gcf,'color','w');

     end

    drawnow

    

    %delete previous iteration

    children = get(gca, 'children');

    delete(children(end-initialchildno+1:end));

end

end

%returns array of fifth order polynomial given the start and end points

t0 = 1;

f = start;

coeff = [t0^5, t0^4, t0^3; 5*t0^4, 4*t0^3, 3*t0^2; 20*t0^3, 12*t0^2, 6*t0];

values5 = coeff^(-1)*[finish - start; 0; 0];

a = values5(1);

b = values5(2);

c = values5(3);

smoothout = zeros(p,1);

for i = 1:1:p

    x = a*(i*t0/p)^5 + b*(i*t0/p)^4 + c*(i*t0/p)^3 + f;

    if x > 1

        x = 1;

    end

    if x < 0

        x = 0;

    end

    smoothout(i) = x;

    

end

end

⛄ 运行结果

⛄ 参考文献

​[1]葛建兵, 翟雪琴, 窦进强,等. 基于MATLAB的机器人运动学仿真[J]. 机械设计与制造, 2008.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值