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的旋转方向
#define IMU_ROTATION [IMU的旋转方向 如DEG_90]
IMU旋转方向的配置,箭头朝向天花板

选择使用的开发板类型
#define BOARD [开发板名称]
设置此选项的目的是配置连接到开发板的引脚
使用 ESP8266 可将开发板名称配置为 BOARD_NODEMCU 或 BOARD_WEMOSD1MINI
使用 ESP32 可将开发板名称配置为 BOARD_WROOM32
对于其他需要自定义连接开发板引脚的,可将其设置 BOARD_CUSTOM ,之后自行定义引脚信息
设置监测电池电量选项
此选项设置电池电量监测,可选
#define BATTERY_MONITOR [电池监测模式]
如需电量监测,在没有千欧电阻的情况下,请将电池监测模式设置为 BAT_INTERNAL,此时跟踪器将只能在电池电量不足时提示并使LED重复闪烁。
在有千欧电阻的情况下,请将电池监测模式设置为 BAT_EXTERNAL,此时可以监测电池电量百分比。
#define BATTERY_SHIELD_RESISTANCE [电阻大小,单位千欧]
在电池监测模式设置为 BAT_EXTERNAL 时才需要设置,推荐使用180千欧电阻,如果没有则修改为现有的千欧电阻数值。

关于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
对于国内网络用户,建议不要使用在线安装器下载SlimeVR Server,使用Github下载时可以将网络切换为移动数据流量或自行搜索通过更改host文件将域名指向Github服务器IP地址
或者下载UP已经上传至阿里云盘的(不能保证是最新版):
https://www.aliyundrive.com/s/mha9LEKvzK2 提取码: 5r4c
选择任意版本的SlimeVR下载,点击 slimevr.exe 启动即可使用

关于磁力计校准
对于包含磁力计的IMU: MPU-9250, BMI160以及MPU6050+QMC5883L方案,在第一次刷入固件后需要进行磁力计校准,否则刷入固件后在旋转X/Y/Z轴数据表现为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
首先追踪器关机,将追踪器翻面,开启追踪器,等待1秒后翻起并放在平面上等待几秒,LED会从常亮变成频闪,此时以8字形动作面向不同方向缓慢旋转追踪器约30秒,校准完成后,LED会熄灭,下次开机时,不必再进行校准,校准值将被保存,供下次使用。
具体磁力计校准教程可以参考这个视频:www.bilibili.com/video/BV1314y1b7Fz

[MPU+QMC5883L]关于磁力计与六轴芯片间的朝向代码修改与追踪器固件配置
对于MPU+QMC5883L方案,需要对磁力计与六轴芯片之间的朝向相关代码进行修改
根据官方文档说明,请确保配置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轴对齐,芯片的摆放位置具体如下图所示,此为对齐版方案的摆放位置,请确保芯片摆放位置正确

自行修改代码,可以随意调整芯片间的摆放位置
首先,请确保已安装VSCode及PlatformIO插件,以及Git工具,具体安装请参考官方文档:https://docs.slimevr.dev/firmware/setup-and-install.html
附:MPU+QMC5883L方案固件: https://github.com/deiteris/SlimeVR-Tracker-ESP
安装好后在VSCode终端输入命令下载固件,根据使用的磁力计芯片下载指定的分支:
使用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已经存到阿里网盘的: https://www.aliyundrive.com/s/mha9LEKvzK2 提取码: 5r4c
由于需要确认各个芯片的XYZ轴的位置及方向,请在修改前准备好MPU系列、QMC5883L及MPU9250数据手册,具体请自行谷歌搜索,也可参考下图
MPU6000/6050/6500(左) 及 QMC5883L三轴磁力计(右) 的XYZ轴方向:

MPU9250的六轴(左,三轴陀螺仪及三轴加速度) 及 三轴磁力计(右) 的XYZ轴方向:

确认MPU芯片与磁力计间的映射关系
由于使用的是MPU芯片+磁力计的方案作为MPU9250的替代,MPU9250本身包含有六轴(三轴陀螺仪、三轴加速度)传感以及三轴磁力计,其六轴与磁力计间的XYZ轴映射关系如上图所示,映射关系为Y X -Z,此映射关系十分重要,将在修改代码时用到,具体得到此映射关系的方法如下:
以MPU9250为例,首先以六轴传感(左图)的XYZ三轴为基准,每个轴分别映射到磁力计(右图)对应的轴,具体来说,左图X轴映射到右图的Y轴,左图Y轴映射到右图的X轴,左图Z轴映射到右图的-Z轴,映射关系即可得出为:Y X -Z
下面为UP已经写好的MPU+QMC5883L方案根据芯片间摆放位置得出的映射关系,以供参考
轴对齐时MPU芯片与磁力计间的映射关系为:X Y Z
请参考无需修改代码方案的图例,此为芯片的摆放位置
芯片并排放时MPU芯片与磁力计间的映射关系为:Y -X Z
芯片的摆放位置如下图所示:

其他情况下MPU芯片与磁力计间的排放位置得出的映射关系


修改代码
在得到映射关系后,即可开始修改代码,首先在项目中找到文件 SlimeVR-Tracker-ESP/src/senors/mpu9250sensor.cpp,我们需要对此文件进行修改,
我们需要修改的是与磁力计Magnetometer相关的代码,与MPU芯片与磁力计间的映射关系相关的代码,现以芯片轴对齐时MPU芯片与磁力计间的映射关系X Y Z为例,说明如何修改
第一处,位于原始版本的第277行,原始版本的映射关系为Y X -Z,我们需要将其修改为X Y Z

下面是修改好的

第二处,位于原始版本的第312行,此处的修改因为UP没有弄清楚实现原理所以较为玄学

上图是映射关系为Y X -Z情况下的内容
对于映射关系为X Y Z的,需要修改为下图的内容

对于其他的映射关系,如果不清楚如何修改可以尝试任意一种排列方式,之后再实际验证是否可行
注:f_mag_x/y/z没有正负号,共有6种可能的情况
第三处,位于原始版本的第312行,同第一处,只需修改映射关系即可。

下面是修改好的

第四处,位于原始版本的第381行(可能后续有变化),同第一处,只需修改映射关系即可。

下面是修改好的


关于TP4056充放电保护模块
TP4056的保护电路第一次使用时需要5V电压充电才可激活,如果电池断接则需要重新充电激活保护电路,在设计电路时建议不要将开关设计到电池正负极线路上

关于ESP系列单片机GPIO接口
如需增加外设,请在设计电路前,务必仔细查询GPIO接口能否使用,不影响单片机下载和运行模式的选择以及正常运行时需要拉低或拉高的接口
关于贴片式肖特基二极管
安装时注意电学符号的三角尖端与贴片横线端对齐
