查看: 5392|回复: 101

[教程] 原创 drawbot平面关节机械臂 教程直播贴

  [复制链接]
  • TA的每日心情
    开心
    2018-9-21 15:12
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2018-9-12 15:57 | 显示全部楼层 |阅读模式
    本帖最后由 明娃子 于 2018-10-22 12:40 编辑

    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太懒,一直没来得及发帖分享。所以先立这个帖子吧,这两天先打点零件出个组装教程。
    打印件已全部放在
    thingiverse上 :
    游客,如果您要查看本帖隐藏内容请回复

    2018.9.29更新

    新款笔夹测试,stl已更新,新增4mm*10mm光轴2根,8*4*10铜套2个

    固件已更新,获取固件的方法为,晒出装好的整机图,留下邮箱。固件直接发给你。
    大家可以先打,有什么建议可以提出,图纸不断更新中。
    暂时取名叫做drawbot吧,也想不出啥名字了。
    arduino中文论坛和贴吧同步直播,欢迎关注。
    简介:
    桌面级scara机械臂,运动机构为两个42步进电机和一个9g舵机,控制板为mega 2560 和ramps 1.4,其他部件主要为3D打印件,工作范围为A4纸,使用国标G代码,目前可以实现写字画画功能。
    交流q群 791947714
    mmexport1531729597713.jpg

    18.9.13 更新
    ---------------------机械安装教程-------------------

    drawbot 所用零件除打印件和铝管外均为标件,tb上都能买到。  打印件tb上也有代打的,当然也可以找我打。
    bom 表已整理完成,见下表。螺钉螺母数量可能不准确,建议多备几颗。舵机线长度需要80cm,长度不够的,需要自己接延长线。M8*55六角螺钉可用Φ8*40*M8 塞打螺钉代替,提高两个驱动轮同轴度。
    铝管长度为178mm  200mm(老款笔夹)  178mm 197mm(新款笔夹),bom中长度有误,请注意。
    步进电机和限位开关线长度为40cm。 QQ截图20180919115015.jpg

    18.9.17更新

    零件差不多齐了,忽略图中的签字,开搞了
    092057q6al42sv1ahqhfqf.png
    092152ojsvsvb9blvhh6s7.jpg

    舵机线不够长的,先将线加长到80cm,在较长的一根铝管一端装上舵机支架,将舵机线穿入管内
    092244vu4silofediiidzu.png

    装上舵机和笔夹,之前bom表漏掉了一个2mm*12mm光轴,可用钢丝代替 092258a25ky2sst92vn9yg.png
    092300vhjh2cpjq5qp6cet.png

    安装连接件,M4*35螺钉需要两个M4垫片,图中未画出
    092452o8881dgf9z8ex8j1.png
    092444h8ffqzqqanxklzi8.png

    安装皮带轮,提前套入同步带,不要漏了
    092536o3of6qjozrror6pr.png

    限位开关为常闭型,如果买的常开型,自己改下线,接触片朝下。
    092545sl77j7fsvxz50d7x.png

    有个螺孔被挡住了,3颗勉强固定,网上底座图纸孔位已更新
    092548vfayz4sjzwyw1w6b.png

    两个M4螺钉反装如图,正装转动螺母会松
    092552suhyjguwuvh7y7yi.png

    插上电机线,裹上束线管,机械部分就算完成了
    092908dsapniz28czvfrzr.png

    附上全家福
    092920a8oorjo600q02rz4.jpg
    简单测试下重复精度,晚点再更新电气部分
    视频如下
    https://tieba.baidu.com/p/5881812268?pid=122005283943&cid=0&red_tag=2023302554#122005283943
    https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo-transcode/33_3724987122587fdcc04fb928eca2affe_1.mp4

    2018.9.19更新
    ---------------------调试教程-------------------
    4988驱动模块安装方向如图所示,驱动模块下方6个细分设置引脚全部短接。驱动模块电流调节方法见
    http://www.diankeshequ.com/forum.php?mod=viewthread&tid=2003
    1b556c899e510fb3e37e988cd433c895d0430cdb.jpg
    2c50b086c9177f3ea59c13167dcf3bc79e3d569e.jpg


    固件基于marlin,关于marlin此贴不做过多介绍,开了新帖专门介绍,后续更新,
    https://www.arduino.cn/thread-81771-1-1.html

    18.9.22更新
    需要使用的软件主要如下

    Xloader固件烧录软件
    https://pan.baidu.com/s/1QR_wpkzYAFThaMymp68Hgg
    proterface 3D打印上位机
    https://pan.baidu.com/s/11f1Jh_NZMw2nwWY8M-biNQ
    G代码生成软件inkscape及相关插件
    https://pan.baidu.com/s/1dC-QIEEeyjRYqdUHBHABpw
    插件由aelab提供,大家觉得好用,可以购买他们的正版上位机,付费的自然好用的多,可以手机录入字体,支持填表功能等,传送门http://www.aelab.net
    部分用户反应inkscape运行报错,请使用laserGRBL,支持中文
    https://pan.baidu.com/s/1yDEdDrPJ07wWkfhLtU5nOg
    将mega2560连接电脑,选择对应的端口,用xloader烧录hex固件。
    PU~Y)A7XV(GWS38U235MS@X.png

    打开proterface,选择对应端口连接
    QQ截图20180922004220.jpg
    当右侧出现如下返回值则连接成功。
    QQ截图20180922004237.jpg

    固件已经做到极度简化,基本不需调试就能直接使用。
    proterface右下角为指令发送窗口。
    QQ截图20180922005305.jpg

    proterface底部为自定义按钮窗口点击+号,即可自定义指令

    QQ截图20180922005549.jpg

    需要用到的控制指令如下。
    G1 X10 Y10   直线移动
    G28 回home点,每次开机后需要先回home点以确定机械臂位置
    G90 切换到绝对坐标系
    G91切换到相对坐标系
    G94切换到直角坐标系
    G95切换到到角度坐标系
    直角坐标系
    新建位图图像.jpg
    角度坐标系定义如下,红线平行于电机座侧边
    QQ截图20180922011318.jpg

    M3 舵机落笔  转到默认落笔角度
    M3 S15 舵机转到15度
    M4 L10 T40  设置默认落笔角度为10 默认抬笔角度为40
    M5舵机抬笔  转到默认抬笔角度M92 X48.8 Y48.8 设置电机分辨率,如果电机步进角是1.8°,16细分直接用出厂设置就行
    M203 X2000 Y2000  设置电机最大运动速度
    M201 X1000 Y1000 设置电机运动加速度
    M205 X0.8 电机运动平滑度 (下面介绍)
    M503 查看机械臂设置参数
    M501 载入用户参数(保存到EEPROM的参数)
    M502 恢复出厂设置
    M500 保存用户参数(保存到EEPROM)
    M370 将当面位置定义为坐标原点
    所有参数修改后需用M500保存,否则重启后数据会丢失


    首次连接后需要先发送M502恢复出厂设置,再发送M500保存到用户设置。
    发送G28回到HOME点,就可以开始愉快的写字了。写字测试,由于抬笔结构为旋转式抬笔,速度太快写字会飘,后续考虑改结构,做成直上直下结构。

    18.9.23 更新

    新版笔架以设计好,晚点试试效果,没问题就就上传thingiverse
    QQ截图20180923223813.jpg

    新版笔夹已做好,新笔夹对打印机要求较高,光轴铜套不同心的话,滑动不顺畅,准备再改善下,降低打印难度

    QQ截图20180929133918.jpg

    2018-10-16更新
    ---------------------代码简介-------------------控制板作为下位机,他的作用是解释上位机发过来的G代码,G代码包含运动坐标值和一些控制指令,对于运动控制,下位机就是将G代码转换成步进电机的脉冲控制步进电机。这里比较关键的就是坐标正解反解函数,已知末端坐标值求出机械臂的角度,或已知机械臂的角度求出末端坐标值。
    大多数工业scara机械臂副臂控制电机位于主臂和副臂上,电机控制的大臂小臂之间的角度,属于“相对”角度scara。如下图
    timg.jpg

    和drawbot一样的平行四边形结构,副臂电机控制的副臂相对于世界坐标系的角度,即“绝对角度”scara
    113334_G07F_3503462.jpg

    通过同步带传送,将电机移动到固定底座上,也为“绝对角度”scara
    5cb83fd0d5d2e34a79f212f6c299b857_preview_featured.jpg

    两种结构运动算法稍微有点区别。marlin 自带的scara算法属于“相对角度”scara,这里容易被忽略。

    drawbot正解算法如下:
    [Bash shell] 纯文本查看 复制代码
    void calculate_SCARA_forward_Transform(float f_scara[3])
    {
        float x_sin, x_cos, y_sin, y_cos;
        x_sin = sin(f_scara[X_AXIS]/SCARA_RAD2DEG) * Linkage_1;
        x_cos = cos(f_scara[X_AXIS]/SCARA_RAD2DEG) * Linkage_1;
        y_sin = sin(f_scara[Y_AXIS]/SCARA_RAD2DEG) * Linkage_2;//当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式
        y_cos = cos(f_scara[Y_AXIS]/SCARA_RAD2DEG) * Linkage_2;//当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式
        delta[X_AXIS] = -x_cos - y_cos - SCARA_offset[X_AXIS];  //求得用户坐标系下X值
        delta[Y_AXIS] = x_sin + y_sin - SCARA_offset[Y_AXIS];  //求得用户坐标系下Y值
    }


    QQ截图20181016103402.jpg

    SCARA_RAD2DEG弧度角度转换常数,即180/π。三角函数计算是弧度计算,所以所有角度需先转换成弧度。通过三角函数关系算出x_sin  x_cos  y_sin y_cos.
    则图中黄色向量表示世界坐标系下的末端位置,(-x_cos - y_cos,x_sin + y_sin ) 。再减去用户坐标偏移SCARA_offset,得到用户坐标系下的末端坐标值。

    drawbot反解算法如下:
    [Bash shell] 纯文本查看 复制代码
    void calculate_delta(float cartesian[3]){
    
    
     float SCARA_pos[2];
      static float SCARA_C2, SCARA_S2, SCARA_K1, SCARA_K2, SCARA_theta, SCARA_psi; 
    
      SCARA_pos[X_AXIS] = -cartesian[X_AXIS] - SCARA_offset[X_AXIS];  //求世界坐标系下X值并取反
      SCARA_pos[Y_AXIS] = cartesian[Y_AXIS] + SCARA_offset[Y_AXIS];  //求世界坐标系下Y值
    
      SCARA_C2 =   ( sq(SCARA_pos[X_AXIS]) + sq(SCARA_pos[Y_AXIS]) - (float)L1_2 - (float)L2_2 ) /(2*Linkage_1*Linkage_2);
    
      SCARA_S2 = sqrt( 1 - sq(SCARA_C2) );
      SCARA_K1 = Linkage_1 + Linkage_2 * SCARA_C2;
      SCARA_K2 = Linkage_2 * SCARA_S2;
    
      SCARA_theta = ( atan2(SCARA_K1, SCARA_K2)-atan2(SCARA_pos[X_AXIS],SCARA_pos[Y_AXIS]) ) ;//大臂旋转角度,即主臂与-X轴夹角
    
      SCARA_psi   =   atan2(SCARA_S2,SCARA_C2) + SCARA_theta;//小臂旋转角度,当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式
    
      delta[X_AXIS] = SCARA_theta * SCARA_RAD2DEG; //大臂旋转角度转换为弧度
      delta[Y_AXIS] = SCARA_psi * SCARA_RAD2DEG;   //小臂旋转角度转换为弧度
    
    }
    }

    新建 Microsoft PowerPoint 演示文稿.png
    cartesian[X_AXIS][Y_AXIS]为用户坐标系下坐标值,加上SCARA_offset得到世界坐标系下坐标值。
    其中SCARA_pos[X_AXIS]向量方向向右,与原坐标值X方向相反,故取反。
    #define L1_2 sq(Linkage_1)
    #define L2_2 sq(Linkage_2)
    L1_2   L2_2是预先定义好的臂长的平方
    则直线AB距离的平方为 sq(SCARA_pos[X_AXIS]) + sq(SCARA_pos[Y_AXIS]
    三角形ABC中,现已知三边长度,由余弦定理推出 cosC=(a^2+b^2-c^2)/2ab
    α的补角为
    arccos  [  (  (float)L1_2 + (float)L2_2- sq(SCARA_pos[X_AXIS]) - sq(SCARA_pos[Y_AXIS]) ) /(2*Linkage_1*Linkage_2)  ]//这里是伪代码,C语言没有arccos函数
    SCARA_C2为补角的cos值得取反
    SCARA_C2 =   ( sq(SCARA_pos[X_AXIS]) + sq(SCARA_pos[Y_AXIS]) - (float)L1_2 - (float)L2_2 ) /(2*Linkage_1*Linkage_2);

    将α  cos值转换为sin值
    SCARA_S2 = sqrt( 1 - sq(SCARA_C2) );

    根据三角函数关系求出  SCARA_K1   SCARA_K2
    由图可知
    SCARA_theta +δ+β =π/2
    δ+γ =π/2

    SCARA_theta =γ-β = ( atan2(SCARA_K1, SCARA_K2)-atan2(SCARA_pos[X_AXIS],SCARA_pos[Y_AXIS]) )
    SCARA_psi = α+SCARA_theta = atan2(SCARA_S2,SCARA_C2) + SCARA_theta

    乘上弧度角度转换因子得出大小臂角度值
    delta[X_AXIS] = SCARA_theta * SCARA_RAD2DEG
    delta[Y_AXIS] = SCARA_psi * SCARA_RAD2DEG



    PY让世界更美好~

    2人打赏

    该用户从未签到

    发表于 2018-10-2 12:42 | 显示全部楼层
    虽然装慢不过总算完成架子,可以要固件去了。。  54883661@qq.com
    IMG_20181002_123217.jpg
  • TA的每日心情
    无聊
    2018-10-20 17:11
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2018-10-6 12:16 | 显示全部楼层
    x223222981@foxmail.com

    谢谢大佬

    1

    1

    2

    2

    该用户从未签到

    发表于 2018-10-15 18:58 | 显示全部楼层
    感谢分享,好人一生平安
    shixiaohui.cc@foxmail.com
    xiezishou.jpg
  • TA的每日心情
    慵懒
    2018-8-31 10:36
  • 签到天数: 36 天

    [LV.5]常住居民I

    发表于 2018-9-12 16:03 | 显示全部楼层
    关注一下,能发打印件的图纸吗?
  • TA的每日心情
    开心
    2018-10-23 08:00
  • 签到天数: 189 天

    [LV.7]常住居民III

    发表于 2018-9-12 17:43 | 显示全部楼层
    不错哦!  居然是粉色。
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-9-21 15:12
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-9-12 23:02 | 显示全部楼层
    历史中的一粒尘埃 发表于 2018-9-12 16:03
    关注一下,能发打印件的图纸吗?

    上面有图纸连接
    PY让世界更美好~
  • TA的每日心情
    奋斗
    2018-9-19 20:47
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2018-9-13 20:28 | 显示全部楼层
    不错,好东西,好好学习下!
  • TA的每日心情
    无聊
    2018-10-13 13:00
  • 签到天数: 444 天

    [LV.9]以坛为家II

    发表于 2018-9-13 22:10 | 显示全部楼层
    可以开通下打赏功能哈
    https://www.arduino.cn/thread-31092-1-1.html
    PY让世界更美好~
  • TA的每日心情
    开心
    2018-9-21 15:12
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-9-16 00:13 | 显示全部楼层
    syl312 发表于 2018-9-13 22:10
    可以开通下打赏功能哈
    https://www.arduino.cn/thread-31092-1-1.html

    谢谢大佬
    PY让世界更美好~

    1人打赏

    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    求助如何让下面程序只播放一次。
    求助如何让下面程序只播放
    程序在图片里。
    体验OneNET,登录就送好礼
    体验OneNET,登录就送好礼
    OneNET--中国移动物联网开发平台,解决协议适配、海量连接、数据存储、设备管理等物
    基于arduino uno的delta并联机器人控制系统设计教程一
    基于arduino uno的delta并
    教程一先教大家如何写出delta并联机器人的各个位置坐标程序, 上个学期实现了一个
    LCD1602超声波测距实例
    LCD1602超声波测距实例
    昨天用DHT11做了个LCD1602的实例! 今天移植到超声波测距来了!刚开始学的小白!大神
    基于MWC开源飞控DIY关键总结分享:
    基于MWC开源飞控DIY关键总
    很早就已经很想写这么一个帖,但总是由于各种原因没能落实,但最后还是找了时
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表