0
射箭是一項“再簡單不過”的運動,前提是不求彎弓射大雕,但求箭能射在靶上就行。
但是如果想做到“一發(fā)命中、百步穿楊”那就非常有難度了,不經(jīng)過長期的訓練是萬萬不行的。
那難道就沒有一種智能的弓箭嗎?那種只要你拉滿弓,無需認真的瞄準,它就能自己射中目標的弓箭箭?
還別說,今天它真就有了,直接上圖!
請注意哈,在上圖中這位小哥把弓拉開之后,箭是自己發(fā)射出去的,而且是連環(huán)命中!
這就是這兩天在 Youtube 上十分火爆的一個堪稱“百發(fā)百中”的射箭視頻,這位油管博主是一位硬核程序員,相信很多人并不陌生,他叫 Shane Wighton ,之前他自制的一個“理發(fā)機器人”、“百發(fā)百中投籃”、“百發(fā)百中臺球桿”曾在 YouTube 上火了很多次。
這位硬核的博主目前在 3D 打印技術開發(fā)商和制造商 Formlabs 公司擔任首席工程師。他之前就讀于北卡羅來納大學夏洛特分校,擁有機械工程學士學位和計算機科學碩士學位。
本次事情的起因是這樣的,Shane Wighton 的妻子很擅長射箭,Shane 卻在這方面“笨手笨腳”,Shane 比之不過,于是他想“作弊”來買一款能夠自動射箭的弓,可惜網(wǎng)上都沒有賣的,無奈之下,他只好決定親自動手打造一款出來。
因為 Shane Wighto 雖然不擅長射箭等運動技能,但是他很有極客精神,很擅長動手做工程。
Shane Wighto 在穿戴這款弓箭機器人裝備之后,就沒有再費勁瞄準了,幾乎擁有了超能力,他射出去的箭就像狗一樣能聞到目標的味道,自主擊中目標。
可以說穿上這件衣服之后,比鷹眼還鷹眼!
弓箭機器人原理
這款弓箭機器人裝備大概需要瞄準和發(fā)射兩個過程。
我們先來看一下比較簡單的發(fā)射過程吧。
發(fā)射原理大概是這樣:一共有兩個小機器人,一個在持弓手和弓之間,用來移動弓的位置和角度;一個在拉弓手和弦之間,用來釋放弦并發(fā)射弓。只要前面的瞄準工作做好之后,就會有個信號告訴伺服電機來實現(xiàn)發(fā)射工作。
看起來很簡單是吧?
別急,還是來看看下面比較難的瞄準工作吧,想要打造這樣的自動瞄準系統(tǒng),首先,需要做出來一個弓瞄準機器。
像下面這樣,只要握住把手后,弓就能在一定范圍內自動地調整相應的位置和角度。
但射箭和打一束激光可不一樣。首先箭的飛行軌跡不是一條直線,而是拋物線。而這條拋物線的彎曲形狀,也取決于發(fā)射的速度。速度越快,這條拋物線越接近于直線,反之越接近于拋物線。
另外的困難還是在于精確地計算和掌控時間,當拋出一個飛靶時,也許射出的箭離集中靶心只差了50毫秒的時間,而50毫秒僅相當于眨眼瞬間的1/3,所以必須要精確地計算好距離、發(fā)射角度、發(fā)射時間來做提前射擊。
沒錯,你會說只需利用小學三年級學到的數(shù)學物理知識,不就足以能建模發(fā)射出箭的拋物線方程了嘛。
看起來核心思想非常簡單嘛,但是,實際的設計和制造卻是一個很大的挑戰(zhàn)。
比如弓具體在調整位置和方向時用到了 Shane 親自打造的“鷹眼”系統(tǒng)。
這套“鷹眼”系統(tǒng)一共利用了八個攝像頭,來找到一個中心,告訴弓相對于目標的位置以及其他很多坐標。
可以看到上圖有一個小反光球,所有 8 個攝像機都在同一時間拍攝到它,這樣就能精確地來計算出小球的位置,這整個過程非常的快,一秒鐘能拍50幀。
這些小球叫做跟蹤球,被安裝在弓的前方和拉弓手的手持部件上。
小跟蹤球不止一個,所有的攝像機都會在同一時間拍攝到這些小跟蹤球,并給出50個關于每個球的位置更新。
這樣,系統(tǒng)就能分析出箭應該指向的角度,以及拉弓的力度,進而計算出箭射出后的拋物線。
Shane 聲稱自己寫了一個非?!昂唵巍钡某绦騺碛嬎氵@些數(shù)據(jù),由于代碼過于“簡單”,Shane 似乎羞于對此做詳細介紹。
Shane 試了試效果,按下系統(tǒng)啟動鍵,開始瞄準,發(fā)射!
結果非常棒!
額,會打到自己的臉。
而且,箭也沒法射中目標,每次都射到偏左上的位置。
怎么辦?
既然每次都偏左上,那就往右下調偏差就行啦!
沒有什么事情,是一行代碼搞不定的。
接下來,就是見證奇跡的時刻了。
Shane正式向妻子發(fā)起了挑戰(zhàn)。
比賽規(guī)則是:Shane 和他的妻子比賽三局,每人各射擊一箭,更準的人得一分。
結果是,Shane 一敗涂地。
Shane 不服氣,覺得還有改進的空間。
可是問題出在哪里呢?
沒錯,箭還是有些偏。
他覺得,還是代碼的問題。
在經(jīng)過一周的非常無聊的軟件開發(fā)和調試之后,全新的系統(tǒng)出來了。
這一次,他選擇了更難的任務,即以運動的靶子為目標。
弓已經(jīng)拉好準備發(fā)射,按下按鈕之后,計算機啟動“鷹眼”跟蹤系統(tǒng),每300毫秒發(fā)送一次數(shù)據(jù),更新所有物體的位置。
當計算機看到目標時,它會檢查目標是否以拋物線運動,然后計算出它應該將箭指向何處,來射中目標,這其中會考慮箭移動到那里的時間,和箭的拋物線路徑。
然后系統(tǒng)會開始調整弓的位置,隨著跟蹤數(shù)據(jù)的輸入不斷增加,弓會不斷地進行調整,以適應手的抖動。
之后當系統(tǒng)認為瞄準到了正確位置的時候,就會開始調整箭的角度。
然后,只要按下按鈕,箭就會發(fā)射出去。
咦?根本沒有射中。
再繼續(xù)改bug吧。
這時候,他的妻子已經(jīng)不耐煩了,厭倦了他一遍又一遍地說只需要幾分鐘,結果卻花費了幾個小時來修改一個bug。
怎么辦?陪妻子散步去嗎?
想多了。
沒見過技術宅?
他制造了一個自動彈射器,把妻子晾在一邊,然后盡情地自己玩耍。
在修改bug的過程中,他考慮了這些問題:為什么箭發(fā)射得太早?為什么箭發(fā)射得太晚?為什么靶子靜止不動的時候沒有擊中目標?為什么會擊偏?
盡管有這么多錯誤,但這只是時間問題。
現(xiàn)在,箭能擊中靜止不動的靶子了!
盡管還是不能擊中運動目標,但到目前為止,我們已經(jīng)非常接近最終的目標了。
箭確實可以依照設定的拋物線來飛行。
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)特約稿件,未經(jīng)授權禁止轉載。詳情見轉載須知。