2013年10月27日 星期日

iPhone 5S 的 "重力門"


iPhone 5S 上市一段時間了,至今一機難求,尤其是 "土壕金" 更是讓許多 Fans 陷入瘋狂。可是沒過多久,就有人發現加速感應器存在重大問題,平時使用或許不會發現,但用在與重力相關、或是以移動手機為操控方式的應用程式或遊戲時,就會發現這個問題的嚴重性。

 "加速感應器" 是什麼呢?它與其他感應器 (如陀螺儀、距離感應器、電子羅盤,對岸翻成 "傳感器") 一樣,是一種小型的精密裝置,藉由內部的電容當作彈簧,以測量該裝置所處的環境受到哪些方向的外力 (參考資料)。"加速感應器" 在第一代 iPhone 問世時就已內建於其中,比如橫置畫面與直置畫面的切換就是藉由它來驅動,故也有人稱之為 "重力感應器",反正重力也是加速度的一種。

我曾在 "iOS device 的 "去實體化"" 一文中提及感應器的重要,而這也是 iOS device 可被應用在如此多領域的主要原因。感應器在做什麼?它們是電子裝置的五官,用來感應光、熱、位置、受力或行動狀態 ... 等,若一旦這種 "器官" 出了問題,就像人瞎了眼睛或聾了耳朵一樣,影響可是非常大的。上次在 Twitter 上看到推友分享了一篇相當不錯的新聞,其解釋了 iPhone 5S 加速感應器出問題的原因及解決方法,我就利用這個機會將其翻譯成中文。

================

為什麼 iPhone 5S 的加速感應器這麼爛?
Here's Why the iPhone 5S Accelerometer Is So Screwed Up (原文)

十分尷尬地,幾週前我們已經確定 iPhone 5S 的移動感應器的確存在問題,於是有些熱血的開發者開始研究問題所在,並發現它確實是硬體設計的缺陷,而且是 Apple 不小心忽視或刻意忽略的。如今,好消息是已經有了解決的方法,但不是來自於 Apple 的支援 (見後續的補充更新)。

iPhone 5S 的水平儀功能是以加速感應器達成的,根據 RealityCap 的開發者所言,這次事件發生的原因只是 Apple 更換了零件供應商而已。在 RealityCap 的官方網誌裡,CEO Eagle Jones 從 Clipwork 對 iPhone 5S 的拆解報告中,明確地指出始作俑者就是 Apple 將之前 iPhone 使用的 STMicroelectronics 加速感應器,換成 Bosch Sensortech 加速感應器。聽起來很像是技術宅比較硬體規格後所下的結論,但對於這次的分析異常地重要,因為這兩家的產品有著不同的規格。


Jones 解釋,像感應器這類精密的裝置主要是以兩種測量參數來判斷其精確度 -- "變異值" (Variance) 及 "傾向值" (Bias),前者可以告訴我們該感應器的讀值分布有多麼地靠近,而後者則是描述該裝置之讀值的恆定不準確性。在一封電子郵件裡,Jones 提及它的細節:

"這樣說吧,現在我們測量一個重力的強度,它的值應該是 9.81 m/s2
一個具有低傾向值、高變異值的感應器可能會輸出:9.85、9.75、9.81、9.90、9.79、9.77
一個具有高傾向值、低變異值的感應器可能會輸出:9.60、9.61、9.59、9.60、9.62、9.58"

================

Chris 註
其實上述的觀念在科學界就是 "準確度" (Accuracy) 及 "精密度" (Precision) 的差別,下面這張圖就可一目了然:


由此可知,原文中的 "Variance" 等同於 "Precision" 的比較,而 "Variance" 在量子力學及統計學上本來就是 "標準差" 的平方值:至於 "Bias" 則是 "Accuracy" 的指標,因為它代表一個數值與某數值 (常為中心數值、平均值或準確值) 的偏差程度或偏差的方向,在 P-N 二極體領域裡常常用到。

================

根據 RealityCap 的測量,以往的 ST 感應器與 iPhone 5S 用的 Bosch 感應器有著類似的變異值,但它們的傾向值規格可是大大地不同

"This is where we find the problem: the typical bias for the ST part is +/- 20mg, while the Bosch part lists +/-95mg. This almost 5x greater offset range is confirmed by our measurements, and is absolutely consistent with the failures being reported by users and the media. Specifically, a +/- 20mg offset range would translate to around a +/-1 degree accuracy range in tilt detection, and a +/-95mg offset translates to +/-5 degrees in tilt."
"這是我們發現的問題所在:ST 感應器一般的傾向值為 +/- 20 mg,但 Bosch 感應器的傾向值為 +/- 95 mg,這之中有著幾乎五倍的差距。我們的測量證實了這一點,而且與眾使用者及各大媒體所報導的質量問題完全一致。在此特別說一下,+/- 20 mg 的重力值偏差相當於傾斜 +/- 1 度的偏差,而 +/- 95 mg 的重力偏差相當於傾斜 +/- 5 度的偏差。"

這個結果如同先前的報導一樣,顯現出 iPhone 5S 整體的測量平衡出了問題,影響的層面從基本的水平度測量到玩賽車遊戲,可說是全方位的。

Jones 告訴我,Apple 可以以 "校正出廠設定值" 的方式對此硬體改動所產生的問題負責,但不知原因為何,Apple 似乎沒有這樣做。不過,這並不代表永遠無法解決,App 開發者可以自行加入額外的校正過程去補償新加速器的規格偏差。

"藉由在 App 內包入一個校正過程或許能解決這個問題,而這個 "過程" 可能是要求使用者放置他的 iPhone 5S 在不同的方位上,以測量出該感應器的傾向值。之後,該 App 再將感應器讀值與傾向值相減,即可得修正後的讀值。"

不過,對於每個受影響的 App 來說,其開發者都必須要自己解決這個問題,此舉無疑是非常痛苦的。像 RealityCap 團隊目前正在為了修正此問題而努力,且計劃在不久的數週內再發表一篇官方網誌談談他們近期的工作。

Apple 對此問題持續保持沉默。根據 Jones 所言,Apple 可以對每支剛出廠的 iPhone 5S 新機進行校正,但 Apple 似乎沒有這樣做,表示 Apple 認為不值得花這個時間。

最令人失望的是,Apple 似乎選擇了比較差的零件,且又沒有下功夫進行補償的動作。理論上,Apple 可以為自家的 App 推出一套校正的步驟,且將 sample code 提供給開發者 .... 最少他們能做到這樣,但若至今沒有任何動靜,那短期之內可能都不會有 Apple 官方的支援了。

20131018 Update:
事後 RealityCap 與我們連繫,說他們已經釋出用以校正的 sample code, 但是很不幸地,事情似乎不如他們所希望地那麼簡單,因為 Clipwork 認出的加速感應器從一開始就不是正確的!所以若出現來自硬體或軟體的重大問題,其原因也不見得來自於感應器的傾向值規格。嗯,真相依然不明。

================

Chris 註:
事實上,Apple 近期釋出的 iOS 7.0.3 已經修正了這個問題,至於原因為何呢?呵呵,Apple 及 Bosch 雙方都不可能 (不敢) 有人出來說明的。


由於工作關係,這一篇真的拖了太久,而網上已經有不少關於這方面的討論,讓我很猶豫這篇寫到一半的文章是否要繼續寫下去 ...... 不過最近本站實在太乾了,故還是硬著頭皮把文章完成 (囧)。

回到本文,不管 "重力門" 之前被炒得多大,其實它都不算是很嚴重的缺陷,很多人甚至完全沒有察覺,因為它只對 "需精密控制" 重力或加速度的 App 有影響,沒用到的話也就沒差,若是 iPhone5S 的主打功能,像是 Touch ID 或相機出包才是值得關注的災難。總而言之,反正 Apple 官方已經負起責任解決了問題,其原因及解法也就不那麼重要了,大家不用擔心,安心購買 iPhone 5S 吧!

2 則留言: