Skip to the content
4 layers46 × 36.5 mmTundraIOExpansion, the printed circuit board in 3D

I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

Size
46 × 36.5 mm
Copper layers
4
Thickness
1.6 mm
Parts
89
Nets
158
Pads
504
Tracks, vias
140, 28
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
20 Aug 2023
Updated
15 Mar 2024

Overview

TundraIOExpansion is an open-source printed circuit board by ras-marques, from the ras-marques/ImmersiveGloves repository on GitHub, published under the MIT licence. It is a 4-layer board of 46 × 36.5 mm with 89 parts on 158 nets, routed with 140 tracks and 28 vias.

It is built around the RP2040, W25Q32JVSSIQ and HE6206-18NR, with the ICM-20948 and BSS138BKS,115-VB among its other parts. Its parts include 34 resistors, 29 capacitors, 7 ICs, 2 crystals and 1 connector. It belongs with the ESP32, RP2040 and RISC-V boards of this library.

Main components

5

README

README.md

ImmersiveGloves

I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

https://github.com/ras-marques/ImmersiveGloves/assets/6479742/4af1af61-4261-44ce-aa3d-e45de0df7709

Check the full presentation on youtube https://www.youtube.com/watch?v=5OSYiYDkOE8

Hand tracking works with curl and splay on all fingers with 1 IMU on each finger. There is a joystick that is enabled by touching the thumb to the index finger and B, A and System buttons are available by touching the thumb to the middle, ring and pinky fingers respectively.

Overall repository state

Instructions are incomplete. The files for the main board and IMU boards are updated. There is only code for the right glove. 3D printing files need tweaking.

Necessary equipment and skills

The hardest part in this project is making the boards. I am currently not supplying boards, so you will need to order them from somewhere.

The boards are 4 layer and have fine pitch components. Making the PCBs at home is out of the question, but you can order them from JLCPCB, PCBWAY, etc.

I assembled the components on my glove by hand using a stencil to dispense solder paste and used a hot air gun for reflowing. A hot plate is better.

If you don't have a 3d printer, you could order the models from somewhere or ask a friend.

Currently everything is glued to the glove fabric, you could use hot glue or super glue.

The pre-crimped JST wires are necessary to make the assembly process easier, more below.

Cost analysis

A realistic ballpark for cost is around 250€ per pair of gloves with component and shipping cost and assuming you already have all the tools like a 3d printer, and soldering tools.

You can refer to https://github.com/ras-marques/ImmersiveGloves/blob/main/CustomPCBs/cost_analysis.ods for the complete BOM, but in summary the current cost is described below:

  • 4€/pair times 50 = 200€: Cost to make enough boards for exactly 50 pairs of these gloves
  • 170€/pair: Cost to source enough components and some spares for a pair of these gloves
  • 130€/pair times 50 = 6500€: Cost to source enough compoents for 50 pairs of these gloves

Tracking method

Why base these gloves around the Tundra Tracker? Using a Tundra Tracker and an expansion board avoids having to deal with batteries, since the Tundra Tracker can power everything. Also, the tracker takes care of transmiting the data from the gloves to the computer wirelessly. Two RP2040's take care of acquiring the data from the 6 inertial sensors, processing it and delivering it to the tracker.

This project is for people that already have a laser tracked VR setup with base stations and ideally for people using Tundra Trackers for full body tracking. That said, if you don't have the Tundra Trackers yet, there are some options:

On top of this, if you don't have base stations, those go for 159€ from valve and it is better to have 2.

End goal for these gloves

  • The Tundra Tracker is amazing, it's the smaller tracker available and it even supports sending sensor data to the computer. This is the ultimate tracker for these gloves, but I want to make these more accessible for everyone, so I will want to support more tracking methods, begining with using your available controllers just like LucidVR does. This will probably imply a redesign of the main board to make it possible to power it using an external battery.
  • I started this project with the Slime VR BNO085 boards and have since designed a custom BNO085 that is as small as I could make it. I didn't even include a JST connector and wires are soldered directly to it. To make it easier to assemble though, I am considering including the connector in my next IMU boards. I also want to explore using a cheaper IMU chip like the BMI270 with and without a magnetometer.
  • My gloves have finger mobility and a low profile as top priorities, so I have no plans for implementing physical buttons unless absolutelly necessary nor force feedback, but vibration haptics are possible if small enough. I do encourage you to do so and share your own version of these gloves!

Steps to make the gloves:

3D Print the mount points for the tracker

  • There are 3D printing files available in the 3DPrintingFiles folder of this repo. This is not a one size fits all kind of mount point. I measured the curvature of the back of my hand with a 3D printed matrix of screw inserts, so it fits me perfectly. I will show my process in the future so you can do the same if you want.

Prepare the Tundra Tracker

  • Download the files from this repository.
  • Open folder {Steam}\steamapps\common\SteamVR\tools\lighthouse\bin\win32 ({Steam} is probably C:\Program Files (x86)\Steam on your system, but who knows).
  • Copy "ImmersiveGlovesLeft.json" and "ImmersiveGlovesRight.json" from this repository into this folder.
  • Disconnect every vr device you have from your computer, including the dongles that receive data from the trackers. Using a USB cable, connect just one Tundra Tracker to your computer.
  • Write "cmd" on the address bar to open a Command Line inside {Steam}\steamapps\common\SteamVR\tools\lighthouse\bin\win32.
  • Write "lighthouse_console.exe" on the Command Line and press return.
  • You should see only one device connected, if there are more, make sure to disconnect them, this is important. Write "downloadconfig backup.json" to store a backup of the Tundra Tracker config file that is stored inside the tracker.
  • Store the config of "ImmersiveGlovesRight.json" to the tracker with "uploadconfig ImmersiveGlovesRight.json" from the command line. This will be the tracker for your right glove.
  • Disconnect the tracker and connect another one.
  • Store the config of "ImmersiveGlovesLeft.json" to the tracker with "uploadconfig ImmersiveGlovesLeft.json" from the command line. This will be the tracker for your left glove.
  • Finally install the ImmersiveGloves driver by copying the folder driverProject/immersive_gloves_controller/build/immersive_gloves_controller on the repository to {Steam}\steamapps\common\SteamVR\drivers\

Flash the RP2040 board (files not yet available!)

  • Download the latest stable version of circuitpython version from here https://circuitpython.org/board/raspberry_pi_pico/
  • Connect your expansion board to the Tundra Tracker and then to your PC using the included USB board connected to USB1.
  • With the Tracker OFF, press the button on the USB board and while it is pressed, power up the Tundra Tracker, this will let you put the RP2040 in the expansion board in bootloader mode.
  • A window should appear on your PC showing the new drive that is emulated by the RP2040. Copy the circuitpython file you downloaded earlier into this folder. The RP2040 will reboot automatically.
  • Like before, a new window should appear on your PC showing another drive but now with a different structure. This is where you will put your program that processes the sensor data and sends it to the computer. Just copy the contents of the rp2040Firmware/usb1 folder into the root of this new folder that appeared.
  • Repeat the steps above for the second RP2040 mcu by using USB2 and the files in rp2040Firmware/usb2

Drivers

  • We are using the OpenGloves driver so we can easily get inputs working with all apps that support the Index Controllers, which are most of them. So download it from steam: https://store.steampowered.com/app/1574050/OpenGloves/
  • Copy the contents of driverProject/immersive_gloves_controller/build/immersive_gloves_controller in this repo to C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers or wherever you have your SteamVR app installed.
  • Be sure to enable both opengloves and immersive_gloves_controller addon by going to SteamVR settings, Startup/Shutdown tab and clicking Manage SteamVR Add-Ons. These two should be toggled on. Everytime SteamVR shuts down due to an error, it is likely one or both will be toggled off, so check this if something is not working.
  • You should calibrate the rotation and position offsets on the OpenGloves configuration panel. I did that manually since I don't have buttons on the glove yet to trigger the callibration interface. Pre-calibrated files may be available in the future with instructions on how to use them.

Important resources that made this project possible

Tundra Labs have a repo with some documentation on how to use their development board https://github.com/tundra-labs/rp2040_examples

CircuitPython allowed me to easily get the inertial sensors working without me having to program everything from scratch, you can learn more about this here https://learn.adafruit.com/adafruit-9-dof-orientation-imu-fusion-breakout-bno085/python-circuitpython

Finally Functional's Open VR Driver Tutorial that was a great introduction on how OpenVR inputs work https://www.youtube.com/watch?v=LzEIOBnbC8k

OpenVR repository has lots of documentation, it takes a while to figure out the parts that are important for this project, but it's worth the effort https://github.com/ValveSoftware/openvr

danwillm helped me get this thing started by pointing me in the right direction, telling me what technologies to use to speak with the tracker and openvr.

Contributing workflow

Here’s how I suggest you go about proposing a change to this project:

  1. Fork this project to your account.
  2. Create a branch for the change you intend to make.
  3. Make your changes to your fork.
  4. Send a pull request from your fork’s branch to our main branch.

Using the web-based interface to make changes is fine too, and will help you by automatically forking the project and prompting to send a pull request too.

Parts

89
QtyValueFootprintReferences
2810kResistor_SMD:R_0201_0603MetricR11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26 +12
14100nCapacitor_SMD:C_0402_1005MetricC2, C3, C4, C5, C6, C8, C9, C18, C20, C22, C24, C25, C26, C27
8Conn_01x04Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalFINGER1, FINGER2, FINGER3, FINGER4, FINGER5L1, FINGER5R1, USB1, USB2
7BSS138BKS_115footprints:SOT363T1, T2, T3, T4, T5, T6, T7
62.2uCapacitor_SMD:C_0402_1005MetricC1, C7, C10, C17, C23, C28
41kResistor_SMD:R_0402_1005MetricR2, R7, R9, R10
433pCapacitor_SMD:C_0402_1005MetricC11, C12, C19, C21
3100nCapacitor_SMD:C_0201_0603MetricC15, C16, C29
212.000MHzCrystal:Crystal_SMD_2520-4Pin_2.5x2.0mmY1, Y2
21uCapacitor_SMD:C_0201_0603MetricC13, C14
2200Resistor_SMD:R_0402_1005MetricR1, R8
2RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1, U2
2W25Q32JVSSPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU5, U6
1Conn_01x08Connector_JST:JST_SH_SM08B-SRSS-TB_1x08-1MP_P1.00mm_HorizontalFingerAux1
1Conn_01x25footprints:25PIN FRONT FLIP 0.6mm PITCH AYF332535AJ1
1HE6206-18NRPackage_TO_SOT_SMD:SOT-23-3U4
1ICM-20948Sensor_Motion:InvenSense_QFN-24_3x3mm_P0.4mmU7
1MOUDLE-SEEEDUINO-XIAO-ESP32C3footprints:MOUDLE14P-SMD-2.54-21X17.8MM_THU3

More from ras-marques/ImmersiveGloves

8
  • 4 layers46 × 36.5 mmTundraIOExpansion, the printed circuit board in 3D

    TundraIOExpansion

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    59 parts29MIT
  • 4 layers46 × 36.5 mmTundraIOExpansion, the printed circuit board in 3D

    TundraIOExpansion

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    58 parts29MIT
  • 4 layers6.7 × 13.4 mmBMI160-and QMC5883L Second Bone, the printed circuit board in 3D

    BMI160-and QMC5883L Second Bone

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    14 parts29MIT
  • 4 layers7 × 10.1 mmICM-20948 First Bone, the printed circuit board in 3D

    ICM-20948 First Bone

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    14 parts29MIT
  • 2 layers5 × 8.1 mmBMI270-and QMC5883L, the printed circuit board in 3D

    BMI270-and QMC5883L

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    12 parts29MIT
  • 4 layers8.1 × 8.8 mmBNO085 0x4A Board, the printed circuit board in 3D

    BNO085 0x4A Board

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    12 parts29MIT
  • 4 layers7.3 × 12.7 mmMulti imu, the printed circuit board in 3D

    Multi imu

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    8 parts29MIT
  • 4 layers4.4 × 6.6 mmICM-20948 I2C 1V8 levels, the printed circuit board in 3D

    ICM-20948 I2C 1V8 levels

    ras-marques/ImmersiveGloves

    I want to share how I am making vr gloves using 2 Tundra Trackers, 2 interface boards and 12 inertial sensors.

    7 parts29MIT

Similar boards

  • 2 layers62 × 42 mmJoystickPCB, the printed circuit board in 3D

    JoystickPCB

    WheelchairSeniorDesign/PCBs

    The PCB designs for the wheelchair for our senior design project

    21 parts1
  • 2 layers155.1 × 122 mmKiCad Main, the printed circuit board in 3D

    KiCad Main

    mgiesen/Magic-Tabmount

    Der "Magic Tabmount" ist eine smarte Wandhalterung für das iPad (Generation 5 bis 9). Durch ein integriertes Magnetsystem kann das iPad mit einem Handgriff an der Wand befestigt oder wieder entfernt werden.

    55 parts1
  • 4 layers45.5 × 69.8 mmAero, the printed circuit board in 3D

    Aero

    LtBrain/aero

    A control system board/robot for Science Olympiads Robot Tour. It will have 2 brushed motor drivers, at least 2 encoder inputs, and support for ultrasonic and TOF sensors.

    53 partsMIT
  • 6 layers111 × 111 mmLed panel, the printed circuit board in 3D

    Led panel

    antmicro/programmable-led-panel

    LED matrix controlled with iCE40 FPGA or RP2040 MCU for benchmarking and integration of video systems

    315 parts2Apache-2.0
  • 2 layers85 × 50 mmDrone PCB, the printed circuit board in 3D

    Drone PCB

    dezash123/drone

    much of this was learned through trial and error, and looking back, kinda embarrassing, but I'll keep this around since it did work

    73 parts1
  • 2 layers34.6 × 38.4 mmPcbchallenge1, the printed circuit board in 3D

    Pcbchallenge1

    wlatif-cmyk/100daysofprojects

    100 days of 100 projects ;)

    19 parts8
  • 2 layers78 × 60 mmIce viz, the printed circuit board in 3D

    Ice viz

    muni-works/vcad

    BRep CAD kernel in Rust/WASM

    44 parts442Apache-2.0

Questions

How big is the TundraIOExpansion PCB?

It measures 46 × 36.5 mm and has 4 copper layers, 1.6 mm thick.

What parts does the TundraIOExpansion use?

89 parts, built around the RP2040, W25Q32JVSSIQ, HE6206-18NR and ICM-20948. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the TundraIOExpansion KiCad files?

From the ras-marques/ImmersiveGloves repository on GitHub, at the commit this page was made from: the board is CustomPCBs/InDevelopment/tundraIOExpansion/tundraIOExpansion.kicad_pcb and its schematic CustomPCBs/InDevelopment/BMI160-and-QMC5883L_Second_Bone/BMI160-and-QMC5883L_Second_Bone.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the TundraIOExpansion design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).