KIKI 发表于 2021-8-18 15:17:29

drawbot 桌面级scara机械臂



在thingiverse上闲逛的时候,翻到了一个好几年前的机械臂项目,一下子就被这骚粉色吸引了。桌面级scara机械臂,运动机构为两个42步进电机和一个9g舵机,控制板为mega 2560 和ramps 1.4,其他部件主要为3D打印件,工作范围为A4纸,使用国标G代码,目前可以实现写字画画功能。



作者自己为了方便在淘宝开了店:[点击前往](https://ogc-bike.taobao.com/)

drawbot 所用零件除打印件和铝管外均为标件,tb上都能买到。打印件tb上也有代打的,当然也可以找我打。

bom 表已整理完成,见下表。螺钉螺母数量可能不准确,建议多备几颗。舵机线长度需要80cm,长度不够的,需要自己接延长线。M8x55六角螺钉可用Φ8x40xM8 塞打螺钉代替,提高两个驱动轮同轴度。

步进电机和限位开关线长度为40cm。

**铝管长度为178mm200mm(老款笔夹)178mm 197mm(新款笔夹),bom中长度有误,请注意。**

---

#### 材料清单

|   | Part name |unit   |
| --- | --- | --- |
| 内六角螺钉 | M8*55    |1   |
| 内六角螺钉 | M3*25    |2   |
| 内六角螺钉 | M3*12    |3   |
| 内六角螺钉 | M3*20    |8   |
| 内六角螺钉 | M3*50    |4   |
| 内六角螺钉 | M4*12    |1   |
| 内六角螺钉 | M4*30    |1   |
| 内六角螺钉 | M4*35    |1   |
| 内六角螺钉 | M3*16    |1   |
| 内六角螺钉 | M3*10    |1   |
| 内六角螺钉 | M2*10    |4   |
| 内六角螺钉 | M3*12 手拧螺丝    |1   |
| 螺母 | M3 | 12 |
| 螺母 | M8 | 1 |
| 螺母 | M4 | 3 |
| 垫片 | M4 | 4 |
| 垫片 | M8 | 2 |
| 带轮 | 608zzz | 2 |
| 带轮 | 624zzz | 5 |
| 铝管 | 15mm 13mm 153mm | 1 |
| 铝管 | 15mm 13mm 181mm | 1 |
| 电气 | mega1560 | 1 |
| 电气 | ramps1.4 | 1 |
| 电气 | A4988 | 2 |
| 电气 | Limit switch限位开关 | 2 |
| 电气 | 42 step motor步进电机 | 2 |
| 电气 | 9g servo 舵机 | 1 |

---

#### 软件
需要使用的软件主要如下

- (https://pan.baidu.com/s/1QR_wpkzYAFThaMymp68Hgg)
- (https://pan.baidu.com/s/11f1Jh_NZMw2nwWY8M-biNQ)
- (https://pan.baidu.com/s/1s7AvFwITcM-CafWzogk0Og)


**下面是作者更新过的清单**

- (https://pan.baidu.com/s/1QR_wpkzYAFThaMymp68Hgg)
- [机械臂大师上位机](https://pan.baidu.com/s/1mu_-qLm5Fbt2HIe0oHoI1A)提取码:q3v3
- (https://pan.baidu.com/s/1dC-QIEEeyjRYqdUHBHABpw)插件由aelab提供,大家觉得好用,可以购买他们的正版上位机,付费的自然好用的多,可以手机录入字体,支持填表功能等,[传送门](http://www.aelab.net)
- (https://pan.baidu.com/s/1LBNSbfco1w0OKND0DE3ZPQ)提取码:s2fu
- (https://pan.baidu.com/s/1yDEdDrPJ07wWkfhLtU5nOg)
- (https://pan.baidu.com/s/1i-7IrOrsUecbjXIyIl44ww)
- 部分用户反应inkscape运行报错,可以换成(https://pan.baidu.com/s/1yDEdDrPJ07wWkfhLtU5nOg)


将mega2560连接电脑,选择对应的端口,用xloader烧录hex固件。


打开机械臂大师,选择对应端口连接


出现如下返回值则连接成功。



**软件界面介绍如下**

常用的控制指令如下:
- G1 X10 Y10   直线移动
- G28 回home点,每次开机后需要先回home点以确定机械臂位置
- G90 切换到绝对坐标系
- G91切换到相对坐标系
- G94切换到直角坐标系
- G95切换到到角度坐标系

- 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 将当面位置定义为坐标原点
- M700 自动标定

**所有参数修改后需用M500保存,否则重启后数据会丢失**


首次连接后需要先发送M502恢复出厂设置,然后将机器摆成图示角度,点击自动标定按钮,数秒后标定完成,然后发送M500指令保存设置
1.大臂与电机座侧边平行
2.小臂与大臂呈45度角


发送G28回到HOME点,导入G代码生成软件导出的G代码,就可以开始愉快的写字了。写字测试,由于抬笔结构为旋转式抬笔,速度太快写字会飘,后续考虑改结构,做成直上直下结构。

---

**模型下载地址**:(https://www.thingiverse.com/thing:3096135)

---

#### 制作过程

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

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


穿线






安装连接件




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



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



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



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



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


全家福



---

坐标系定义如下,X轴平行于电机座侧边,原点相对于旋转中心偏移如下



---

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

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

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

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

```
void calculate_SCARA_forward_Transform(float f_scara)
{
    float x_sin, x_cos, y_sin, y_cos;
    x_sin = sin(f_scara/SCARA_RAD2DEG) * Linkage_1;
    x_cos = cos(f_scara/SCARA_RAD2DEG) * Linkage_1;
    y_sin = sin(f_scara/SCARA_RAD2DEG) * Linkage_2;//当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式
    y_cos = cos(f_scara/SCARA_RAD2DEG) * Linkage_2;//当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式
    delta = -x_cos - y_cos - SCARA_offset;//求得用户坐标系下X值
    delta = x_sin + y_sin - SCARA_offset;//求得用户坐标系下Y值
}
```

SCARA_RAD2DEG弧度角度转换常数,即180/π。三角函数计算是弧度计算,所以所有角度需先转换成弧度。通过三角函数关系算出x_sin x_cos y_sin y_cos.

则图中黄色向量表示世界坐标系下的末端位置,(-x_cos - y_cos,x_sin + y_sin ) 。再减去用户坐标偏移SCARA_offset,得到用户坐标系下的末端坐标值。

反解算法如下




```
void calculate_delta(float cartesian){


float SCARA_pos;
static float SCARA_C2, SCARA_S2, SCARA_K1, SCARA_K2, SCARA_theta, SCARA_psi;

SCARA_pos = -cartesian - SCARA_offset;//求世界坐标系下X值并取反
SCARA_pos = cartesian + SCARA_offset;//求世界坐标系下Y值

SCARA_C2 =   ( sq(SCARA_pos) + sq(SCARA_pos) - (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,SCARA_pos) ) ;//大臂旋转角度,即主臂与-X轴夹角

SCARA_psi   =   atan2(SCARA_S2,SCARA_C2) + SCARA_theta;//小臂旋转角度,当Y电机控制小臂相对于世界坐标系旋转角度时使用此公式

delta = SCARA_theta * SCARA_RAD2DEG; //大臂旋转角度转换为弧度
delta = SCARA_psi * SCARA_RAD2DEG;   //小臂旋转角度转换为弧度

}
}
```

cartesian为用户坐标系下坐标值,加上SCARA_offset得到世界坐标系下坐标值。

其中SCARA_pos向量方向向右,与原坐标值X方向相反,故取反。

`#define L1_2 sq(Linkage_1)`
`#define L2_2 sq(Linkage_2)`

L1_2   L2_2是预先定义好的臂长的平方

则直线AB距离的平方为 sq(SCARA_pos) + sq(SCARA_pos

三角形ABC中,现已知三边长度,由余弦定理推出 cosC=(a^2+b^2-c^2)/2ab

α的补角为

arccos[((float)L1_2 + (float)L2_2- sq(SCARA_pos) - sq(SCARA_pos) ) /(2*Linkage_1*Linkage_2)]//这里是伪代码,C语言没有arccos函数

SCARA_C2为补角的cos值得取反

SCARA_C2 =   ( sq(SCARA_pos) + sq(SCARA_pos) - (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,SCARA_pos) )

SCARA_psi = α+SCARA_theta = atan2(SCARA_S2,SCARA_C2) + SCARA_theta

乘上弧度角度转换因子得出大小臂角度值

delta = SCARA_theta * SCARA_RAD2DEG
delta = SCARA_psi * SCARA_RAD2DEG

---

更新:
运动平滑度参数设置补充说明,运动平滑度就是工业机器人中的CNT值,因为速度不可以瞬间改变,折线运动中,如果准确运动到折点,折点速度为0,速度为很慢,所有用一条弧线代替折线,两条线的加速度梯形相交,设定值即为相交点的速度,设置越大,速度越快,路径被倒成的圆角也就越大。


> 本文为发布者再原作者的基础上做了重新排版后发布的,原作者为贴吧[高唱我爱你](https://tieba.baidu.com/home/main?un=%E9%AB%98%E5%94%B1%E6%88%91%E7%88%B1%E4%BD%A0),如有维权请联系。

白凡 发表于 2021-9-9 12:30:32

{:6_209:}膜拜巨佬!!!666666!

SHERRY 发表于 2021-10-30 22:59:54

Hex固件在哪儿?不见固件啊,求一个研究研究 425095@qq.com

DFSyeEXpQKu 发表于 2022-9-24 23:13:58

膜拜大佬!!!感谢分享

捣腾一个机器人 发表于 2022-11-7 11:41:08

厉害厉害
页: [1]
查看完整版本: drawbot 桌面级scara机械臂