查看: 753|回复: 5

[项目] 基于arduino的delta并联机械手

[复制链接]
  • TA的每日心情
    慵懒
    2019-3-19 09:59
  • 签到天数: 196 天

    [LV.7]常住居民III

    发表于 2019-1-6 17:06 | 显示全部楼层 |阅读模式
    本帖最后由 AimHigh 于 2019-1-7 09:04 编辑

          delta并联机械手现在广泛应用于工业,因为资金有限,用舵机做的,底座这些也是用的实验室抽屉打孔固定,已完工。                                                                                                                                                                                              微信图片_20190106160023.jpg
           首先说一下我的整体方案设计见图,它包括三个模块分别是舵机执行模块、电磁铁执行模块和串口通讯模块。其中舵机模块也是最重要的模块,需要三个舵机实现插补完成在空间走任意线段,定点搬运打孔等功能。
                                                                                                                 微信图片_20190106170743.png

        为了方便求解三自由度平台的空间位置关系,需要研究平台的运动规律。因为运动平台只有平动没有转动,其相对于固定平台没有旋转,所以姿态固定,机构中所有分支中的平行四边形框架始终为平面四边形,而不会扭曲为空间四边形。在此条件下,平行四边形左右两杆的运动与上下两杆中点连线的运动是相同。因此,在进行运动分析时,将Delta并联机器人机构做如图所示的简化。
                                                                                                        微信图片_20190106161008.png
        建立如图所示的动、静两个坐标系,静坐标系O-XYZ的原点O位于静平台的几何中心,即等边三角形A1A2A3的几何中心,Z轴垂直于静平台,OX垂直于A1A3。动平台上建立O’-X’Y’Z’坐标系,O’为动平台的几何中心,Z’轴垂直于动平台,O’X’垂直于C1C3。其中AiBi=L,CiBi=l。设定静平台的外接圆半径为R ,即OAI=R;设定动平台外接圆半径为r ,即O’C’I=r。机构运动时主动臂与垂直方向之间的夹角为θi,其中i= 1,2,3。机器人通过三个分支链将上下平台连接起来,驱动臂在电机的驱动下作一定角度的反复摆动,再通过平行四边形闭环和转动副使动平台作平移运动。然后需要进行运动学分析,求逆解,位置逆解就是已知机器人动平台在静平台坐标系O-XYZ中的位置,求解主动臂AiBi与静平台平面之间的夹角(即(90°-θi))。需要点数学基础,计算得到3个位置逆解如下:
                                微信图片_20190106161243.png 微信图片_20190106161307.png 微信图片_20190106161321.png
    再将运动学写成代码即可,如下所示为逆解代码:
    double nijie1(double R,double r,double L,double l,double x,double y,double z)
    {
      double K,M,N;
      K=((-(x*x+y*y+z*z)+(y+sqrt(3)*x)*(R-r)-(R-r)*(R-r)-L*L+l*l)/L+2*z);
      M=-2*(2*(R-r)-y-sqrt(3)*x);
      N=((-(x*x+y*y+z*z)+(y+sqrt(3)*x)*(R-r)-(R-r)*(R-r)-L*L+l*l)/L-2*z);
      double a=90-2*atan((-M-sqrt(M*M-4*K*N))/(2*K))*180/PI+30;
      return(a);//返回角度
    }
        为了使delta并联机械手末端执行器走出自己需要的轨迹,则需要加入插补算法,所以需要写好直线插补和空间圆弧插补算法。
    直线插补假设机器人动平台在空间坐标系中通过直线插补从A点运动到B点,插补精度为h,插补点时间间隔t。A点坐标为(xm,ym,zm),B点坐标为(xe,ye,ze)。C点为插补过程点(x1,y1,z1)。如图为直线插补图
    微信图片_20190106161825.png
    很简单的就可以求出BC直线段的距离,为了简化表述,做了流程图,插补具体流程图如下所示
                                                                                                    微信图片_20190106161950.png
    根据流程图将空间直线插补代码写入即可,如下所示:
    void chabu_line(double xm,double ym,double zm,double xe,double ye,double ze,double h,int t)
    {
      double x1,y1,z1,s;
      x1=xm;
      y1=ym;
      z1=zm;
      s=1;
         double a1=nijie1(75,25,90,300,x1,y1,z1);
         double a2=nijie2(75,25,90,300,x1,y1,z1);
         double a3=nijie3(75,25,90,300,x1,y1,z1);
        myservo1.write(a1);
        myservo2.write(a2);
        myservo3.write(a3);
        delay(t);//微秒延迟函数delayMicroseconds()
      while(s>0)
      {
        s=sqrt((xe-x1)*(xe-x1)+(ye-y1)*(ye-y1)+(ze-z1)*(ze-z1));
        if(s>h)
        {
        x1=h*(xe-x1)/s+x1;
        y1=h*(ye-y1)/s+y1;
        z1=h*(ze-z1)/s+z1;
        a1=nijie1(75,25,90,300,x1,y1,z1);
        a2=nijie2(75,25,90,300,x1,y1,z1);
        a3=nijie3(75,25,90,300,x1,y1,z1);
        myservo1.write(a1);
        myservo2.write(a2);
        myservo3.write(a3);
        delay(t);//微秒延迟函数delayMicroseconds()
          }
        else
        {
          a1=nijie1(75,25,90,300,xe,ye,ze);
          a2=nijie2(75,25,90,300,xe,ye,ze);
          a3=nijie3(75,25,90,300,xe,ye,ze);
          myservo1.write(a1);
          myservo2.write(a2);
          myservo3.write(a3);
          s=0;
          }
      }
    }
    圆弧插补:圆弧插补和直线插补类似,对于任意一段平面圆弧上,我们需要找到圆弧起点到终点过程的插补点。如图所示为圆弧插补图,我们选任意一圆心点O’,其坐标是O’(x0,y0,z0),A点为初始点,其坐标为(xm,ym,zm),若以O为圆心,OA为半径,逆时针转b个角度,到达B点,实现以A到B逆时针圆弧插补。
    微信图片_20190106162258.png
          其中(xm,ym,zm)为起点坐标,(x0,y0,z0)为圆心坐标,angle为插补角度,h为插补精度,SN为插补方向(SN=0为顺时针,SN=1为逆时针),t为插补一次的时间间隔。
                                                                                                                    微信图片_20190106162458.png
             同样的,跟直线插补一样,根据流程图将空间圆弧插补写好即可。
           通过上述功能就可以实现走空间任意线段,其运动速度可以慢/中/快(改变延时即可),拍了个简单的视频如下(直线比较简单,就没拍了)
               还需要实现搬运或打孔,只需要末端执行器上装个吸盘或者电机孔就行,我在实验室找了一个小的吸盘装上,控制原理很简单
                                                                                                     微信图片_20190106163518.png 微信图片_20190106164356.png
                  因为吸盘是12V的,所以要用继电器,到时继电器与吸盘之间记得外接12V的电源,然后常开的就行,关于代码怎么写,具体看你继电器的使用了,我的是送高电平就行,拍了简单的搬运视频如下
           关于总的电路怎么接,很简单,就是arduino与3舵机相连,舵机接法也比较简单,如下图,照着接就行,继电器接法就看上面说的就好。

    微信图片_20190106164704.png   
           关于机械结构的话,底座和靠背都是用的抽屉做的,起固定作用,主动臂与被动臂某宝买的,报尺寸就行。静平台的话就需要自己设计一下,要考虑主动臂在旋转过程中与其干涉的问题,还要特别注意三个电机的安装位置,因为只有保证电机的安装位置在正三角形的三个顶点上,机器人运动时精度才能保证。同时还要注意静平台以机架之间的安装孔的设计。
                                                                                                             微信图片_20190106165740.png
              动平台就需要配合臂,实物图如下
                                                                                                                 微信图片_20190106170039.png

              程序源码我上传了百度云,需要的可以自行下载:
          提取码:zwvy


    大家的支持是我无限的动力
  • TA的每日心情
    擦汗
    2019-1-26 16:31
  • 签到天数: 446 天

    [LV.9]以坛为家II

    发表于 2019-1-7 08:26 | 显示全部楼层
    建议部分关键代码可以放到帖子里作为展示用,海报的话我这边感谢下,之前弄好后面忘记提交了。
    PY让世界更美好~
  • TA的每日心情
    慵懒
    2019-3-19 09:59
  • 签到天数: 196 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-7 08:59 | 显示全部楼层
    syl312 发表于 2019-1-7 08:26
    建议部分关键代码可以放到帖子里作为展示用,海报的话我这边感谢下,之前弄好后面忘记提交了。 ...

    好的,我编辑一下
    大家的支持是我无限的动力
  • TA的每日心情
    奋斗
    2019-3-17 00:50
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2019-3-14 05:03 | 显示全部楼层
    好东西,不知道楼主能否指点一二?
  • TA的每日心情
    慵懒
    2019-3-19 09:59
  • 签到天数: 196 天

    [LV.7]常住居民III

     楼主| 发表于 2019-3-14 10:32 | 显示全部楼层
    想学坏的小孩 发表于 2019-3-14 05:03
    好东西,不知道楼主能否指点一二?

    可以的,互相交流
    大家的支持是我无限的动力
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-3-15 23:43 | 显示全部楼层
    这才是大神啊,算法自己写。太强了。
    打赏
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    有没人做过把arduino跟生物结合起来做课题的
    有没人做过把arduino跟生
    我想做一些这方面的有没有人做过可以稍微指点一下
    跪求,nano读两个软串口传感器,写入sd卡,一个读不到数
    跪求,nano读两个软串口传
    dfrobot的nano板,两个软串口连接攀藤pm2.5传感器和GPS ublox m8n,SPI连sd卡模块。
    Arduino2560/MegaPi与ROS机器人操作系统的连接
    Arduino2560/MegaPi与ROS
    大家好,我因为需要更多时间维系琐碎平凡的工作和生活,一段时间没有上Arduino论坛。
    atmegu328p开发板怎么做流水灯啊
    atmegu328p开发板怎么做流
    我是白小 求指点
    BuddyBlock 1.0.0 测试版发布,一款面向Arduino的图形化开发工...
    BuddyBlock 1.0.0 测试版
    BuddyBlock是一款面向Arduino图形化编程开发的集成开发工具,开发者可以通过积木模块
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表