![[SlimeVR] BMI220/BMI270 Tracker](http://image.lceda.cn/oshwhub/f99c9764428141fa89b402e6107102d3.png)
[SlimeVR] BMI220/BMI270 Tracker
简介
基于ESP12F(ESP8266)+BMI270/220实现的SlimeVR Tracker。
简介:基于ESP12F(ESP8266)+BMI270/220实现的SlimeVR Tracker。开源协议
:CERN Open Hardware License
(未经作者授权,禁止转载)描述
什么是SlimeVR?
SlimeVR是一套开放的硬件传感器和开源软件,可以用于虚拟现实中的全身跟踪(FBT)。
该项目旨在创建一个可定制、修改和破解的软硬结合系统,以适应用户的需要。
基于官方过于垃圾简陋的原理图绘制:

芯片介绍:
- ESP-12F(ESP8266): ESP-12F模块是一款基于ESP8266芯片的Wi-Fi模块,由安信可科技开发。这个模块集成了Tensilica L106超低功耗32位微型MCU,支持80MHz和160MHz主频,并且支持RTOS操作系统。ESP-12F模块支持IEEE802.11 b/g/n协议和完整的TCP/IP协议栈,用户可以通过它为设备添加联网功能或构建独立的网络控制器。
- BMI270: Bosch BMI270超低功耗智能惯性测量单元 (IMU) 专门设计用于各种可穿戴应用,大大提高了加速度计性能。BMI270包含直观的手势、情景和活动识别功能,并集成了针对腕戴式设备专门进行优化的即插即用计步器。该IMU也非常适合其他类型的可穿戴设备,如耳戴式设备、智能服装、智能鞋、智能眼镜和脚踝带。
官方推荐BMI085,由于成本过高,便采用BMI270。
原本可用DCDC芯片代替AMS1117作为降压模块,不想画,遂放弃。
本项目仅代表电路可运作并可用于SlimeVR,由于预算不足,所以不能最低的官方Lower-Body Set要求(5 Trackers),所以具体的全身联动暂时不能测试。
该项目仅用于验证电路可行性。
Tracker可穿戴外壳已在绘制。
关于BMI270/BMI220:
官方推荐BMI270为峰值温度260℃的回流焊:

但实测380℃热风枪吹也没问题,但需要尽快操作完成,不然高温会烤坏传感器。
如果购买BMI270,请认准深圳优信电子科技有限公司:链接传送门。
当然你可以从其他店铺购买BMI270,但有可能实际收到的是BMI220。
目前已知淘宝上绝大部分卖家卖的都是BMI220而非270,他们甚至都不知道自己卖的其实是BMI220。
那么我们该如何分辨BMI270和BMI220?
从外观上看,并没有任何方法判断,因为这俩长得一毛一样。
唯一能判断的是焊接上去后打开串口控制台查看输出,在sensor detect步骤时传感器会报硬件地址错误(BMI270为0x24,BMI220为0x26):

Bosch论坛也有人被这俩货坑过(原贴地址:BMI270 CHIP ID reported as 0x26 instead of 0x24):

如果摸到了BMI220,除了换货还有另外一条路,在下面的固件编译中会提到。
关于固件编译:
编译步骤请自行完成。
编译教程请看官方文档:SlimeVR Firmware Guide。
如果看不懂,请善用翻译软件。
defines.h自动生成参数如下图所示:

如果你手上的sensor非常幸运的摸到了BMI220,那么恭喜你:目前这个传感器并没有任何官方适配。
我个人从coreboot/google-ec找到了BMI220的Firmware,并基于官方BMI270相关代码魔改了一个BMI220出来。
首先按照官方教程设置好相关环境并克隆SlimeVR-Tracker-ESP源代码。
接着下载附件中的bmi220.h和bmi220fw.h,并放在源代码根目录/src/sensors/softfusion/drivers下。
在源代码根目录/src/consts.h第44行末尾换行并插入以下代码:
BMI220,
源代码根目录/src/consts.h第65行末尾换行并插入以下代码:
#define IMU_BMI220 SoftFusionBMI220
源代码根目录/src/sensors/SensorManager.cpp第40行末尾换行并插入以下代码:
#include "softfusion/drivers/bmi220.h"
源代码根目录/src/sensors/SensorManager.cpp第59行末尾换行并插入以下代码:
using SoftFusionBMI220 = SoftFusionSensor;
源代码根目录/src/sensors/sensor.cpp第111行末尾换行并插入以下代码:
case ImuID::BMI220:
return "BMI220";
最后按照上面的编译设置教程设置好defines.h,最后把该文件的第一行改成:
#define IMU IMU_BMI220
即可正常使用BMI220。
目前只有一个已知bug:在tracker校准环节CRT步骤可能返回全0值(疑似不正常),但使用没啥问题。
官方那边我也提交了PR:PR传送门,如果有了解嵌入式编程的大佬可以帮忙看看。
关于使用:
完成实物图:

SlimeVR Server配置教程:官方文档传送门。
焊接完成并开机时,会长闪一下,然后会短暂的闪烁几次,后面这几次代表当前的Tracker工作情况。
| 闪烁次数 | 含义 |
|---|---|
| 1 | Tracker准备完成,可以使用。 |
| 2 | Tracker正在尝试连接SlimeVR Server。 |
| 3 | Tracker正在尝试连接WiFi。 |
| 5 | Tracker传感器出错,请检查传感器状态。 |
第一次使用前需要插电激活电池管理:

当Power开关拨动至右边时,蓝灯亮起,电源通电并开始工作:

当Boot开关拨动至下边时,插入电脑并打开Tracker电源,Tracker会进入Boot烧录模式:

当插入电源时,指示灯灯闪烁代表电池开始充电,指示灯四颗全亮则代表充电完成:

当轻击左上角的RST键时,ESP-12F会自动重置:

以下是一个通过usb配对Tracker的简单案例。
首先用usb插上电脑并打开Tracker开关(Tracker不需要进入Boot烧录模式):

然后打开SlimeVR软件,进入配置向导:

接着设置WiFi(ESP-12F仅支持链接2.4G WiFi):

当软件显示“USB追踪器已连接到服务器时”,右边会显示已连上软件的Tracker。接着点击“所有的追踪器都连接好了”:

在IMU校准教程开始前,请把Tracker放置在平坦的桌面上,准备好后点击“我已经把追踪器放在桌子上了”:

接着会进行佩戴Trakcer状态下的校准动作,由于此处我只是简单的测试一下BMI270是否工作正常,所以在此处可以点击右上角“ESC”退出设置向导:

点开传感器详细信息,测试一下传感器是否工作正常。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










