在油管上有這么一位博主 Shane Wighton,他在運動方面經常被妻子血虐。于是,他經常造一些諸如 " 百發百中弓箭 "、" 百發百中籃球板 " 等作弊道具來挑戰他妻子。
這一次,Shane Wighton 買了設備跟妻子打臺球。結果不出意料,Shane Wighton 再次被妻子無情嘲諷。

既然正常比賽打不過,那就用科技打敗魔法。Shane Wighton 決定發動自己的天賦技能 " 創造 ",打造一根全自動球桿。
這個玩意有多酷呢,球桿的算法會自動計算最優的擊球路徑,桌球臺上方的投影儀會給出最佳擊球位置,使用者只需要扣動扳機即可變身桌球國手。
具體效果如何?咱直接看動圖。

只見使用者拿起球桿,上膛、扣扳機、球桿自瞄、擊球入洞這一系列動作行云流水。使用者需要做的僅僅是把球桿對準白球,球桿就會自動計算擊球路徑,完成擊球。真正做到 " 我有手,我上我也行 "。

那么一根自瞄球桿是怎么制作的呢?
兩大裝置打造自瞄球桿
制作自瞄球桿,需要完成 " 球桿改造 " 以及 " 自瞄系統搭建 " 等兩項工作。其工作難度,也是只有億點點拉,懂一點高數、機械原理、代碼編程、視覺算法、機器學習,再有一個靈光一點的腦子就行啦。
球桿改造
首先,讓我們看一下球桿改造部分。進行球桿改造,主要需要球桿能夠實現球桿方向自動調節、自動推桿擊球以及接收來自瞄準系統反饋的擊球操作。
關于球桿的方向調節系統,作者分享了他在前期思考時腦海中的畫面就像下圖這樣。他希望球桿能夠擁有靈活的高精度方向調控能力,同時兼具在高速撞擊臺球時能保持方向不變的剛度。

這個方向調節體型,小伙伴們心里有想法嗎?
為了實現球桿能夠滿足使用需求,作者采用了擁有 6 個自由度的平臺并聯機構 "Stewart"(斯圖爾特平臺),能夠很好的完成球桿調節方向的功能。
確定好調節方向的工具之后,作者開始進入鋼鐵俠造鎧甲模式。先是計算各個元器件的尺寸,在電腦上建模模擬運動效果,編寫代碼。

接著火力全開,自己完成零部件加工、設備安裝等。

這貨家里簡直就是個小型加工廠,我絲毫不懷疑在資金充足的情況下,他能打造出一具鋼鐵俠鎧甲。
小伙伴們要注意用于控制支腿的伺服電機進行潤滑,不然球桿可能會像下面這樣瘋狂抽搐。。。

搞定方向調節裝置,接下來便是自動推桿擊球功能的實現。相較于斯圖爾特平臺的復雜,推桿擊球功能明顯要更加的簡單,使用一個氣缸即可完成。
這樣,通過斯圖爾特平臺和氣缸這兩個工具,我們的球桿已經能夠實現多方向調節已經自動推桿,接下來便是安裝單片機以及無線模塊,實現球桿的方向調節及推桿可控。

正所謂,不會機械加工的程序員不是好工程師,作者通過一頓操作,把代碼便攜、零件加工和設備調試等工作全部包攬了。
至此,球桿的改造工作基本完成,接下來要進行的就是自動瞄準系統的制作了。
自瞄系統
制作自瞄系統,一共要完成 " 視覺定位 "、" 軌跡計算 " 這兩大部分。
我們先來說比較容易理解的視覺定位部分。視覺定位系統主要有一臺安裝在桌球頂部的攝像機提供畫面支持,攝像機將錄制到的畫面傳輸到電腦,電腦在進行畫面分析。

嗯,這臺攝像機還可以進行移動調整錄制角度,全方面無死角的捕捉臺球桌上的臺球,掌控全局!是不是有種動漫里面主角開掛的既視感,五條悟直呼內行。

當然,我們還需要一些輔助措施讓電腦將接收到的畫面調整為與實際畫面一致,防止擊球軌跡出錯,導致球不入洞。
作者通過在臺球桌上黏貼白點以及 QR 碼的方式,讓電腦進行基準面調節,實現了臺球桌在電腦內畫面始終方正的樣子。

接下來,使用一丟丟魔法代碼,讓計算機識別臺球、球洞以及庫邊。

代碼完成。接下來,電腦可以根據基準面反推出球洞、桌面保險桿以及球的位置,再通過視覺算法進行標記,完成目標識別。

這下球和球洞都能識別了,該開始讓球桿自己開始學習擊球了,也就是進入自瞄系統的 " 軌跡計算 " 部分。
要想完成軌跡計算,首先要讓電腦知道球桿朝向。萬能 QR 貼紙再次出現,一張貼紙能讓電腦找到球桿,兩張貼紙讓電腦明白球桿指向,居家 diy 必備好伴侶。

QR 貼紙:我標記了一處地點。
但是等一下,這兩張 QR 碼只能在電腦上形成也和 2D 圖像,電腦并不知道球桿的傾斜角呀,這擊球的時候豈不是亂了套?

那怎么省時省力的獲取傾斜角呢?讓我們看看電腦感知到的畫面中哪些數據跟傾斜角相關。
最后,作者發現電腦能直觀獲得的便是球桿 2 個 QR 碼所生成圖像長度的變化,而圖像長度的變化受傾斜角的影響。(這題我會啊,小學時候學的解方程嘛!)
也就是說,我們用一把量角器量得傾斜角的度數,再結合電腦中圖像長度的變化,我們就可以獲得傾斜角和圖像長度的變化關系。將這個變化關系輸入到代碼中,代碼便可以通過圖像長度自動計算球桿的傾斜角。
為了減少用手支撐球桿發生的抖動影響計算機計算傾斜角,作者還給球桿設計了一個支架,增加球桿的穩定性。

這樣架起來的球桿,倒是有幾分炮臺的感覺了 ~
球桿及臺面數據已經識別完成,接下來就是進入擊球軌跡測算的環節。在算法實裝之前,作者先在電腦上做了一個簡單的算法進行球桿的擊球測試。這個算法會告訴作者擊球路徑及角度。

看著好像挺酷的,但是電腦桌面跟臺球桌面離那么遠,不可能每次測試都往電腦瞟一眼呀。
于是乎,作者做了一件非常酷的事情,他將投影儀安裝到臺球桌頂部,將電腦畫面投影到桌面上,直接把臺球桌變成了星際作戰會議桌。


接下來,萬事俱備,只欠東風。最后再把算法這些再過一遍,自瞄球桿準備進入作戰狀態!

把老婆叫過來,摩拳擦掌,準備讓她看一眼自己的發明。
天際鷹眼系統已就位,地面已接收到鷹眼運動軌跡數據,球桿出擊!

嗯,怎么說呢,這么近距離能夠成功讓球不進洞,也算是一種另類的精準吧。難道說運動天賦差的人做出來的道具也沒有運動天賦嗎?
再把各種公式各種軌跡運算數據重新計算整理,球桿還是時靈時不靈,完全摸不透出錯的規律。

思來想去,軌跡計算公式沒有出錯,球桿的推桿精度沒有出錯,那只能是在進入計算環節之前的某個環節存在問題。最終,作者將問題鎖定到了用于錄制畫面的攝像機上面。
由于廣角攝像頭的采用,攝像機錄錄制的畫面是存在光學畸變的,即便通過算法進行畸變校正,問題仍然存在。

面對這種畸變,作者最開始想通過物理校準的方式來消除畸變,但連續四天的失敗嘗試,讓他意識到情況不對勁,不論他怎么做,軌跡測算就是會出現問題。

想來想去沒辦法,他重新聚焦算法,想從算法這一塊入手。這一看直接讓他發現了失誤的源頭——他用于矯正畸變的算法,其實是之前針對另一款攝像機設計的,他只要將算法修改為適用于正在工作的攝像機就好了。
終于,皇天不負有心人,修改完算法之后的擊球軌跡總算正常了,擊球嘎嘎猛。

至此,雖然球桿還未開發自瞄功能,目前也只是充當了自動擊球的作用,但經歷了第一波被老婆嘲諷以后。他決定謹慎行動,先多番測試一下球桿的穩定性。
不得不說,Shane Wighton 確實是一個會整活的鬼才。測試算法是枯燥的,于是他想了個辦法,拉別人入伙來一起做測試。
通過在網站上制作一個簡單的小程序,參與測試的人可以獲得自動球桿的控制權以及在桌球臺上標記擊球點進行擊球。
經過多輪測試以后,球桿的擊球獲得了保證,作者同時還獲得了大量的擊球數據,為后面的自瞄算法提供了數據支撐。

所有的基礎問題已經解決,接下來就是完善算法,實現球桿擁有大腦,成為真正的自瞄球桿。
在算法設計當中,作者希望每次擊球開始時,電腦會自動計算所有潛在的擊球路徑,并選擇能夠實現連續擊球進洞的最優路徑。

要想實現計算機能夠提供精準的擊球路徑,大量的機器學習那是必須的。但是迫切想要一雪前恥的心不允許作者花費太多的時間在機器學習上面。
于是乎,作者采用了一個相對來說更便捷高效的方法——繪制有向圖。簡單來說,通過有向圖,作者讓電腦學會了在保證能進球的情況下計算擊球時的最短路徑。

這一頓操作下來,臺球桌在電腦眼里看來已經變成這個樣子了,有種在打海戰時,魚雷追蹤船只的感覺。

接下來,超級大腦已部署,星際目標指引衛星(投影儀)已部署,球桿準備就緒。Shane Wighton 再次向他老婆發起了挑戰。

這一次,由 Shane Wighton 的老婆開球,打了 2 桿之后,輪到 Shane Wighton 擊球。然后,便是 Shane Wighton 的擊球,Shane Wighton 的擊球,Shane Wighton 的擊球,徹底展示什么叫做理工直男。

最后,讓我們了解一下作者。Shane Wighton 之前就讀于北卡羅來納大學夏洛特分校,擁有機械工程學士學位和計算機科學碩士學位,目前在 3D 打印技術開發商和制造商 Formlabs 公司擔任首席工程師。
Shane Wighton 本人在油管上擁有非常高的熱度,因為他妻子的運動天賦確實過于強大,導致 Shane Wighton 經常需要制作一些黑科技來找回一點 " 面子 "。
除了自瞄球桿以外,作者還制作了,全自動瞄準弓箭,百發百中籃球板,全自動理發機等黑科技設備,活脫脫的物理外掛制造家。

原文地址:http://www.myzaker.com/article/62f32c908e9f09492c2d6b5e