2014/10/14


先前那個測速球啊.. 萊恩大兵做了一些拋接實驗, 要來估算球的速度.


[前情提要]

萊恩大兵發願要做一顆能測量投手球速的棒球. 這期間做了不少研究與實驗, 可參考這幾篇文章知道來龍去脈.

自動報球速的棒球, (2) 第一版試作品 (Arduino, NanoWii, microSD, MPU6050)
自動報球速的棒球, (1) 概念與雛形 (Arduino, MPU-6050, HC-06)

=-=-=-=-=-=-=- 分隔線 -=-=-=-=-=-=-=-=

先講一下這次實驗的設定條件.

(1) MPU6050 的 accel sensitivity 是設在 +/- 8g.
參考這篇的計算, 
+/-16g 的靈敏度只能測到最快 ~90km/hr 的速度, 
+/- 8g 最快只有 63km/hr, 
以拋接壘球來說, 這範圍應該是夠用的.

(2) 速度計算公式
MPU6050 吐出來的數據 (ax/ay/az) 值會在 -32768 ~ 32767 之間. 
將它轉成 g 值的公式則為 g = (N * accel sens) / 32767, 
而 accel sens 設為 +/- 8g, 1g = 9.8 m/s^2, 因此, 
加速度 a = (N * 8) * 9.8 / 32767 m/s^2

(3) ax/ay/az sampling rate
MPU6050 會每 10ms 丟出一筆 (ax, ay, az) 數據出來. 程式會將數據即時寫到 MicroSD 卡上.

(4) 分析工具
這部份是手工作業. 萊恩大兵將數據匯入 Google Doc 試算表, 再來做計算, 分析與圖表.

=-=-=-=-=-=-=- 分隔線 -=-=-=-=-=-=-=-=

直接說結果~ 計算出來的速度值, 很受偏移值與施力過程的取樣點數的影響. 看圖說明: 下圖裡面有四次的拋接, 萊恩大兵估算的速度為...

第一段: 30.3 km/hr

第二段: 80.6 km/hr (這數字已超過量測上限)

第三段: 53 km/hr


第四段: 76.1 km/hr (這數字已超過量測上限)


=-=-=-=-=-=-=- 分隔線 -=-=-=-=-=-=-=-=

這邊要講實驗細節與分析方法了.

首先, 萊恩大兵做了一些實驗, 來了解各不同情境下, ax/ay/az 三軸的數據線型, 各是長得什麼模樣?

(1) ax 向前, ay 水平, az 和地心引力同向, 持球, 手舉高


(2) ay 向前, ax 水平, az 和地心引力同向, 持球, 手舉高


(3) az 向前, ay 水平, ax 和地心引力同向, 持球, 手舉高


(4) az 向前, ax 水平, ay 和地心引力同向, 持球, 手舉高


(5) ax 向前, ay 水平, az 和地心引力同向, 持球, 手平伸
* (5) 和 (1) 很類似, 差別只有手持球的高度 


(6) ay 向前, ax 水平, az 和地心引力同向, 持球, 手平伸
* (6) 和 (2) 很類似, 差別只有手持球的高度


(7) ay 向前, ax 水平, az 和地心引力同向, 持球, 手平伸
* (7) 和 (3) 很類似, 差別只有手持球的高度


(8) ay 向前, ax 水平, az 和地心引力同向, 持球, 手平伸
* (8) 和 (4) 很類似, 差別只有手持球的高度


(9) 是從 (1) 變成 (5)


(10) 是從 (2) 變成 (6)


(11) 是從 (3) 變成 (7)


(12) 是從 (4) 變成 (8)


(13) 手拿球, 左手丟右手


(14) 兩人拋接, 壘球投手距離


=-=-=-=-=-=-=- 分隔線 -=-=-=-=-=-=-=-=

根據這些線型, 萊恩大兵歸納出來的計算方法是:

[1] 找出整個出手施力的過程
以 (14) 的第一段拋接為例, 原數據線圖如下:


肉眼判斷, 這個出手施力的過程會是 (496th ~ 571th), 線圖為:


[2] 扣掉 ax/ay/az 三軸的平均偏移值來做 normalize 
繼續以 (14) 的第一段拋接為例, 偏移值就拿 (396th ~ 495th) 的數據做平均. 再將上一段的圖做 normalize. 新的線圖為:


調整過後, 會發現 ax/ay/az 比較靠近 x 軸了.

[3] 再針對 normalized 的線圖去積分出三軸的分速度, 最後再總合出總速度.
算出的最高末速為 ~30.3 km/hr

實際計算時, 發現會有幾個變數..

(a) 平均偏移值不好計算
繼續以 (14) 的第一段拋接為例. 同一張線圖, 抓施力前的 126 筆數據 (370th ~ 495th) 來做平均偏移值, 最後計算出來的速度為 37.4 km/hr, 和先前的 30.3 km/hr 相比, 就差了快 7 km/hr.
取前 126 筆數據做平均偏移值

算出的最高末速為 ~37.4 km/hr

(b) 施力過程的取樣點總數
肉眼看線圖是可以分辨出 持球靜止/施手出力/球飛行/球進捕手手套 的段落. 但是, 要從數據找個規則, 精確抓出施力的過程就不容易了. 10ms 一筆數據, 100 筆就是一秒鐘了. 取多取少, 算出來的速度值會差很多.

施力過程取樣 106 筆數據


算出的最高末速為 ~38 km/hr


=-=-=-=-=-=-=- 分隔線 -=-=-=-=-=-=-=-=

檢討.. 該抓多少筆數據來作施力的過程與計算平均偏移值呢?

來算一下. 利用 V^2 = Vo^2 + 2aS 的公式來反推.
壘球投手拋球, 持球抬臂到出手, 
球走的軌跡大約 1.5m.
球的初速為 0 m/s.


a = 2g 時, 末速 V = 9.39 m/s 或是 33.81 km/hr, 施力時間會是 0.319s 或是 319ms.
a = 3g , 末速 V = 11.5 m/s 或是 41.41 km/hr, 施力時間會是 0.261s 或是 261ms.
a = 4g , 末速 V = 13.28 m/s 或是 47.81 km/hr, 施力時間會是 0.226s 或是 226ms.
a = 5g , 末速 V = 14.85 m/s 或是 53.46 km/hr, 施力時間會是 0.202s 或是 202ms.
a = 6g , 末速 V = 16.27 m/s 或是 58.57 km/hr, 施力時間會是 0.184s 或是 184ms.
a = 7g , 末速 V = 17.57 m/s 或是 63.25 km/hr, 施力時間會是 0.171s 或是 171ms.

也就是.. 球速慢一點話, 應該抓 32 筆數據, 球速快一點則抓 18 筆數據. 先前幾次的計算, 都抓到 60 筆數據, 看來是抓太多了.

重新計算 (14) 的四段拋接球速, 都抓 25 筆數據來計算, 會得到速度值為:

第一段: 37.44 km/hr 



第二段: 37.6 km/hr



第三段: 42.8 km/hr



第四段: 44.51 km/hr



這一輪的算出來的速度值, 看起來比較合理了. 至於準不準, 就得另外拿測速槍做比對了.

這次的實驗進展就這些, 總結一下, 這次遇到的幾個問題:

(a) 量測的精度不夠
MPU6050 每 10ms 吐一筆數據, 對付 34 km/hr 的速度, 也僅能抓到 32 筆數據. 若球速再高一點, 能抓到的數據變少, 相對誤差就會變大了.
所以像 (13) 的圖, 球飛行時, 數據是直線, 就是量測精度不夠造成的. 

(b) 需要有個好方法來決定數據線圖裡, 哪邊是施力開始? 哪邊又是施力結束? 而且這方法是要能編寫成程式來執行的.

(c) MPU6050 的量測範圍不夠. 

(d) 不確定這些量測數據, 有無需要過一遍卡爾曼濾波?

(d) 球殼太脆弱, 才只是拋接壘球而已, 球殼骨架就斷掉了.





(2014/10/16, 更新) 這篇文章在臉書上得到不少朋友的迴響, 擷圖如下.

[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 零組件篇, (1) 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, 零組件篇, (2) 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, 零組件篇, (3) 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)

自動報球速的棒球


CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, 用 beacon 控制開關的枱燈
藍色小鋪一起來做, 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)
藍色小鋪一起來做, 藍牙枱燈專案實作 (下) (Bluetooth, CC2540)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock


實作, 電容感應音樂樹

0 意見:

張貼留言