极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7893|回复: 61

新项目 - 打乒乓球的机器人 【6-13更新】

  [复制链接]
发表于 2017-4-30 12:47:50 | 显示全部楼层 |阅读模式
本帖最后由 pz_cloud 于 2017-9-22 11:17 编辑

个人很喜欢打乒乓球,想当年高中每天中午挤出午休时间在学校挥洒汗水连觉都不睡了,但是上大学以后打球的时间就比较少了,一是由于学习工作时间有限,二是学校里球友越来越少,很少碰到水平相当又志趣相投的同学了。记得去年在网上看到一个kuka机械臂跟波尔对战的视频,虽然说这个视频是kuka推的广告,也有一定的摆拍嫌疑,但是说明机器人打乒乓球还是非常可行的。毕竟乒乓球不像围棋之类的比赛,打乒乓球并不需要很高的人工智能水平(心机机器人选手不算),而是对机电控制要求较高(高速度,高精度),这方面有工业机器人行业多年的积淀,应该说控制方面难度并不是很大的,难点主要在视觉算法。

kuka对战波尔的视频:





当然工业机械臂属于重型装备,价格也不是一般消费者能承受的起的(数十万以上),要想实现一套低成本的类似设备,我归纳了一下,大致需要如下几个模块:
1.高速双目视觉系统
2.5自由度机械臂(可用舵机,降低成本)
3.高速移动滑台(类似雕刻机的导轨,用于快速移动,因为舵机的响应速度不够所以需要这一项来补偿)
4.一套巧妙的算法


更详细一些来说,我们先要使用两个高速相机组成双目视觉系统,用来实时捕获乒乓球的位置和速度,并计算出预判的击球点位置和速度,然后控制机械臂和滑台准确击球。整个循环过程的周期将不会超过10ms,考虑乒乓球的运动速度可以达到7m/s左右,10ms的时间足够使其运动7cm了,所以对于预判来说,高速的摄像机是必须的。


更具体的技术路线我总结如下,其中击球策略要等到硬件软件框架完成后再实际确定:
思维导图 2.png


然后就是逐步实现导图中的功能了,目前高速摄像头已经到位,我选择的是某款工业摄像机配合广角镜头,帧率可以达到320fps,应该说对于本项目是非常理想的(不过根据测试该相机的驱动稍微有些复杂,并不是免驱摄像头,特别是同时开启两个摄像头的情况下需要定制一些驱动,好在这个问题我已经解决)


我所使用的工业摄像头:
snipaste20170430_124551.jpg


然后机械臂的设计也已经基本完成,使用四个舵机加一个步进电机驱动,下一步是进行相关金属件的加工和3D打印:
IMG_3514.JPG


最后给出预期的系统形态实物渲染图(导轨未加):
IMG_3513.JPG


17.4.27更新
      加工的机械臂零件基本都到了,把机械臂组装了一下。经简单测试,很可惜底部舵机的力矩不够,准备换用更大力矩的型号,顺便改进一下结构。

snipaste20170430_124544.jpg




17.4.29更新

       双目视觉方面,相机的立体标定和重投影计算已经完成了,各种投影坐标变换还是有点复杂的;做了个可视化的demo,视频中标定板的三维坐标被摄像头定位并实时显示到3D场景中;这里有少许延迟是因为通信原因和渲染耗时,另外显示器的刷新率也只有60hz所以本身是无法显示高速图像的,最终应用到系统中时帧率会控制在150fps左右,延迟在ms级。


      下一步是着重解决乒乓球识别的问题,用传统机器学习或者神经网络的方法当然是可以很好地识别物体,但是运算量的开销是本系统所无法承受的(即使提前训练好模型,一帧运算时间也差不多在秒级别),所以肯定还是寻求更加简洁有效的识别算法,比如光流,差帧等;一个更麻烦的问题是,除了识别乒乓球,还需要识别机械臂和人,因为在摄像头机的视野中,这些东西都是在运动的,而乒乓球是其中最小的物体,所以如何做好滤波算法也非常重要,类似卡尔曼之类的跟踪器是很有必要被引进的。





17.5.4更新

        机械的金属件都加工完成了,机械臂已经组装好,更换了结构和舵机之后力矩已经满足要求,速度也是没什么问题的。

        在组装的时候突然想到个方案,其实可以在机械臂关节之间添加一个扭簧,用来抵消机械臂的重力,这样舵机只需要很小的力矩用来克服惯性力就行,下一版尝试一下这个方案。
        snipaste20170504_233101.jpg
        用买的舵机驱动板试了下机械臂的相应,如图(只驱动了下面两个舵机,末端的舵机没有上电,因为舵机板只有两个输出)
       

        另外,机械臂的控制电路PCB也画好了正在打样,估计下周就能撸起来啦~
        snipaste20170504_234257.jpg

        最底部的导轨使用的是交流伺服电机,这电机通体乌黑,摸着甚爽,输出暴力,居家创客必备啊...
        snipaste20170504_233133.jpg

17.5.7更新

       继续调了下视觉算法,目前已经可以准确识别乒乓球了,偶尔有遮挡的情况也不怕;下一步是加入卡尔曼滤波,让轨迹跟踪更稳定可靠,等PCB板子来了就开始软硬件联调啦。





17.5.9更新

       整合双目和目标识别写了个3D可视化程序,跟踪效果还是不错的,这里还没有加任何的滤波算法,所以后期还有提升的空间;遇到的一点小问题是,由于乒乓球太小,因此当球处于远桌处的时候会变成一个小点,这时候可能会被当作噪声被滤除;解决这个问题有几个思路,一是添加形态学处理,也就是膨胀,这样可以在不改变目标中心位置的情况下扩大目标面积,二是靠观察器跟踪球的位置,简单的说就是现实物理世界中的运动一定是连续的,这样在摄像头帧率足够高的情况下,得到的相邻两帧的距离不会太远,基于这个先验知识就可以判断出噪声和球的区别了。






17.5.10更新

       PCB到了,迅速焊了一片样板,主控采用的是STM32主处理器和一片Arduino作为协处理器;经过一番惊心动魄的测试,除了钽电容焊反放了次烟花以外,其他部分都工作正常。。

IMG_3593.JPG


17.5.11更新

       偷个懒。。。不务正业做了个主控板外壳,正在SLA打印中

snipaste20170512_020410.png

untitled.91.png



17.5.19更新
学校有点事要忙耽误了几天,重新开始续更啦。
IMG_3639(20170519-151733).jpg
昨天测试了焊好的驱动主控板,板子没什么问题,拍了个演示视频,到时候会实时同步电机运动状态到3D场景中,方便记录数据进行重放,好定量 分析参数影响。

伺服电机还是很给力的,响应速度和扭矩都不错,不过上面的机械臂就没那么理想了,虽然已经更改过一次结构,还是容易出现震荡的情况,继续改结构吧。。。


17.6.6更新
最近事情太多了。。不过还是有些小进展的,机械臂改版马上就完成了;视觉算法改动较大,翻看了不少国内外视觉跟踪相关论文,产生了一些新想法,经验证还是很有效的,进一步增强了鲁棒性,看视频效果



17.6.9更新
机械臂改版完成了,新版设计把几乎所有舵机多下置到底部,通过同步带传动,小伙伴帮忙设计的新结构,非常给力~这样设计好处有很多,首先降低了机械臂负重,可以减轻舵机扭矩需求;其次由于装在底部空间足够,可以换用更大型号的舵机;最后由于使用同步带和同步轮传动,可以在同步轮出再加一级减速,进一步增大力矩,减小惯量(和减速比的平方成反比)。总的来说现在力矩是完全足够了,速度也比较理想,看视频:

高速运动效果:


初步跟踪效果(未作任何优化,单位也没有统一):



机械臂主要负责垂直方向的运动,而水平方向则由更为灵活的高度滑轨实现,现在滑轨还在加工,预计过几天就可以完全组装好了。

17.6.11更新
导轨加工完成,速度飞快;机械臂可能还需要大改,脑阔疼...



17.6.13更新
整合各个模块,简单写了个导轨跟踪程序测试了下,效果还是不错的,下一步是优化速度,加上轨迹规划函数减小抖动





未完待续。。。


个人主页:www.pengzhihui.xyz


评分

参与人数 2威望 +36 收起 理由
Ansifa + 30 666666
幻生幻灭 + 6 666666

查看全部评分

回复

使用道具 举报

发表于 2017-4-30 13:54:44 来自手机 | 显示全部楼层
看好你,哈哈。
回复 支持 反对

使用道具 举报

发表于 2017-4-30 19:31:17 | 显示全部楼层
大神呀,赶上直播了,这几天先学学您的蛋黄哈哈哈
回复 支持 反对

使用道具 举报

发表于 2017-4-30 22:57:03 | 显示全部楼层
很高兴有人研究逆向运动学了
然而机械结构方面可能无法达到你的预期效果,
目测机械臂完全伸直会超过400mm,这个力矩下水平抬起球拍都有难度
然而速度上台式机强大的计算能力有可能达到你要求,不过机械反应就困难很多了

要做到1:1打乒乓球的话还真要很土豪那种人才行,如果你是的话求抱大腿。

我完全没有泼冷水的意思,不过这是经验之谈,虽然我当时的目标不是乒乓球,但还是败在机械问题上。

那么缩小模型或者效果会好一些,建议臂展在100mm以内,不要用球拍了,胶片或者铝片来代替吧
至于球嘛 15mm的硅胶球 或者 橡胶球 Q弹的很可爱的

回复 支持 反对

使用道具 举报

发表于 2017-4-30 23:08:06 | 显示全部楼层
采集系统可以采用多传感器的方式,个人觉得双目似乎有局限。。。。
最好是  XYZ三个轴 加一个专门用来检测球的旋转速度的
这样可以精确分析轨迹和旋转球的指标。

同理,击球部分要考虑旋球的回击方式,所以可能舵机要更多。

纯属个人YY哈。。。
回复 支持 反对

使用道具 举报

发表于 2017-4-30 23:18:04 | 显示全部楼层
本帖最后由 平生须臾 于 2017-4-30 23:27 编辑

大神,关注你很久了,你的博客各种项目我都看了

就这个项目来说,用舵机的话力矩和速度都不够吧,毕竟不是库卡。自己做的话可以参考欧姆龙的打乒乓机器人,用三个步进电机做并联臂加底下一个舵机变方向,拍子换轻点的,说不定能成
U410P4T8D7557404F107DT20151008085725.jpg
EEZYbotDELTA.zip (6.32 MB, 下载次数: 62)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-1 01:08:44 | 显示全部楼层
平生须臾 发表于 2017-4-30 23:18
大神,关注你很久了,你的博客各种项目我都看了

就这个项目来说,用舵机的话力矩和速度都不够吧,毕竟不 ...

这个其实设计之前已经计算过,力矩是足够的,只不过实际测试的时候发现舵机的力矩存在虚标的情况,所以最下面一节的舵机力矩不够。现在重新设计了结构,也换了舵机,经测试以及可以满足需求啦,响应速度的问题上面说了是通过增加水平的移动导轨来解决的,用的就是步进电机
回复 支持 反对

使用道具 举报

发表于 2017-5-1 11:40:26 | 显示全部楼层
很高兴你能解决这些问题,
那么我在热切关注中期待新的进展
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-1 12:08:52 | 显示全部楼层
wing 发表于 2017-4-30 22:57
很高兴有人研究逆向运动学了
然而机械结构方面可能无法达到你的预期效果,
目测机械臂完全伸直会超过400m ...

嗯这个虽然我机械不是非常擅长,但是其实舵机的功率密度相差也非常大的,好一些的舵机在很小的体积内能达到80kg.cm的扭矩(我现在用的根部舵机,测试过响应速度也是够的,现在整个机械臂加拍子的质量为560g);不考虑成本的话那无刷电机配合foc矢量控制器显然是最合适的选择,这个我之前参与制作的一个人形机器人里有现成的结构啦(然而单个电机成本就要4000以上),但是考虑到降低成本只能有些妥协啦;对于这个项目,其实最重要的还是视觉和算法(因为机械臂的运动范围其实不要求很大,底部是可以水平旋转180度的,所以预判之前是90度持拍,预判之后只需要水平旋转到左或者右的区间,然后导轨的水平运动使用40w的步进电机能达到1m/s2的加速度,所以舵机只需要考虑竖直方向的运动,有足够长的臂还是比较好达到要求的)

既然要做当然是做1:1的可以跟我对打的机器人啦,这才是我这个项目的初衷嘛,还是感谢提出建议~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-1 12:23:54 | 显示全部楼层
darkorigin 发表于 2017-4-30 23:08
采集系统可以采用多传感器的方式,个人觉得双目似乎有局限。。。。
最好是  XYZ三个轴 加一个专门用来检测 ...

这个嘛以后要做到更快更强肯定是需要有这些东西的加入的啦,只不过现阶段看看世界范围做的最好的这些机器人是什么水准,其实就知道这个东西难度是非常大的(虽然原理上可行,实际实现起来会发现技术细节极端繁杂)

比方说球的转动其实是不太可能靠捕捉旋转检测的(因为球没有纹理特征,摄像头怎么看都是一样的),但是可以靠捕捉运动轨迹来判断(下旋球的弧度会比上旋球大,进行建模后可以得到转速),这样看来其实两个摄像头也是可以检测旋转的(毕竟都是需要轨迹)。

有意思的是很多我们人类觉得很困难的事情(比如算微积分,下围棋),对于机器人来说是很简单的,而我们觉得简单的事情(比如打个球,走个路),对机器人却很困难,毕竟人类是有着被大“自然程序员”开发了几十亿年的基因基础,这才是最伟大的项目啊
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-10-23 14:12 , Processed in 0.046662 second(s), 7 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表