Releases: keenon/nimblephysics
Releases · keenon/nimblephysics
v0.8.89 Stability Improvements
- Fixes a segfault we were getting on
createShapeNode()
in Python - Fixes an issue where we were detecting spherical joint centers in
MarkerFitter
that were worse than axis joint centers.
v0.8.88 Stability Improvements
This is a few misc gradient bug fixes.
v0.8.87 Adding joint force field to MarkerFitter
When fitting skeletons to markers in MarkerFitter, we've added support for adding a force field loss to encourage joints to stay at least a minimum distance from one another.
Also, several major stability improvements.
v0.8.86: Bug fixes for static trial pose optimization and `MarkerFixer`
*** IGNORE RELEASE 0.8.85 ***
Creating a new release because release 0.8.85 did not have it's version number updated correctly for pip installs.
Summary of changes
- Fixed a bug in static trial optimization where decision variable vector length was not correct length, leading to memory corruption.
- Fixed bugs in
MarkerFixer
that were creating discontinuous marker traces and prematurely dropping marker frames. - Added an option
DynamicsFitter::estimateFootGroundContacts()
to ignore checks that detect when a foot is over a force plate, which can be useful for GRF data that has missing or incomplete force plate geometry.
v0.8.85: Bug fixes for static trial pose optimization and `MarkerFixer`
Summary of changes
- Fixed a bug in static trial optimization where decision variable vector length was not correct length, leading to memory corruption.
- Fixed bugs in
MarkerFixer
that were creating discontinuous marker traces and prematurely dropping marker frames. - Added an option
DynamicsFitter::estimateFootGroundContacts()
to ignore checks that detect when a foot is over a force plate, which can be useful for GRF data that has missing or incomplete force plate geometry.
v0.8.84 Support for static pose trials + various updates and bug fixes
Summary of changes
- You can now specify a static pose trial in
MarkerFitter
usingsetStaticTrial()
to add a cost term (with weight fromsetStaticTrialWeight()
) to provide a prior to the marker fitting optimization based on the static pose joint angles. - Added an option to disable
optimizeMarkerOffsets()
which is called duringDynamicsFitter::timeSyncAndInitializePipeline()
. - For locked coordinates,
OpenSimParser
only set upper and lower bounds for the coordinate position. We now set equal upper and lower bounds for coordinate velocities and accelerations, which will prevent small "wiggles" in locked coordinates during dynamics fitting. - Added support for ground reaction file headers from the Rajagopal model trial dataset.
v0.8.83: Reporting info for 'missing' GRFs in `DynamicsFitter` // support for computing IMU info with `Skeleton`
Summary of changes
- The enum
MissingGRFReason
was added so that bothDynamicsFitter
andSubjectOnDisk
can report a value indicating why a frame in a trajectory was marked as having "missing" ground reaction force information. This was implemented to improve reporting tools in AddBiomechanics, but will also help debugging in general. - When processing multiple data trials,
DynamicsFitter::zeroLinearResidualsOnCOMTrajectory()
now allows small scale factors for ground reaction forces in each trial to get the linear fitter the best chance of converging without dropping frames. In practice, small scaling adjustments for each trial can provide much better performance without significantly changing the original data (tested on running data across four running speeds). MarkerFixer::filterTimestepsBasedOnProlongedStillness()
was added to filter out markers that remain motionless for a certain number of timesteps.- New methods were added to
dynamics::Skeleton
to all compute IMU quantities (e.g.,Skeleton::getGyroReadings()
) and their gradients (e.g.,Skeleton::getGyroReadingsJacobianWrt
). The quanities that gradients are taken with respect to are handled usingneural::WithRespectTo
.
v0.8.82 Python support for regularizing joint accelerations
Joint acceleration regularization adding in v0.8.81 is now supported through the Python interface.
v0.8.81 Joint acceleration regularization
- Added an option to regularize the joint acceleration variables in the optimization problem solved by
DynamicsFitter
. - The regularization term can be added to the loss function by providing a positive value to
DynamicsFitProblemConfig::setRegularizeJointAcc()
. - Updated
DynamicsFitter::writeCSVData()
to write out the same name of rows as the the number of timestamps in the original problem. The updates the file located atosim_results/ID/<trial_name>_full.csv
.
v0.8.80 Bug fixes to `DynamicsFitter` and `OpenSimParser`
Summary of changes
- Fixed bug in
DynamicsFitter::zeroLinearResidualsOnCOMTrajectory
where incorrect "b" vector was being used when fitting trajectories for trials left out of mass-fitting step. DynamicsFitter::timeSyncAndInitializePipeline
now supports the parametersshiftGRFs
(for enabling/disabling the GRF shifting step) andmaxTrialsToSolveMassOver
(to set the number of trials used to fit the model mass).- Test
HamnerMultipleTrials
, with associated data files. - The utility function
OpenSimParser::roundToNearestMultiple()
, which was implemented to improve rounding of the detected framerates from TRC and MOT files.