What is Nimble?

Nimble is a toolkit for doing AI on human biomechanics (physically simulated realistic human bodies), written in C++ for speed, but with nice Python bindings. It focuses on studying real physical human bodies.

Nimble started life as a general purpose differentiable physics engine, as a fork of the (not differentiable) DART physics engine. We wrote a paper about it, which you can find here. Over the years, to support projects like AddBiomechanics, we’ve added a lot of biomechanics-focused functionality to Nimble, including:

  • New types of biological joints (CustomJoint for knees, ConstantCurvatureJoint for spines, EllipsoidJoint for shoulders, etc), which are all differentiable

  • Support for loading, modifying, and saving OpenSim skeleton models

  • Support for handling raw motion capture data

  • Treating bone scales and optical marker offsets as first class differentiable quantities, even through physics, which is important when system-identifying a human body

  • Various optimization algorithms useful for biomechanics

  • Optimized computations to get Jacobians and gradients through most quantities of interest in the human body

  • … a bunch of other features too numerous to list here

Does Nimble do general purpose robotics simulation?

This documentation is focused on the tools you need when doing AI for human biomechanics. While Nimble is also a general purpose differentiable physics engine capable of simulating complex scenes with robots and collisions, we don’t cover that much here, because the past few years of research with differentiable physics engines have shown that the way Nimble gets gradients through rigid collisions is probably not the best way for complex trajectory optimization (TLDR: RL is onto something, and it has advantages even if the system is technically differentiable). If you are doing general purpose robotics research, we recommend looking at some of the following engines:

If you are here because you are interested in studying physical human bodies with AI, then read on!