点彩是新印象派的绘画技巧,而这款绘画机械手臂应该算的上微型机器人界的达.芬奇或弗里达·卡罗了。为了模拟真人绘画,这款配有摄像头的机械手臂由Intel Galileo驱动,实现了4自由度绘画。该作品的作者也慷慨的分享了他的制作经验和程序代码!
第一步:材料
● Intel Galileo 2代开发板或1代开发板
● PWM伺服驱动器
● UCam-II相机模块(可以输出RAW格式和JPEG格式的图像,具有串行接口(TTL)的相机模块)
● 标准型伺服电机(4个)
● 5V 2.5A电源(为Galileo开发板供电)
● 5V 4A电源
● 单刀单掷开关 (2个)
● 瞬时按钮
● 10K欧姆的线性电位器(安装在面板上)
● 0.25英寸的D型旋钮
● 10mm的白色发光二极管(11个)
● M12螺栓(10个)
● M12垫圈(12个)
● M12螺母(14个)
● 伺服电机用的M5螺丝(8个)
● 组装用的M4螺丝(4个)
● 固定电子元件的M3螺丝(8个)
● 固定电子元件的M2螺丝(8个)
● 小画笔
● 小杯子
● 24 x 36 x 1/4(英寸)的三合板(2个)
● 白色喷漆(2个)
● 热缩管
● 电线
● 标签打印机
第二步:点彩机械手臂的设计思路
这个点彩机械手臂虽然尺寸不大,但涉及到了各种理论,所以制作过程还是比较复杂的。所以我们用倒推法将我们的工作分解,理顺我们的目标和工作内容。
首先我们确定项目的目标:
制作绘画机器人。
有个目标后我们需要明确2个问题:什么样的机器人?什么样的油画?
制作可以画点彩画的机械手臂
什么样的机械手臂?如何在画布上实现点彩?…
制作4自由度机械臂,它可以实现拍照功能,然后根据照片的图像在画布上绘画
这个过程可以一直持续下去,直到分解到最基本的设计,分解不下去为止。
下面就是我的点彩机械臂的设计约束和目标(排名部分先后):
● 适合放在桌子上
● 要有4自由度
● 不用胶水组装我的作品
● 可以用普通画布
● 画布方便更换
● 具有照相功能
● 绘画作品要和拍照图像一致
● 可以使用普通画笔
● 画笔可以拆卸
● 使用1种绘画颜料
● 可以智能获取调色板的颜料
● 在水杯中自动清洗画笔
● 微控制器驱动
● 用最少的电源
● 用最少的电子元件
● 用最实惠的电机
● 最简洁的交互界面
● 所有电子元件必须容易买到
虽然已经有前人制作过画画机器人,甚至有水彩机器人套件出售,但是这些机器人太机械化,所以我想用机械手臂实现更人文的绘画。
第三部:设计机械手臂
根据上面定的目标和约束,我决定自己设计和制作机械手臂,如果您的数学很棒,在这方便会简单不少。为了实现用最少的零件达到在画布上点彩的目的,我采用了4自由度设计,在设计过程种我使用了Autodesk的Fusion 360,这款软件不仅免费而且非常好用。
当然在设计过程中,我们需要知道伺服电机的真实尺寸,以便我们做3D模型。伺服电机端盖和支柱是用3D打印机打印的(如果您没有3D打印机可以用其他方法替代)。当然为了方便后面写代码,我们需要将机械手臂的中心和伺服电机基座的中心放到一条线上。
所有组装部件都是独立的,这样方便组装和电子元件的安装,画布框架可以安装9 x 12 x 1/4英寸的画布,用激光切割好6mm的三合板组装部件后等待组装。
第四步:设计底座
底座的设计相当简点,遵守牢固、实用、美观的原则即可。伺服电机的基座用4个M12的螺丝固定。调色板和水杯支架的螺丝孔尺寸最好一致,方便调换位置,用4个M4螺丝固定。同时,我制作了7个隔板,这样上下两层面板之间就会足够的空间安装伺服电机,同时可以调整手臂的底座使之更靠近画布的底座。上层面板需要留有2个跑线孔。最后用6个M12螺丝将上下两层面板固定好。
第五步:设计画架
画架除了自身的画架功能外要兼备其他2个用处:封装电子元件、提供用户界面。Galileo开发板和PWM驱动器固定在画架的侧后方,分别用M3和M2螺丝固定。侧前板作为用户界面螺母固定白光二极管、按钮、旋钮、电源开关和相机模块(用4个M2螺丝固定)。电源开关最好倒置安装,这样方便开启同时防止意外关闭,因为突然断电会对机械手臂造成伤害。画架后面板是一个小门,上面有一层顶板。
第六步:组装机械臂
上面的图片已经很详细,在此就不在赘述。伺服电机用M3螺丝固定在支柱上,笔刷用3个螺丝固定,3个螺丝互为120度角。
第七步:组装电子零部件
上面有详细的电路图,这要比实物照片更清楚方便。因为Galileo开发板是整套系统的核心,需要处理大量数据,进行精确运算,任何伺服电机的电气噪音都会影响开发板的运行,所以整个系统有2个供电系统:一个是逻辑运算,另一个是伺服电机。相机模块和接有1K欧姆限流电阻的二极管功率是相当低的,所以2.5V电源可以为Galileo提供正常电压。5V 4A的电源对于对这些伺服电机也是绰绰有余的。
在电路连接中,我使用的是公母头连接,与面包板相比,连接会比较清楚。
电位器的作用是校正伺服电机的位置。用户界面的面板一定要结实,毕竟我们会经常用力按瞬时按钮。
第八步:软件设计概况
上面的图片已经展示了用户与点彩机械手臂的交互过程。虽然内容简单了点,但是这是已经涵盖了点彩机械手臂的核心功能。为了实现我们的目标,我们需要分三步走:控制伺服电机的运动、预处理目标点(需要笔记本进行预处理)和机械手臂拍照绘画。再此我强烈建议您使用我的代码,到文章最下面可以下载。
第九步:二维正向运动学
为了实现我们绘画的目标,我们需要控制机械手臂的运动方向,当然如果您动逆向运动学,后面的工作就会简单很多,但是逆向运动学实在是太难了,所以我们选择了比较简单的正向运动学,只需要我们懂一些三角函数就可以解决当前的问题。我们先解决二维空间的运动学,找到二维空间的D点,图上已经表的很清楚,有兴趣的同学可以研究一下。
第十步:3维运动学
2维运动学搞懂后,我们升级到3维运动学,毕竟伺服电机是在3维空间里运动。我们把机械手臂延伸的方向作为X轴,这样我们就得到了三维空间的D点。以此类推,我们可以得到很多我们想要的点,然后使用它们…
第十一步:模拟
为了实现画笔在画布上作画,现在我们需要运行已加工好的数据,计算出机械手臂的形状。所以模拟器需要做2件事情:计算出画布目标点的坐标和伺服电机带动机械手臂到达目标点需要旋转的角度。
定义画布大小
我们的相机设定的像素为80 x 60,我们在画布上定义一块目标区域,像素为60 x 60,像素实际大小为3mm,我们就会得到3600个画笔的目标点。我们只需要计算出每条坐标轴的60个坐标即可定位所有目标点。至于原理,简单的讲就是同一行目标点X、Y的值一样,但Z值不一样;同一列目标点,Z值一样,但X、Y值不同。如果先了解更多细节,可以参考到文章最下面的相关代码文件。
伺服电机学习如何旋转
当我们定义好了画布目标点的坐标数组后,机械手臂如何到达目标点呢?我们需要确定电机的旋转角度,这也是我们使用正向运动学遗留的问题。我们在电脑上运行角分辨率的所有配置,如果画笔笔尖与画布目标点匹配,我们就储存这个电机旋转角度,就这样计算直到匹配3600个目标点。但是这个工作量是相当大的,所以我以画布中心为圆点缩小原来的像素为24 X 24,这样我们就有576个目标点。电脑运行了1个半小时后,终于算出来所有的电机旋转角度,用.txt格式导出所有数据,以便后面使用。
第十二步:图像加工
在这个项目中我们不需要彩色照片,所有讲相机设置为80 x 60像素的灰度图像,这种只包含4800个字节的照片比较好处理。
下面是拍照后照片处理的相关流程:
载入图像数据,转化为简单的数组
运行这些数组
如果这个值大于设定的阈值,这个数组则为最大值,反之变为最小值 0。(直到对比完所有数组)
将图片裁剪为60 X 60像素
载入新的图片,转化为二维数组
取相邻4个像素的数组的平均值
如果平均值是最大灰度值的一半以上,则变成黑色,然后裁剪为30 X 30像素的图片
将图片像素裁剪成24 X 24像素的数组
现在图片可以使用了,将其放进运动规划器。
第十三步:运动规划器软件
我提前预存了运动队列,运动规划器会进行相应的匹配,然后执行绘画,当然为了更流畅,我也使用了插值运算,这些都可以在下面的文件中找到。
第十四步:机械手臂执行绘画
这个操作相当简单了。闭合2个供电系统的开关,等待“系统就绪(System Ready)”指示灯亮起,然后请按“开始(Action)”按钮。相机旁的LED灯会闪烁提醒你正在拍照,当照片拍好后,LED灯停止闪烁。这时“处理中(Processing)”的LED灯会开启,系统正在处理照片和载入动作路径。当“绘画”(Painting)的LED灯亮起时,机械手臂就来是绘画了。当作品完成后,机械手臂会将画笔放入水杯中,等待下一次绘画。
结语:
这个项目相当的赞,在制作过程中设计到很多理论,我也get到了很多新的知识,希望小伙伴们能从我的这个项目中获得一些灵感,并付诸行动,完成你的绘画机械手臂后和我分享。谢谢大家!