Nimble: Physics Engine for Biomechanics and Deep Learning
This release adds a fix that will throw an exception (rather than segfaulting) when a GRF .mot file that does not have a 'endheader' string.
This release adds new features to support real-time inverse kinematics from streamed mocap data and fixes some unhandled error conditions.
This provides a few practical improvements to ensure that even when the system is underdetermined (multiple feet in contact with the ground) we solve for the closest possible torques to the original, so that if the virtual and "real" models are identical, then we get zero torques.
This release adds a first experimental version of ExoSolverPinnedContact, for a simple haptic-rendering idealized full body exoskeleton.
This allows DynamicsFitter foot contact heuristics to automatically distinguish between treadmill trials and overground trials.
This includes a few critical fixes to DynamicsFitter::zeroLinearAndOptimizeAngular(), and a couple of other minor fixes.
DynamicsFitter now will no longer mark frames you've marked as "good" as being bad again, even if doing so makes it easier to fit the data with low residuals.
There are a few APIs on Skeleton that return lists of raw pointers to internal Skeleton data (BodyNodes and Joints) to Python. These APIs need to have the List object itself get garbage collected when Python is no longer using it, but not the individual contents of the List, because that is still in use by C++. Unfortunately, Pybind11 does not yet have support for doing this, so we've disabled the APIs for now. Instead, you can use things like [skel.getBodyNode(i) for i in range(skel.getNumBodyNodes())]
Fixes a bug in DynamicsFitter.fillInMissingGRFBlips()