Expand description

An experimental skeletal model for full body tracking (FBT) in VR.

Documentation for contributors is available here. For documentation without internal implementation details, please run cargo doc --all --no-deps --open

Overview

This crate provides a well documented, high performance, and very robust model of a human’s pose for the purpose of full body tracking in VR. The role of this crate is to take in partially complete human pose data, often from SlimeVR or Vive trackers, and compute the missing pose data. This gives applications a way of accessing that pose data.

This is accomplished via a simple forward-kinematics solver, which also accounts for positional constraints from positional trackers, if any are present.

This crate was both inspired by and written for use in SlimeVR, and hopes to be a better version of the current skeletal model implemented in the Java server.

Tracker support

Typically, there are two types of full body trackers:

  • “3DoF”: Any tracker with only rotational data. Example: SlimeVR trackers
  • “6DoF”: Any tracker with both positional and rotational data. Example: Vive trackers.

As long as you can provide position and/or rotation for some trackers, this crate should do the rest.

Scope

This crate is only the skeletal model, and does not handle networking or anything else necessary for actually reading tracker data. It also does not expose any networked way of accessing the outputs of the skeleton.

This enables applications to then build on top of this crate, either through a Rust implementation of the SlimeVR server, or by calling this library via any of the various language bindings we hope to add soon.

We hope that this will enable the SlimeVR community, as well as other full body tracking solutions, to build on our work.

Documentation on Internals

For an explanation of the design and mathematics of the skeletal model, see the skeleton module.

For an explanation of the mathematical conventions adopted in the codebase, see the conventions module.

Re-exports

pub use crate::bone::BoneMap;
pub use crate::skeleton::Skeleton;

Modules

Describes skeletal bones and their relationships.
This module describes the mathematical conventions we adopt throughout the skeletal model.
newtypes 🔒
Contains trivial “newtype” wrappers that add increased type safety.
The skeleton, and its representation as a graph data structure.

Enums

Describes the various types of bones in the skeleton.

Type Definitions