Slime VR tracker DIY build
By Robert Russell
- 7 minutes read - 1335 wordsThese are my new VR trackers.
This DIY build of SlimeVR trackers can be assembled with (maybe*) no soldering.
If you’re like me and want to put together your own set of SlimeVR trackers, I’ll tell you about the parts I selected and show you my case design.
Parts
My part selection uses fewer parts than some others I’ve seen. The Adafruit feather microcontroller (MCU) boards often include a LiPo charger and “fuel gauge” IC. So I just connected an MCU board, an IMU breakout board, a battery, cables, and a power switch for each tracker. I also added a second IMU to each, sometimes called an aux tracker. Both the main IMU and the aux tracker (second IMU) are connected with a 4-pin Stemma QT/Qwiic cable.
All the electronics can be purchased from Adafruit. You need the MCU board, the IMU board, the cable to connect them, and a battery. My case design is published on Printables. You’ll also need some way to attach each tracker, like a 2.5cm (1") wide velcro strap.
Microcontroller
Selection: Adafruit ESP32-S3 Feather with 4MB Flash 2MB PSRAM - STEMMA QT / Qwiic
Alternates:
SlimeVR firmware is designed to run on the ESP32 and ESP8266 Espressif microcontrollers. The project recommends the very inexpensive Wemos D1. The firmware uses Arduino and Espressif libraries. So I wouldn’t expect to just build and run it on an RP2040 or some other MCU even if they have equivalent hardware capabilities. Similarly, I’d be cautious about the Adafruit ESP32-C6 Feather since the ESP32-C6 is a RISC-V core. It’s exciting, and maybe it will work fine, but I’d test one out before commiting.
The onboard peripherals are important too. The Adafruit Feather boards usually have a connector for a LiPo and built-in charge management. This is a huge time-saver when it comes to putting things together. Unfortunately the battery charge monitor IC isn’t supported in mainline SlimeVR firmware yet. I have a patch for the MAX17048 that seems to work though.
For the simplest option make sure your board has the antenna built-in (not a u.FL connector) and that the header pins are not installed. Look for a Stemma QT/Qwiic connector as well, most boards have one but it’s not universal.
Sparkfun carries plenty of ESP32 boards as well. I haven’t looked at them in as much detail but the same ideas apply. This SparkFun Thing Plus - ESP32-S3 looks like a nice option.
IMU board
Selection: Adafruit TDK InvenSense ICM-20948 9-DoF IMU
Alternates:
SlimeVR supports quite a few different IMUs. I landed on the Adafruit TDK InvenSense ICM-20948 breakout because the ICM-20948 seemed to have good performance and a long time between recalibrations. I haven’t tested that out myself yet. Adafruit also has a breakout for the BMO085 but their docs indicate that IMU may have I2C troubles that cause issues on the ESP32.
Most of my time so far has been spent building and designing so I haven’t actually used the ICM-20948 very much. I just didn’t see a lot of problems noted for it in the documentation. Maybe that just means fewer builders are using it, I don’t know.
Sparkfun also offers a similar breakout for the ICM-20948.
Aux IMU
Adding a second IMU of the same type is easy since the Stemma QT/Qwiic connectors are on every board. The ICM-20948 supports two I2C addresses, configurable by pins on the IC. It’s pretty easy to set the address but it could have been easier.
Both Adafruit and Sparkfun allow the address to be changed from 0x69 to 0x68 by soldering two pads together on the breakout board. I really wish they’d defaulted to 0x68 by connecting the pads. Then a user could cut the pads apart to change the address. It’s a lot easier to cut a trace with an exactoknife than it is to solder the two pads together since that needs a soldering iron. It is the only soldering required in this entire project.
Cables
The Feather MCU board is connected to the IMU with a 4-pin JST SH cable. I liked the 50mm length for that. The aux tracker has the same kind of connection but you’ll want a longer cable. I chose the 300mm length to connect the aux tracker. But I can’t stress enough that I really haven’t worn the trackers much yet so I can’t say how good a choice this is.
If you’d rather make up your own cables then you can get some 4-pin JST SH connctors and start crimping. It probably costs less and you can get the exact length you want. Crimping cables is not one of my strengths though.
Battery
Selection: Lithium Ion Battery - 3.7V 2000mAh
Alternates:
The single cell lipos from Adafruit in 1200mAh and 2000mAh both look like the right dimensions. I considered using an 18650 for a while but they’re tricky to source and a bit bulkier than these little packs. The big benefit of 18650 cells would be quick replacement. Technically you could swap out the little packs but they’re really not made for it like the big cylinders are. These little packs have a 2-pin JST-XH connector on them which matches the one on the Feather MCU boards. Very straightforward. Lots of vendors use this connector but if you get one somewhere else then check closely before connecting to be sure that the red (positive) and black (negative/ground) match what you expect - I don’t think it’s standardized.
Case
The main tracker case design has three parts. The aux IMU case is just one more little tray that you can put another IMU board in. It’s all designed in OpenSCAD using the wonderful BOSL2 library.
STL files and OpenSCAD sources are published on printables.com if you want to print or modify them. And if you want me to print them for you I might put them up on a Tindie shop soon too.
This design fits the exact parts I selected. It will need some tweaks to fit different ones, or you can probably cut off the plastic PCB mounting pins and stick your own boards down if you really wanted.
Why
SlimeVR is an awesome open source, open hardware project. I want to see SlimeVR succeed, along with more things like it, even if I’m not a really big VR participant right now.
The SlimeVR DIY guide shows what parts to buy and even helps you narrow down a really wide range of options. I really recommend reading that componnent guide if this is new to you. Users have different needs, constraints, and priorities when it comes to the number of VR trackers for their plans. Personally I’m motivated to make things that are easy to replicate and I have somewhat weak budget constraints when it comes to toys. Oh and also I have a lifetime of experience that includes embedded software, Linux, 3D printing, and I2C peripherals like these IMUs. So it wasn’t a big stretch to go off-script for my parts.
I sourced all the parts from Adafruit even though I have plenty of Wemos ESP32 devices in my parts bin. Adafruit has fantastic documentation, including board schematics, and also has a long history of building open source libraries. And lately I’ve really come to appreciate that multiple vendors put Stemma QT/Qwiic connectors on their boards. Breaking out I2C is easy but the benefit of using a simple connector with the same pins as other vendors simplifies projects massively. Sparkfun also offers a lot of similar boards with high quality, open documentation.
There are a lot of different kinds of software and hardware I’ve worked on over the years. But when it comes to SlimeVR I’m an outsider - I just think the project is cool. I haven’t really participated or talked to anyone connected to it so far. Maybe someone else has already created the same thing as I’ve done here, I have no idea. This particular idea tickled my curiosity and I’m enjoying playing with the parts and the firmware.