kdFlex 0.9.16 release

API changes

  • The StatePropagator::setState now exclusively uses global coordinates and resets subhinge chart offsets.
  • An API has been added to WebScene to allow swapping between perspective and orthographic camera projections.
  • setEphemerisTime has been removed from SpiceFrame, and utcTimeToEphemeris has been added to TimeKeeper instead.
  • Integrator constructors now use enums instead of strings.
  • Ktime2Seconds and seconds2Ktime have been renamed to ktimeToSeconds and secondsToKtime.
  • The SanitizeCoordinates model has been removed, and coordinate sanitization is now performed automatically at the end of integration steps.
  • Dynamic loaders/dumpers are now used for YAML/JSON, significantly reducing boilerplate code when dumping DataStructs with custom classes.
  • The getIndepColIndices() method has been moved from the CK solver to the Math module, making it a more broadly useful utility.

New features/enhancements

  • A CoordinateConstraint class has been added to SOADyn to support coordinate-level constraints, such as those found in gears.
  • evalTreeMassMatrixInverse and evalSerialChainMassMatrixInverse algorithms have been added.
  • Versioning has been added to DataStructs.
  • A kinematics simulation mode has been added for simulations using accelerations.
  • A SyncRealTime model has been added to GeneralKModels to limit simulation speed to a multiple of real time.
  • get/setVisible methods have been added to Scene, ProxyScene, and WebScene to control the visibility of SceneNodes.
  • TA dynamics now supports a combination of hinge loop, convel, and coordinate constraints for general systems.
  • Orthographic camera projections have been added.
  • Typing improvements have been made throughout the codebase.
  • The update_state_derivatives_hop_end flag has been added to SOADyn to control updating derivatives at the end of each hop.
  • MultibodyTUI now has configurable swing amplitude, notifications, and a kinematic simulation swing mode. In addition, a REPL embed has been added so users can make calls to the Python API.

Bug fixes

  • The discard function in Python has been overhauled to prevent memory corruption. When calling discard, users now need to ensure the variable being discarded is holding the last reference in Python (similar to how users must ensure the shared pointer being discarded is holding the last reference in C++).
  • The CK solver has received more fixes for convel and coordinate constraints, correcting issues with the convel Jacobian and frozen subhinge handling.
  • CoordData::mergeCoordData() now correctly carries forward frozen coordinate information, which is used in CK solutions.
  • A bug in the operator= for ArkExplicit integrator options that previously prevented absolute tolerance from being set correctly.
  • Sign error and frame mismatch in point mass gravity calculations.
  • The extended OSCM now correctly works for serial and tree systems.
  • A bug in the Python KModel unregister process that caused errors when models with pre/postModelStep lacked a period or nextModelStepTime.
  • Registered model function names now use model IDs to prevent collisions between models with identical names.
  • A typo in the CK solver caused solveUdot() to return velocity error instead of acceleration error.
  • A typo in the Python binding for f2f.pframeObservedRelSpVel that incorrectly pointed to pframeObservedRelSpAccel.
  • CoordinateConstraint cleanup now allows users to discard them without errors and automatically integrates cleanup into the Multibody.
  • Primitives in CoalScene are now y-aligned, with a correction quaternion applied to match conventions and ensure consistency with collision outputs.