本帖最后由 明娃子 于 2019-6-29 00:08 编辑
这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及发帖分享。所以先立这个帖子吧,这两天先打点零件出个组装教程。
打印件已全部放在
thingiverse上 :
2018.9.29插楼更新
新款笔夹测试,stl已更新,新增4mm*40mm光轴2根,8*4*10铜套2个。
部分定制件不好购买,这里提供部分零件
https://item.taobao.com/item.htm ... ibT&id=596224282726
2018.11.27插楼更新
Thingiverse上第6版固件已更新,新增自动调试功能,解决画线不直问题。1.确保大小臂长度为200mm
2.大臂与电机座侧边平行
3.小臂与大臂呈45度角
4.发送M700自动开始自动标定,数秒后自动标定完成
2019.5.31插楼更新
更新最新版上位机【机械臂大师】,后面附有连接,更多功能大家先自行摸索
插楼结束
大家可以先打,有什么建议可以提出,图纸不断更新中。
暂时取名叫做drawbot吧,也想不出啥名字了。
arduino中文论坛和贴吧同步直播,欢迎关注。
简介:
桌面级scara机械臂,运动机构为两个42步进电机和一个9g舵机,控制板为mega 2560 和ramps 1.4,其他部件主要为3D打印件,工作范围为A4纸,使用国标G代码,目前可以实现写字画画功能。
交流q群 791947714
18.9.13 更新
---------------------机械安装教程-------------------
drawbot 所用零件除打印件和铝管外均为标件,tb上都能买到。 打印件tb上也有代打的,当然也可以找我打。
bom 表已整理完成,见下表。螺钉螺母数量可能不准确,建议多备几颗。舵机线长度需要80cm,长度不够的,需要自己接延长线。M8*55六角螺钉可用Φ8*40*M8 塞打螺钉代替,提高两个驱动轮同轴度。
铝管长度为178mm 200mm(老款笔夹) 178mm 197mm(新款笔夹),bom中长度有误,请注意。
步进电机和限位开关线长度为40cm。
18.9.17更新
零件差不多齐了,忽略图中的钳子,开搞了
舵机线不够长的,先将线加长到80cm,在较长的一根铝管一端装上舵机支架,将舵机线穿入管内
装上舵机和笔夹,之前bom表漏掉了一个2mm*12mm光轴,可用钢丝代替
安装连接件,M4*35螺钉需要两个M4垫片,图中未画出
安装皮带轮,提前套入同步带,不要漏了
限位开关为常闭型,如果买的常开型,自己改下线,接触片朝下。
有个螺孔被挡住了,3颗勉强固定,网上底座图纸孔位已更新
两个M4螺钉反装如图,正装转动螺母会松
插上电机线,裹上束线管,机械部分就算完成了
附上全家福
简单测试下重复精度,晚点再更新电气部分
视频如下
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
18.9.22更新
需要使用的软件主要如下
Xloader固件烧录软件
https://pan.baidu.com/s/1QR_wpkzYAFThaMymp68Hgg
机械臂大师上位机
链接:https://pan.baidu.com/s/1mu_-qLm5Fbt2HIe0oHoI1A 提取码:q3v3
G代码生成软件1 inkscape及相关插件
https://pan.baidu.com/s/1dC-QIEEeyjRYqdUHBHABpw插件由aelab提供,大家觉得好用,可以购买他们的正版上位机,付费的自然好用的多,可以手机录入字体,支持填表功能等,传送门http://www.aelab.net
G代码生成软件2 奎享雕刻绿色版
链接:https://pan.baidu.com/s/1LBNSbfco1w0OKND0DE3ZPQ 提取码:s2fu
G代码生成软件3 laserGRBL,支持中文
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代码,就可以开始愉快的写字了。写字测试,由于抬笔结构为旋转式抬笔,速度太快写字会飘,后续考虑改结构,做成直上直下结构。
18.9.23 更新
新版笔架以设计好,晚点试试效果,没问题就就上传thingiverse
新版笔夹已做好,新笔夹对打印机要求较高,光轴铜套不同心的话,滑动不顺畅,准备再改善下,降低打印难度
2018-10-16更新
---------------------代码简介-------------------控制板作为下位机,他的作用是解释上位机发过来的G代码,G代码包含运动坐标值和一些控制指令,对于运动控制,下位机就是将G代码转换成步进电机的脉冲控制步进电机。这里比较关键的就是坐标正解反解函数,已知末端坐标值求出机械臂的角度,或已知机械臂的角度求出末端坐标值。
大多数工业scara机械臂副臂控制电机位于主臂和副臂上,电机控制的大臂小臂之间的角度,属于“相对”角度scara。如下图
和drawbot一样的平行四边形结构,副臂电机控制的副臂相对于世界坐标系的角度,即“绝对角度”scara
通过同步带传送,将电机移动到固定底座上,也为“绝对角度”scara
两种结构运动算法稍微有点区别。marlin 自带的scara算法属于“相对角度”scara,这里容易被忽略。
drawbot正解算法如下:
[mw_shl_code=bash,true]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值
}[/mw_shl_code]
SCARA_RAD2DEG弧度角度转换常数,即180/π。三角函数计算是弧度计算,所以所有角度需先转换成弧度。通过三角函数关系算出x_sin x_cos y_sin y_cos.
则图中黄色向量表示世界坐标系下的末端位置,(-x_cos - y_cos,x_sin + y_sin ) 。再减去用户坐标偏移SCARA_offset,得到用户坐标系下的末端坐标值。
drawbot反解算法如下:
[mw_shl_code=bash,true]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; //小臂旋转角度转换为弧度
}
}[/mw_shl_code]
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
2018.12.18更新
运动平滑度参数设置补充说明,运动平滑度就是工业机器人中的CNT值,因为速度不可以瞬间改变,折线运动中,如果准确运动到折点,折点速度为0,速度为很慢,所有用一条弧线代替折线,两条线的加速度梯形相交,设定值即为相交点的速度,设置越大,速度越快,路径被倒成的圆角也就越大。
|