Skip to main content

Recurrent Inertial Graph-based Estimator (RING)

RING provides a pluripotent, problem-unspecific plug-and-play IMT solution that, in contrast to conventional IMT solutions, eliminates the need for expert knowledge to identify, select, and parameterize the appropriate method. RING's pluripotency is enabled by a novel online-capable neural network architecture that uses a decentralized network of message-passing, parameter-sharing recurrent neural networks, which map local IMU measurements and nearest-neighbour messages to local orientations. This architecture enables RING to address a broad range of IMT problems that vary greatly in aspects such as the number of attached sensors, or the number of segments in the kinematic chain, and even generalize to previously unsolved IMT problems, including the challenging combination of magnetometer-free and sparse sensing with unknown sensor-to-segment parameters. Remarkably, RING is trained solely on simulated data, yet evaluated on experimental data, which indicates its exceptional ability to zero-shot generalize from simulation to experiment, while outperforming several state-of-the-art problem-specific solutions. For example, RING can, for the first time, accurately track a four-segment kinematic chain (which requires estimating four orientations) using only two magnetometer-free inertial measurement units.

ℹ️ Tip:

Check out my new plug-and-play interface for inertial motion tracking (RING included) here.

Installation

Supports Python=3.10/3.11/3.12 (tested).

Install with pip using

pip install imt-ring

Typically, this will install jax as cpu-only version. For GPU install instructions for jax see https://github.com/jax-ml/jax?tab=readme-ov-file#instructions.

Documentation

Available here.

Quickstart Example

import ring
import numpy as np

T  : int       = 30         # sequence length     [s]
Ts : float     = 0.01       # sampling interval   [s]
B  : int       = 1          # batch size
lam: list[int] = [-1, 0, 1] # parent array
N  : int       = len(lam)   # number of bodies
T_i: int       = int(T/Ts)  # number of timesteps

X              = np.zeros((B, T_i, N, 9))
# where X is structured as follows:
# X[..., :3]   = acc
# X[..., 3:6]  = gyr
# X[..., 6:9]  = jointaxis

# let's assume we have an IMU on each outer segment of the
# three-segment kinematic chain
X[..., 0, :3]  = acc_segment1
X[..., 2, :3]  = acc_segment3
X[..., 0, 3:6] = gyr_segment1
X[..., 2, 3:6] = gyr_segment3

ringnet = ring.RING(lam, Ts)
yhat, _ = ringnet.apply(X)
# yhat: unit quaternions, shape = (B, T_i, N, 4)

Known fixes

Offscreen rendering with Mujoco

mujoco.FatalError: an OpenGL platform library has not been loaded into this process, this most likely means that a valid OpenGL context has not been created before mjr_makeContext was called

Solution:

import os
os.environ["MUJOCO_GL"] = "egl"

Windows-related: ImportError: DLL load failed while importing ...

ImportError: DLL load failed while importing _multiarray_umath: Das angegebene Modul wurde nicht gefunden.

Solution:

  1. pip uninstall -y jax jaxlib
  2. conda install -c conda-forge jax

Publications

The main publication is:

The following publications also utilize this software library, and refer to it as the Random Chain Motion Generator (RCMG) (more specifically the function ring.RCMG):

Other useful ressources

Particularly useful is the following publication from Roy Featherstone

Contact

Simon Bachhuber (simon.bachhuber@fau.de)

How to bump verion in this python package

  1. commit and push your code changes. Make sure to also update the version in pyproject.toml
  2. create the tag and push the tag

Metadata

Release files for imt-ring 1.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for imt-ring 1.7.1
File Size Uploaded
imt_ring-1.7.1.tar.gz 17.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for imt-ring 1.7.1
File Interpreter ABI Platform
imt_ring-1.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 35.0 MB

Release files / imt_ring-1.7.1.tar.gz

Download URL imt_ring-1.7.1.tar.gz
Size 17.5 MB
Tags Source
SHA-256 checksum
How to use checksums
b3512cd97f734ffd43551a1d569b7ec2207e0556fa12ef52c1b35ac55ba06e0e
BLAKE2b-256 checksum
How to use checksums
d536d0de2b9c9094796452ff1d51d0393fdb18a195c6dceeb39d645b864032e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 24, 2025.

Transparency log

Release files / imt_ring-1.7.1-py3-none-any.whl

Download URL imt_ring-1.7.1-py3-none-any.whl
Size 17.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
3961890a45160d17353de758afe1cf4ce5b7a42df50f83c5330b4beada18dfbf
BLAKE2b-256 checksum
How to use checksums
b54032dfd048eb98856099c06db76ee4c872f7bcd75a0d396b47d024bb338844
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 24, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.7.1 This release

2 release files

1.7.0

2 release files

1.6.42

2 release files

1.6.39

2 release files

1.6.38

2 release files

1.6.37

2 release files

1.6.36

2 release files

1.6.35

2 release files

1.6.34

2 release files

1.6.33

2 release files

1.6.32

2 release files

1.6.31

2 release files

1.6.30

2 release files

1.6.29

2 release files

1.6.28

2 release files

1.6.26

2 release files

1.6.25

2 release files

1.6.24

2 release files

1.6.23

2 release files

1.6.22

2 release files

1.6.21

2 release files

1.6.20

2 release files

1.6.18

2 release files

1.6.17

2 release files

1.6.16

2 release files

1.6.15

2 release files

1.6.14

2 release files

1.6.13

2 release files

1.6.12

2 release files

1.6.10

2 release files

1.6.9

2 release files

1.6.8

2 release files

1.6.7

2 release files

1.6.6

2 release files

1.6.5

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.13

2 release files

1.3.12

2 release files

1.3.11

2 release files

1.3.10

2 release files

1.3.9

2 release files

1.3.8

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page