# 自製 SlimeVR Tracker > [SlimeVR](https://github.com/SlimeVR) 是一個開源的硬體/軟體專案,利用IMU為VR提供全身追蹤(FBT)。不需要Lighthouse基地台,讓VR全身追蹤變得更加經濟實惠。 此篇文章紀錄了我製作 SlimeVR Tracker 的過程,如果你也正在考量加入全身追蹤的行列的話,不妨也來嘗試自製自己的 Tracker 吧! ## 在開始之前 ### SlimeVR適合我嗎? 什麼樣的人適合購入/自製 SlimeVR Tracker 呢? 如果你是: * 一體機用戶 (或非 Lighthouse 追蹤的用戶) * 正在打算入手 VR 的人 * ~~想蓋著被子在 VRChat 睡覺的人~~ 那麼你就是最適合入手 SlimeVR 的人了! ### 優缺點比較 | 類型 | 精確度 | 偏移 | 續航 | 價格(NTD) | |:----------:|:------------------:|:-----------------------:|:-----------------:|:-----------------------------------------:| | IMU | 1~10cm[^imu精確度] | 隨時間累加 | **15h**[^imu續航] | **6k** | | Lighthouse | **<1cm** | **無**[^lighthouse漂移] | 7.5h | 13k(Vive Tracker\*3) + 13k(Lighthouse\*2) | 從上面的表格可以看出,IMU 類型的 Tracker 雖然跟 Lighthouse 類型比較起來便宜許多,但也並非沒有它的缺點。[^比較表格] 對於已經擁有 Lighthouse 基地台的人來說,直接買 Vive/Tundra Tracker 也許會是比較好的選擇。 [^比較表格]: 比較表格 <https://www.crowdsupply.com/slimevr/slimevr-full-body-tracker#comparisons> [^imu精確度]: 依據你的製作、固定方式、校準及電磁環境而有所不同。 [^imu續航]: 以1200mAh的鋰聚合物電池為例 [^imu漂移]: [^lighthouse漂移]: 在沒有擋到 Tracker 的情況下 ### 選擇製作數量 準備好要製作 SlimeVR Tracker 之前,首先要決定製作多少個,以下是官方所建議的幾種配置。[^imu數量] * Lower-Body Set (5 IMUs) - 置於胸部與大小腿。下半身的肢體動作會有追蹤問題,不建議。 * Core Set (5+1 IMUs) - 比起 Lower-Boby Set 多出了一個臀部 Tracker,能更準確的追蹤躺下、坐下及彎腰等動作。 * Enhanced Core Set (5+3 IMUs) - 比起 Core Set 多出兩個腳背 Tracker,能夠追蹤腳掌的動作。如果常坐下或躺下的話建議可以選這個配置。 * Full-Body Set (7+3 IMUs) - 比起 Enhanced Core Set 多出兩個手肘 Tracker,能更準確的反應出手臂的位置。適合給想要跳舞或增加沉浸感的人。 * Deluxe Tracker Set (16 IMUs) - 不需要任何 VR 設備就能追蹤,適合做Mocap用途。 如果只是要在VRChat使用的話,6~11個 Tracker 就能滿足你的需求。 :::info :information_source: **關於 Tracker 數量** SlimeVR Tracker **≠** SteamVR Tracker,SlimeVR 利用 IMU 資料計算出骨架位置,並在特定部位產生虛擬 SteamVR Tracker,Server 中可以設定要使用多少個。 VRChat 最多支援11點追蹤 (HMD + 手把\*2 + 8個額外 SteamVR Tracker)[^VRC最大追蹤數], ![SteamVR Tracker設定.png](https://hackmd.io/_uploads/HkYxzXU7T.png) ::: [^VRC最大追蹤數]: https://docs.vrchat.com/docs/full-body-tracking ## 所需零件 這邊我選擇的是以 SlimeVR 官方建議的 Enhanced Core Set (5一般+3外接)所列出的,請依照你所需的數量做調整。 [^imu數量]: 官方建議配置 <https://docs.slimevr.dev/slimevr101.html#how-many-trackers-do-you-need> :::info 價格僅供參考。依照你所在的地區可能會有所不同。另外東西可以多買幾個,有些店家販售的零件 [DOA](https://zh.wikipedia.org/zh-tw/%E5%88%B0%E8%B2%A8%E5%8D%B3%E6%90%8D) 率蠻高的。 ::: | 名稱 | 說明 | 數量 | 價錢(NTD)/個 | 備註 | |:---------------------:|:----------------------------------------:|:-----------------:|:------------:|:---------------------------------------------:| | Wemos D1 mini | ESP-8266EX 開發板 | 5 | ≈108 | 推薦v3與v4版 | | BMI160 | 六軸慣性感測器 | 8 | ≈76 | GY-BMI160 | | QMC5883L | 三軸磁場感測器 | 8 | ≈77 | GY-273, *非必要*[^羅盤] | | TP4056 | 鋰電池充電板 | 5 | ≈6 | | | 103450 | 1800mAh鋰聚合物電池 | 5 | ≈120 | 1800mAh其實有點Overkill | | Perfboard | 玻纖板/洞洞板 | 8 | ≈8 | >50x50mm | | PP塑膠盒(大) | 一般Tracker | 5 | ≈9 | 55x55x28mm | | PP塑膠盒(小) | 外接Tracker | 3 | ≈8 | 40x40x18mm | | 塑膠六角柱(長) | 固定玻纖板用 | 20 | ≈1 | M3\*16+6mm | | 塑膠六角柱(短) | 固定玻纖板用 | 12 | ≈1 | M3\*6+6mm | | 塑膠螺絲 | 固定玻纖板用 | 32 | ≈1 | M3\*6mm | | 塑膠螺母 | 固定玻纖板用 | 32 | ≈0.4 | M3 | | 軍用寬版綁腿 | 手臂/腿部固定帶 | 2\*2條[^綁腿數量] | ≈70/包 | | | 軍用窄版綁腿 | 腳部固定帶 | 1\*2條[^綁腿數量] | ≈40/包 | | | 強拉力鬆緊帶 | 胸部/腰部固定帶 | 4碼 | ≈40/碼 | 寬7cm 厚1mm | | 鬆緊帶 | 胸部固定帶吊帶 | 2碼 | ≈26/碼 | 寬5cm | | JST2.0連接器 | 外接Tracker接頭 | 3 | ≈1 | 公座 4Pin | | PH2.0單頭線 | 外接Tracker線, 腳掌到腳踝x2 胸部到臀部x1 | 3 | ≈15 | 含JST母座 4Pin 腳30cm 胸>50cm(或買兩條接一起) | | 180k 電阻 | 電量偵測用 | 5 | | 1%誤差 | | 1N5817 Schottky二極體 | 安全措施 | 10 | ≈0.5 | 1N5818/1N5819也OK | | 單芯線 | 跳線 | | | 30/28 AWG | [^羅盤]: BMI160+QMC仍然在試驗階段,根據電磁環境的好壞也會有不同的影響。https://docs.slimevr.dev/diy/imu-comparison.html#what-determines-a-poor-magnetic-environment 總成本(含固定帶): **一般Tracker ≈500元/個 外接Tracker ≈270元/個** 和 SlimeVR 官方比較起來 | 配置 | SlimeVR 官方 | DIY | |:-------------------------------:|:-----------------:|:-------:| | Core Set (5一般+1外接) | ≈6.6k (190+18USD) | ≈2.6k | | Enhanced Core Set (5一般+3外接) | ≈8k (235+18USD) | ≈3.3k | | Full-Body Set (7一般+3外接) | ≈10k (295+18USD) | ≈4.3k | 可以看到自製的話可以省下不少錢![^imu差異] 雖然我拿來跟官方比較,但其實現在想買也買不到,截至現在(2024.01)訂單也已經排到2024.05了。 [^imu差異]: 官方使用的IMU為BNO085,比起這邊用到的BMI160貴上不少,相對也比較不容易漂移。 [^綁腿數量]: 一組兩條哦,不要買太多。 ## 製作過程 都東西都到齊就能開始製作了哦!圖多注意。 ### 電路製作 :::warning :warning: **以下內容會當作你已經擁有** * 電烙鐵、焊錫、尖嘴/斜口鉗等手工具 * 麵包板、杜邦線等電路測試材料 * 一點基本的電子焊接技術 (非必要,焊接其實沒那麼難) * ~~你寶貴的休息時間~~ ::: #### 裁切電路板 首先將玻纖板裁切成能夠塞進盒子的大小,用美工刀反覆在表面切出一條凹槽後用鉗子折斷就行。並在四個角落鑽直徑3mm的洞。 接著將D1 mini和感測器焊上針腳,擺放到玻纖板上確認各個零件的位置。 ![裁切](<https://hackmd.io/_uploads/B1zglenyp.jpg> =50%x)![天線凹槽](<https://hackmd.io/_uploads/BkjDxxnJ6.jpg> =50%x) :::info :information_source: **建議** 可以將會擋到D1 mini天線的部分切除,Wifi收訊會比較好。 ::: 常見的BMI160有兩種,左邊的這種上面印刷的方向是錯誤的。建議將BMI160與QMC擺放成一樣的方向,後面在刷韌體時就不用額外在重新定義三軸方向。 ![BMI160方向](<https://hackmd.io/_uploads/Bye7bvHg6.png> =50%x)![擺放位置](<https://hackmd.io/_uploads/rytCVPSg6.jpg> =50%x) #### 開孔&固定 為玻纖板的四個角鎖上六角柱,放進盒子內用奇異筆在要開口的位置畫上記號,分別是: * 充電孔 * 開關 * JST接口 * 裁縫固定帶的孔 * 六角柱螺絲孔 ![開孔位置](https://hackmd.io/_uploads/B1x2bl2Jp.jpg) 開完孔後就先縫上固定帶會比較好作業 (雖然用縫的穩定性很好,但強烈建議可以用其他方便拆下來清洗的方式來固定) ![縫上固定帶](<https://hackmd.io/_uploads/HJe7GlhJT.jpg> =50%x)![縫上固定帶](<https://hackmd.io/_uploads/r1gmfx2y6.jpg> =50%x) #### 測試零件 有兩種刷韌體的方式,網頁或VSCode。這邊只是為了先測試零件所以選用[網頁版](<https://slimevr-firmware-tool.futurabeast.com/>)。 韌體版本選最新的穩定版,板子我這邊用的是D1 mini所以選`BOARD_WEMOSD1MINI`,IMU的部分選`IMU_BMI160`。 接著填入WIFI名稱與密碼後把D1 mini插上電腦,選擇相對應的COM Port就能刷韌體了。 ![網頁截圖](https://hackmd.io/_uploads/rk0dAVZlp.png) 完成後應該就能在[SlimeVR Server](https://github.com/SlimeVR/SlimeVR-Installer/releases/latest/download/slimevr_web_installer.exe) 看到Tracker了,依照接線圖先在麵包板測試零件,確認陀螺儀跟加速度儀都有正常運作。 ![接線圖](<https://hackmd.io/_uploads/rygoZK9k6.jpg>) ![麵保板測試](<https://hackmd.io/_uploads/SkkJ7g31p.jpg>) 確認線路沒問題就能開始焊接了 #### 焊接 先焊電阻及二極體等小零件,在焊上其他零件。 由於空間有限正下方又是電池,這邊我把焊完的針腳都剪短並貼上耐熱膠帶絕緣。 ![焊接過程1](<https://hackmd.io/_uploads/rky_Ven1T.jpg> =50%x)![焊接過程2](<https://hackmd.io/_uploads/BkjvNe3ya.jpg> =50%x) ![焊接過程3](<https://hackmd.io/_uploads/H1P_Nehy6.jpg> =50%x)![焊接過程4](<https://hackmd.io/_uploads/HJ2ONeny6.jpg> =50%x) 焊完後可以插上D1 mini的USB測試一下,OK的話就能接上電池了,這邊我選擇直接焊上去。 ![焊上電池](https://hackmd.io/_uploads/ByYC0pAy6.jpg) 電池背膠就看電池塞進去後會不會晃動,建議是都黏一下。手邊剛好有3M的雙面膠就拿這個用了。 ![電池背膠](https://hackmd.io/_uploads/S1t00TCJp.jpg) 接著鎖上螺絲 ![](https://hackmd.io/_uploads/BkBubRRJa.jpg) 這樣就完成1個一般Tracker了 ![](<https://hackmd.io/_uploads/SJVO-AAy6.jpg> =50%x)![](<https://hackmd.io/_uploads/ByrdZR0ka.jpg> =50%x) ![](https://hackmd.io/_uploads/HyCdWRA1a.jpg) 接著外接Tracker也是類似的步驟,但只需要焊感測器與連結線就好,接法請看接線圖AUX Sensor的部分。 ![](<https://hackmd.io/_uploads/Bkrk7rWlT.jpg> =33%x)![](<https://hackmd.io/_uploads/BJHkXHWgp.jpg> =33%x)![](<https://hackmd.io/_uploads/HkrkQHZg6.jpg> =33%x) ### 韌體設定 由於SlimeVR還在開發階段中,這篇文章所寫的內容可能很快就會過時了,因此建議你還是以[官方Docs](https://docs.slimevr.dev/firmware/)所寫的內容為準。 #### 建立環境 首先,在終端機/命令提示字元(按下`Win鍵`+`R`後輸入cmd),執行以下命令來安裝VSCode和git。 這邊我就簡略的寫Windows的安裝方式,你如果用Linux的話...應該不用我教吧w ``` winget install Git.Git winget install Microsoft.VisualStudioCode ``` 接著安裝PlatformIO,開啟VScode左邊選單找到延伸模組搜尋`PlatformIO IDE`並安裝。 ![](https://hackmd.io/_uploads/Bkyk9kebT.png) 完成後就能先關掉了。 然後在你想要的位置Clone一份[SlimeVR/SlimeVR-Tracker-ESP](https://github.com/SlimeVR/SlimeVR-Tracker-ESP)下來。 複製連結並git clone下來 ![](https://hackmd.io/_uploads/ryvWRJx-a.png) 你想要放置檔案的目錄點右鍵選單>在終端機中開啟>輸入 ``` git clone <連結放這裡> cd SlimeVR-Tracker-ESP code . ``` 右下角簽出選最新版的標籤 ![](https://hackmd.io/_uploads/Skm9pyrWp.png) ![](https://hackmd.io/_uploads/BJ756yBb6.png) #### 更改韌體設定 總共有4個檔案要更改 **platformio.ini** ![platformio.ini](https://hackmd.io/_uploads/B174C1Bbp.png) 去掉開頭的註解`;`,改成要連線到的Wifi名稱與密碼 **src/defines.h** ![defines.h](https://hackmd.io/_uploads/r1-V3yHbT.png) `IMU_ROTATION`的部分要注意一下,請依照你擺放的方向設定。 ![IMU方向](https://hackmd.io/_uploads/rJA9fwbx6.png) **src/defines_bmi160.h** ![defines_bmi160.h](https://hackmd.io/_uploads/BkUGWlHbp.png) **src/debug.h** ![debug.h](https://hackmd.io/_uploads/BJjPbxBWT.png) 這裡設定的是要不要使用6軸(3軸加速度+3軸陀螺儀)模式,那因為我們有用到額外的3軸羅盤(總共9軸),所以設定成`false`。將來如果電磁環境有問題想關閉的話,請改回`true`。 #### 刷入韌體 確認Tracker電源 **關閉** 後,將D1 mini插上USB線連到電腦後按下`➔`就會開始刷入了。 ![](https://hackmd.io/_uploads/HkdTXeHbT.png) :::danger :warning: **注意** 刷韌體過程中請勿拔除USB線 ::: ### 校正 IMU :::info :information_source: **在開始前請先將Tracker打開** 由於IMU會受溫度影響,我們也沒有做溫度校正(還在開發中且步驟非常麻煩)。在開始做以下步驟前請先打開Tracker至少十分鐘,確保溫度上升到一個穩定點 ::: 一次校正一顆(外接的也是)。只需要做一次就好,重刷韌體不會把校正資料刪除。 :::warning 以下步驟只適用於BMI160,其他的IMU請參考官方Github的readme。 ::: * **Step 0: 將電源關閉後朝下放置Tracker。** 或按D1 mini上的reset。 > D1 mini的LED會長亮。 當LED長亮時翻回正面,代表確認進入校正模式。等幾秒鐘,不要移動Tracker。 * **Step 1: 陀螺儀校正:LED會閃爍3次,表示開始校正陀螺儀。** > 如果你的Tracker會漂移,很有可能就是這步驟沒有正確的校正到。 確保放置在平穩的表面上,不要去移動/觸碰到。 * **Step 2: 加速度儀校正:LED會閃爍6次,表示開始校正加速度儀。** > 這步驟會要求你**將Tracker的6個面朝上放置**,放置每個面時確保Tracker不會移動,不要去觸碰或移動並等待三秒鐘。 > 它會利用重力來當作參考點,自動偵測Tracker平穩下來後才會開始校正。 > 如果沒辦法在不碰到Tracker的情況下固定Tracker,建議可以放置在牆角靠著牆面,不需要到非常完美。 **每個面錄製完成時會快速閃爍2次** 將Tracker旋轉90或180度,一直旋轉直到6個面都錄製完成。 最後一個面錄製完成時LED會熄滅,代表加速度儀校正完成。 * **Step 3: 電子羅盤校正:LED會快速閃爍,表示正在校正電子羅盤。** 就如同手機的電子羅盤校正一樣,拿著Tracker反覆進行8字形繞轉約20秒。 ![電子羅盤校正](https://hackmd.io/_uploads/SJOAFl6bT.gif) 結束後會看到LED發出1長亮,表示正在退出校正模式。過幾秒後就會看到Tracker重新連上SlimeVR Server了。 ## 接續文章 > [SlimeVR Server設定](https://hackmd.io/@bluenk/HkHBjrWv6)