SlimeVR全身追蹤制作踩坑與注意事項


OSHW開源鏈接:https://oshwhub.com/catcolia/SlimeVRquan-shen-dui-zong-qi-MPU

1. SlimeVR 官方文檔:https://docs.slimevr.dev/index.html
2. SlimeVR ESP 固件:
官方固件: https://github.com/SlimeVR/SlimeVR-Tracker-ESP
MPU+QMC5883L方案固件:
https://github.com/deiteris/SlimeVR-Tracker-ESP (下載分支為 qmc-mag-new 或 hmc-mag)
瀏覽器在線上傳追蹤器固件: https://slimevr-firmware-tool.futurabeast.com/
3. SlimeVR Server 下載:
Win64: https://github.com/SlimeVR/SlimeVR-Server/releases/latest/download/SlimeVR-win64.zip
Mac: https://github.com/SlimeVR/SlimeVR-Server/releases/latest/download/SlimeVR-win64.zip
Win在線安裝器(不推薦): https://github.com/SlimeVR/SlimeVR-Installer/releases/latest/download/slimevr_web_installer.exe
4. 磁力計校準參考: www.bilibili.com/video/BV1314y1b7Fz
5. SlimeVR Server與追蹤器固件阿里云盤下載: https://www.aliyundrive.com/s/mha9LEKvzK2 ? 提取碼: 5r4c

追蹤器固件配置與上傳
目前有兩種方式可以上傳固件,使用VSCode的PlatformIO插件上傳或使用瀏覽器在線上傳
使用瀏覽器在線上傳固件: https://slimevr-firmware-tool.futurabeast.com/
配置固件
官方文檔提供選項自動生成配置文件:https://docs.slimevr.dev/firmware/configuring-project.html#configuring-definesh-automatically
在配置好一系列選項后
請將追蹤器固件項目文件夾下 /src/defines.h 文件替換為生成的 defines.h
或者將生成配置信息拷貝粘貼到 defines.h
手動填寫 defines.h 配置文件
以下參考官方文檔:https://docs.slimevr.dev/firmware/configuring-project.html
選擇使用的IMU
#define IMU [你使用的IMU名稱]
IMU名稱:
IMU_BNO080
IMU_BNO055
IMU_MPU9250
IMU_MPU6500
IMU_MPU6050
IMU_BNO086
IMU_ICM20948
IMU_BMI160
配置IMU的旋轉(zhuǎn)方向
#define IMU_ROTATION [IMU的旋轉(zhuǎn)方向 如DEG_90]
IMU旋轉(zhuǎn)方向的配置,箭頭朝向天花板

選擇使用的開發(fā)板類型
#define BOARD [開發(fā)板名稱]
設(shè)置此選項的目的是配置連接到開發(fā)板的引腳
使用 ESP8266 可將開發(fā)板名稱配置為 BOARD_NODEMCU 或 BOARD_WEMOSD1MINI
使用 ESP32 可將開發(fā)板名稱配置為 BOARD_WROOM32
對于其他需要自定義連接開發(fā)板引腳的,可將其設(shè)置 BOARD_CUSTOM ,之后自行定義引腳信息
設(shè)置監(jiān)測電池電量選項
此選項設(shè)置電池電量監(jiān)測,可選
#define BATTERY_MONITOR [電池監(jiān)測模式]
如需電量監(jiān)測,在沒有千歐電阻的情況下,請將電池監(jiān)測模式設(shè)置為 BAT_INTERNAL,此時跟蹤器將只能在電池電量不足時提示并使LED重復(fù)閃爍。
在有千歐電阻的情況下,請將電池監(jiān)測模式設(shè)置為 BAT_EXTERNAL,此時可以監(jiān)測電池電量百分比。
#define BATTERY_SHIELD_RESISTANCE ?[電阻大小,單位千歐]
在電池監(jiān)測模式設(shè)置為 BAT_EXTERNAL 時才需要設(shè)置,推薦使用180千歐電阻,如果沒有則修改為現(xiàn)有的千歐電阻數(shù)值。

關(guān)于SlimeVR Server下載慢,下載失敗的問題
SlimeVR Server 下載:
Win64: https://github.com/SlimeVR/SlimeVR-Server/releases/latest/download/SlimeVR-win64.zip
Mac: https://github.com/SlimeVR/SlimeVR-Server/releases/latest/download/SlimeVR-win64.zip
Win在線安裝器 不推薦: https://github.com/SlimeVR/SlimeVR-Installer/releases/latest/download/slimevr_web_installer.exe
對于國內(nèi)網(wǎng)絡(luò)用戶,建議不要使用在線安裝器下載SlimeVR Server,使用Github下載時可以將網(wǎng)絡(luò)切換為移動數(shù)據(jù)流量或自行搜索通過更改host文件將域名指向Github服務(wù)器IP地址
或者下載UP已經(jīng)上傳至阿里云盤的(不能保證是最新版):
https://www.aliyundrive.com/s/mha9LEKvzK2 ? 提取碼: 5r4c
選擇任意版本的SlimeVR下載,點擊 slimevr.exe 啟動即可使用

關(guān)于磁力計校準
對于包含磁力計的IMU: MPU-9250, BMI160以及MPU6050+QMC5883L方案,在第一次刷入固件后需要進行磁力計校準,否則刷入固件后在旋轉(zhuǎn)X/Y/Z軸數(shù)據(jù)表現(xiàn)為0/0/0
官方文檔并未說明磁力計的校準方式,但在 Github庫 SlimeVR-Tracker-ESP中有所記錄:
Sensor calibration
It is generally recommended to turn trackers on and let them lay down on a flat surface for a few seconds. This will calibrate them better.
Some trackers require special calibration steps on startup:
MPU-9250, BMI160
Turn them on with chip facing down. Flip up and put on a surface for a couple of seconds, the LED will light up.
After a few blinks, the LED will light up again
Slowly rotate the tracker in an 8-motion facing different directions for about 30 seconds, while LED is blinking
LED will turn off when calibration is complete
You don't have to calibrate next time you power it on, calibration values will be saved for the next use
首先追蹤器關(guān)機,將追蹤器翻面,開啟追蹤器,等待1秒后翻起并放在平面上等待幾秒,LED會從常亮變成頻閃,此時以8字形動作面向不同方向緩慢旋轉(zhuǎn)追蹤器約30秒,校準完成后,LED會熄滅,下次開機時,不必再進行校準,校準值將被保存,供下次使用。
具體磁力計校準教程可以參考這個視頻:www.bilibili.com/video/BV1314y1b7Fz

[MPU+QMC5883L]關(guān)于磁力計與六軸芯片間的朝向代碼修改與追蹤器固件配置
對于MPU+QMC5883L方案,需要對磁力計與六軸芯片之間的朝向相關(guān)代碼進行修改
根據(jù)官方文檔說明,請確保配置IMU為IMU_MPU9250.?
If you're using an MPU+QMC5883L, you would set your IMU as
IMU_MPU9250
. Bear in mind, you need to be using the QMC firmware for this to work, as the main firmware does not support the MPU+QMC5883L.
請觀察IMU芯片上的圓點位置,用于辨別芯片方向,圓點通常表示芯片第一引腳位置
無需修改代碼的方案
如果不愿自行修改,可以
使用瀏覽器在線配置并上傳,瀏覽器在線配置并上傳追蹤器固件:https://slimevr-firmware-tool.futurabeast.com/ ? ?固件版本為 tianrui233/qmc-axis-aligned-en 的追蹤器固件
或使用VSCode的PlatformIO插件自行編譯上傳:https://github.com/tianrui233/SlimeVR-Tracker-ESP-For-Kitkat
此方案需要兩個芯片對齊,對齊指的是芯片的XYZ軸對齊,芯片的擺放位置具體如下圖所示,此為對齊版方案的擺放位置,請確保芯片擺放位置正確

自行修改代碼,可以隨意調(diào)整芯片間的擺放位置
首先,請確保已安裝VSCode及PlatformIO插件,以及Git工具,具體安裝請參考官方文檔:https://docs.slimevr.dev/firmware/setup-and-install.html
附:MPU+QMC5883L方案固件: ?https://github.com/deiteris/SlimeVR-Tracker-ESP
安裝好后在VSCode終端輸入命令下載固件,根據(jù)使用的磁力計芯片下載指定的分支:
使用QMC5883L請選擇qmc-mag-new分支,使用如下命令下載
git clone -b qmc-mag-new https://github.com/deiteris/SlimeVR-Tracker-ESP.git
使用HMC5883L請選擇hmc-mag分支,使用如下命令下載
git clone -b hmc-mag https://github.com/deiteris/SlimeVR-Tracker-ESP.git
注:如果下載慢或失敗請嘗試使用移動流量,或直接下載UP已經(jīng)存到阿里網(wǎng)盤的: https://www.aliyundrive.com/s/mha9LEKvzK2 ? 提取碼: 5r4c
由于需要確認各個芯片的XYZ軸的位置及方向,請在修改前準備好MPU系列、QMC5883L及MPU9250數(shù)據(jù)手冊,具體請自行谷歌搜索,也可參考下圖
MPU6000/6050/6500(左) 及 QMC5883L三軸磁力計(右) 的XYZ軸方向:

MPU9250的六軸(左,三軸陀螺儀及三軸加速度) 及 三軸磁力計(右) 的XYZ軸方向:

確認MPU芯片與磁力計間的映射關(guān)系
由于使用的是MPU芯片+磁力計的方案作為MPU9250的替代,MPU9250本身包含有六軸(三軸陀螺儀、三軸加速度)傳感以及三軸磁力計,其六軸與磁力計間的XYZ軸映射關(guān)系如上圖所示,映射關(guān)系為Y X -Z,此映射關(guān)系十分重要,將在修改代碼時用到,具體得到此映射關(guān)系的方法如下:
以MPU9250為例,首先以六軸傳感(左圖)的XYZ三軸為基準,每個軸分別映射到磁力計(右圖)對應(yīng)的軸,具體來說,左圖X軸映射到右圖的Y軸,左圖Y軸映射到右圖的X軸,左圖Z軸映射到右圖的-Z軸,映射關(guān)系即可得出為:Y X -Z
下面為UP已經(jīng)寫好的MPU+QMC5883L方案根據(jù)芯片間擺放位置得出的映射關(guān)系,以供參考
軸對齊時MPU芯片與磁力計間的映射關(guān)系為:X Y Z
請參考無需修改代碼方案的圖例,此為芯片的擺放位置
芯片并排放時MPU芯片與磁力計間的映射關(guān)系為:Y -X Z
芯片的擺放位置如下圖所示:

其他情況下MPU芯片與磁力計間的排放位置得出的映射關(guān)系


修改代碼
在得到映射關(guān)系后,即可開始修改代碼,首先在項目中找到文件 SlimeVR-Tracker-ESP/src/senors/mpu9250sensor.cpp,我們需要對此文件進行修改,
我們需要修改的是與磁力計Magnetometer相關(guān)的代碼,與MPU芯片與磁力計間的映射關(guān)系相關(guān)的代碼,現(xiàn)以芯片軸對齊時MPU芯片與磁力計間的映射關(guān)系X Y Z為例,說明如何修改
第一處,位于原始版本的第277行,原始版本的映射關(guān)系為Y X -Z,我們需要將其修改為X Y Z

下面是修改好的

第二處,位于原始版本的第312行,此處的修改因為UP沒有弄清楚實現(xiàn)原理所以較為玄學(xué)

上圖是映射關(guān)系為Y X -Z情況下的內(nèi)容
對于映射關(guān)系為X Y Z的,需要修改為下圖的內(nèi)容

對于其他的映射關(guān)系,如果不清楚如何修改可以嘗試任意一種排列方式,之后再實際驗證是否可行
注:f_mag_x/y/z沒有正負號,共有6種可能的情況
第三處,位于原始版本的第312行,同第一處,只需修改映射關(guān)系即可。

下面是修改好的

第四處,位于原始版本的第381行(可能后續(xù)有變化),同第一處,只需修改映射關(guān)系即可。

下面是修改好的


關(guān)于TP4056充放電保護模塊
TP4056的保護電路第一次使用時需要5V電壓充電才可激活,如果電池斷接則需要重新充電激活保護電路,在設(shè)計電路時建議不要將開關(guān)設(shè)計到電池正負極線路上

關(guān)于ESP系列單片機GPIO接口
如需增加外設(shè),請在設(shè)計電路前,務(wù)必仔細查詢GPIO接口能否使用,不影響單片機下載和運行模式的選擇以及正常運行時需要拉低或拉高的接口
關(guān)于貼片式肖特基二極管
安裝時注意電學(xué)符號的三角尖端與貼片橫線端對齊
