Summary of changes
- The enum `MissingGRFReason` was added so that both `DynamicsFitter` and `SubjectOnDisk` 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 using `neural::WithRespectTo`.