
還別說,今天它真就有瞭,直接上圖!
請註意哈,在上圖中這位小哥把弓拉開之後,箭是自己發射出去的,而且是連環命中!
這就是這兩天在 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米。
作者 | 青暮、陳大鑫
原視頻鏈接:
https://www.youtube.com/watch?v=1MkrNVic7pw