专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
目录
相关文章推荐
Python爱好者社区  ·  DeepSeek创始人梁文锋个人履历 ·  昨天  
Python爱好者社区  ·  多模态,杀疯了 ·  23 小时前  
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  4 天前  
Python爱好者社区  ·  张雪峰公司今年的年终奖... ·  3 天前  
Python爱好者社区  ·  120道Python面试题.pdf ... ·  6 天前  
51好读  ›  专栏  ›  Python程序员

有钱有闲有知识:「百发百中」篮板作者又出新作:百发百中台球杆

Python程序员  · 公众号  · Python  · 2021-02-25 08:10

正文

机器之心报道

编辑:张倩
「I don't have skill, but I  do have technology.」


「知识就是力量」,在油管 up 主 Shane Wighton 的人生中,这句话绝不仅仅只是一句口号。他用一个又一个的奇思妙想证明,即使你手再残、再没有运动细胞,只要还有脑子,任何运动都难不倒你:之前是 篮球 ,这次换成了台球。之前是在篮板上「做手脚」,这次换成了球杆。


如图所示,这个智能球杆的末端是可以活动的,球桌的上方还安装了智能摄像头,用于拍摄球桌战况和计算击球路线。


除了自娱自乐之外,这个系统还可以联网,邀请朋友或不认识的网友打一局「线上 + 线下」协同的台球比赛,可以说非常实用了。

当然,整个系统的设计并没有看起来那么简单,需要克服很多困难,如怎么控制球杆活动部位的运动,怎么控制击球的力度。

克服这些困难经历了一个痛苦的过程,我们慢慢来看。

首先,Shane Wighton 将打台球的过程分解为两个步骤:1)确定球的行进路线;2)精准击球,使其按照预想的路线滚入球洞。这也是智能击球系统需要完成的两项任务。

Wighton 所预想的系统是这样的:首先,在球桌的上方安装一个摄像头,用于记录球桌上的基本情况;这个摄像头与一个「大脑」相连,后者可以利用算法,根据摄像头拍摄到的信息计算出最佳击球路线;最后,构建一个末端可以活动的球杆,帮助玩家完成击球动作。


整个流程设计看起来非常流畅,但 Wighton 却表示,真正做起来才发现,「这可能是我做过的最复杂的一个系统」。

球杆:智能台球系统的肢体

首先来看球杆。这部分的第一个难点在于:如何让球杆的前端自由活动?不只是左右活动,还要上下活动。Wighton 首先想到了一个简单的模型,并造了一个原型出来。但无论怎么看,这个设计似乎都很难稳定控制:


其实,Wighton 知道,Stewart 平台能够满足他的要求,但这个平台做起来实在太麻烦了,所以并没有将其作为首选。但现在,他似乎没有选择了。

Stewart 平台是一种有六个棱柱接点的并联式机械手,其棱柱接点多半是油压或是电子式的线性致动器,两两成对装在平台的三个位置。棱柱接点的下方也是两两成对接在平台底盘的三个位罝,但配对会和平台的配对错开。六个棱柱接点两端共 12 个接点,都是用万向接头连接。平台上方的物体的移动有六自由度,包括三个方向的移动以及三个方向的转动。

Stewart 平台有很多优点(如稳固、体积小),甚至可以说,除了麻烦之外,似乎没有多大缺点。

为了做出 Stewart 平台,Wighton 首先需要做出很多小零件。

Stewart 平台的运动是利用一些拉紧的缆绳来控制的,缆绳的另一端连着控制器等装置。平台的精确运动则由算法借助微积分等知识来计算。


到这里,球杆的活动部分就大致完成了:


最后的击球动作通过一个气缸来完成。由于台球对击球的力度控制有要求(并非力度越大越好,比如有时候动作需要非常轻,避免白球落洞),Wighton 还给这个气缸安装了一个控制装置,可以通过放气阀等装置控制气流,从而达到控制击球力度的目的。


球杆做出来的确很酷,但它现在也只是充当一个灵活的肢体,没有「眼睛」和「大脑」。接下来,Wighton 就要给这个系统安装一个「眼睛」和「大脑」。

摄像头 + 算法:智能台球系统的眼睛和大脑

在这个系统中,悬挂在球桌上方的摄像头充当了整个系统的眼睛。但这双眼睛也遇到了一个难题:它拍出的图像并不是规则的矩形。如此一来,画面中每个球的位置就会偏离其实际位置,导致算出的击球路线不够准确(Garbage in, garbage out)。


为了校正拍摄画面,Wighton 给球桌的四个角贴上了一个基准点贴纸(类似于二维码三个角上的小方块)。这些贴纸不仅可以帮助计算机程序校正画面,还可以作为球洞、球等关键位置的参考。


为了确定球杆击球的方向,Wighton 给球杆也贴上了贴纸。球杆顶点的高低也有相应控制。




这些都准备就绪之后,Wighton 已经能够通过算法算出最佳击球路线,但问题是:路线只能显示在电脑的显示屏上,玩起来很不方便。要想玩得尽兴,还得安装一个投影仪。当然,投影仪也需要定点和校正,这里依然借助基准点来完成。


一切就绪,开始第一轮测试:


Wighton 妻子的脸上泛起了神秘的笑容:就这?

痛苦的复盘

到底是哪里出了问题?起初,他发现,球杆的最前端总是向错误的方向移动。为了找出导致这一问题的原因,Wighton 开始复盘整个系统:首先,他安装了一个摄像头来记录球桌画面,然后用一个计算机程序来校正拍到的画面,另一个程序来抽取每个关键点的位置。将这些信息输入计算机,相应算法就可以算出球杆最前端应有的角度,然后将这一信息转化为 Stewart 平台六个致动器的位置信息,完成击球动作。

经过复盘,Wighton 发现,原来是驱动球杆活动端的伺服电动机出了问题:其中两个电动机的转动量和自己预想的不一样。此外,电动机上的滑轮也有一些小问题。

把这些问题解决了就行了吧?naive。更大的问题还在后面:球还是打不进。

为了挽尊,Wighton 又进行了几天疯狂的复盘。终于,一个问题浮现在眼前:球的位置似乎有偏移。


Wighton 认为,这可能是因为广角镜头让画面产生了扭曲。但是,他的镜头是自带校正功能的,因此问题可能出在其他方面。

接下来又是四天筋疲力尽的复盘行动,Wighton 甚至自己做了一套校准系统,但一切并没有好转。

「有时候医生会把手术刀落在病人身体里,病人回家之后就会经常生病,还找不到原因。但这个病人怎么也想不到是肚子里的手术刀导致了这一切。」当最终问题浮现在眼前时,Wighton 想到了这个例子。

这里的「手术刀」就是代码里的 bug。那段代码里有校正功能,但针对的不是 Wighton 用的那台!







请到「今天看啥」查看全文