射箭是一项“再简单不过”的运动,火柴人前线前提是不求弯弓射大雕,但求箭能射在靶上就行。
但是如果想做到“一发命中、百步穿杨”那就非常有难度了,不经过长期的训练是万万不行的。
那难道就没有一种智能的弓箭吗?那种只要你拉满弓,无需认真的瞄准,它就能自己射中目标的弓箭箭?
还别说,今天它真就有了,直接上图!
请注意哈,在上图中这位小哥把弓拉开之后,箭是自己发射出去的,而且是连环命中!
这就是这两天在 Youtube 上十分火爆的一个堪称“百发百中”的射箭视频,这位油管博主是一位硬核程序员,相信很多人并不陌生,他叫 Shane Wighton ,之前他自制的一个“理发机器人”、“百发百中投篮”、“百发百中台球杆”曾在 YouTube 上火了很多次。
这位硬核的博主目前在 3D 打印技术开发商和制造商 Formlabs 公司担任首席工程师。他之前就读于北卡罗来纳大学夏洛特分校,拥有机械工程学士学位和计算机科学硕士学位。
本次事情的起因是这样的,Shane Wighton 的妻子很擅长射箭,海上保卫战中文版Shane 却在这方面“笨手笨脚”,Shane 比之不过,于是他想“作弊”来买一款能够自动射箭的弓,可惜网上都没有卖的,无奈之下,他只好决定亲自动手打造一款出来。
因为 Shane Wighto 虽然不擅长射箭等运动技能,但是他很有极客精神,很擅长动手做工程。
Shane Wighto 在穿戴这款弓箭机器人装备之后,就没有再费劲瞄准了,几乎拥有了超能力,他射出去的箭就像狗一样能闻到目标的味道,自主击中目标。
可以说穿上这件衣服之后,比鹰眼还鹰眼!
弓箭机器人原理这款弓箭机器人装备大概需要瞄准和发射两个过程。
我们先来看一下比较简单的发射过程吧。
发射原理大概是这样:一共有两个小机器人,一个在持弓手和弓之间,用来移动弓的位置和角度;一个在拉弓手和弦之间,用来释放弦并发射弓。只要前面的瞄准工作做好之后,仓鼠特技飞天就会有个信号告诉伺服电机来实现发射工作。
看起来很简单是吧?
别急,还是来看看下面比较难的瞄准工作吧,想要打造这样的自动瞄准系统,首先,需要做出来一个弓瞄准机器。
像下面这样,只要握住把手后,弓就能在一定范围内自动地调整相应的位置和角度。
但射箭和打一束激光可不一样。首先箭的飞行轨迹不是一条直线,而是抛物线。而这条抛物线的弯曲形状,也取决于发射的速度。速度越快,这条抛物线越接近于直线,反之越接近于抛物线。
另外的困难还是在于精确地计算和掌控时间,当抛出一个飞靶时,也许射出的箭离集中靶心只差了 50 毫秒的时间,而 50 毫秒仅相当于眨眼瞬间的 1/3,所以必须要精确地计算好距离、发射角度、发射时间来做提前射击。
没错,你会说只需利用小学三年级学到的数学物理知识,疯狂的老头加强版不就足以能建模发射出箭的抛物线方程了嘛。
看起来核心思想非常简单嘛,但是,实际的设计和制造却是一个很大的挑战。
比如弓具体在调整位置和方向时用到了 Shane 亲自打造的“鹰眼”系统。
这套“鹰眼”系统一共利用了八个摄像头,来找到一个中心,告诉弓相对于目标的位置以及其他很多坐标。
可以看到上图有一个小反光球,所有 8 个摄像机都在同一时间拍摄到它,这样就能精确地来计算出小球的位置,这整个过程非常的快,一秒钟能拍 50 帧。
这些小球叫做跟踪球,被安装在弓的前方和拉弓手的手持部件上。
小跟踪球不止一个,所有的摄像机都会在同一时间拍摄到这些小跟踪球,并给出 50 个关于每个球的位置更新。
这样,系统就能分析出箭应该指向的角度,以及拉弓的力度,进而计算出箭射出后的抛物线。
Shane 声称自己写了一个非常“简单”的程序来计算这些数据,由于代码过于“简单”,机器猫铁人兵团Shane 似乎羞于对此做详细介绍。
Shane 试了试效果,按下系统启动键,开始瞄准,发射!
结果非常棒!
额,会打到自己的脸。
而且,箭也没法射中目标,每次都射到偏左上的位置。
怎么办?
既然每次都偏左上,那就往右下调偏差就行啦!
没有什么事情,是一行代码搞不定的。
接下来,就是见证奇迹的时刻了。
Shane 正式向妻子发起了挑战。
比赛规则是:Shane 和他的妻子比赛三局,每人各射击一箭,更准的人得一分。
结果是,Shane 一败涂地。
Shane 不服气,觉得还有改进的空间。
可是问题出在哪里呢?
没错,箭还是有些偏。
他觉得,还是代码的问题。
在经过一周的非常无聊的软件开发和调试之后,全新的系统出来了。
这一次,他选择了更难的任务,即以运动的靶子为目标。
弓已经拉好准备发射,按下按钮之后,计算机启动“鹰眼”跟踪系统,每 300 毫秒发送一次数据,更新所有物体的位置。
当计算机看到目标时,它会检查目标是否以抛物线运动,然后计算出它应该将箭指向何处,来射中目标,这其中会考虑箭移动到那里的时间,和箭的抛物线路径。
然后系统会开始调整弓的位置,随着跟踪数据的输入不断增加,弓会不断地进行调整,以适应手的抖动。
之后当系统认为瞄准到了正确位置的时候,就会开始调整箭的角度。
然后,只要按下按钮,箭就会发射出去。
咦?根本没有射中。
再继续改 bug 吧。
这时候,他的妻子已经不耐烦了,厌倦了他一遍又一遍地说只需要几分钟,结果却花费了几个小时来修改一个 bug。
怎么办?陪妻子散步去吗?
想多了。
没见过技术宅?
他制造了一个自动弹射器,把妻子晾在一边,然后尽情地自己玩耍。
在修改 bug 的过程中,他考虑了这些问题:为什么箭发射得太早?为什么箭发射得太晚?为什么靶子静止不动的时候没有击中目标?为什么会击偏?
尽管有这么多错误,但这只是时间问题。
现在,箭能击中静止不动的靶子了!
尽管还是不能击中运动目标,但到目前为止,我们已经非常接近最终的目标了。
箭确实可以依照设定的抛物线来飞行。
但是箭并没有足够漂亮的飞行轨迹,反而歪歪扭扭的。
这时 Shane 想到,他目前一直使用的都是反曲弓,这种弓有一个问题 —— 不能直接对着靶心射过去,得偏一点儿才行。(Shane 最初考虑使用这种弓也是因为它是最便宜的。)
当然,他也说道,这种错误可以通过算法来调整。
不过还有一种更加省事的方法 —— 花钱买更贵的复合弓。
这种复合弓射出的箭的轨迹非常笔直,他说道,这其实有点作弊嫌疑,但普通人用这把弓就能百发百中吗?哈哈,也不见得。何况,我们还有更花的玩法。
这种弓有一个缺点是非常的重。所以,他一怒之下做了一套“战斗衣”,借此用身体的力量来固定和支撑这把弓,好让自己能够轻松地操控。
鹰眼,完成!
是时候把气走的妻子哄回来了。
妻子惊呼,你这穿的是啥?钢铁侠?
少废话,战斗再次打响!
规则不变,还是看谁击中的准,谁赢。
这一次他减缓了速度,并开启了神枪手模式。
结果,三箭全中靶心!
而他的妻子一发未中!
3:0,游戏结束。
Shane 还说,他都完全没有集中精力。
接下来,在小苹果目标测试中,也完全没问题!
甚至都不用看目标。
再接下来,就是移动目标的射击了。
结果不出所料,一击中的!
在这个过程中,瞄准系统不仅识别出了弓箭的位置,还识别和预测到了目标的运动轨迹。
看看这些被箭射中的地方有多密集。
为了测试系统到底能有多准,Shane 拿出了心爱的乐高小人,并在它头上安装了一个“小苹果”,准备瞄准“小苹果”。
一开始不是很顺利,但最终,乐高小人被成功击中了。
“小苹果”不见了,是不是刚好被击中了呢?
慢镜头显示,击中的位置是小人的心脏。
我们再试一次。
啊哈!
当然,这个系统也还没达到十全十美的地步。
Shane 说道,下一次,他想挑战在 150 英尺(约 45 米)开外击中乐高小人头上的小苹果。
要知道,室内射箭比赛的距离一般才 18 米,而奥运射箭项目,不过 70 米。