kdFlex 1.1.3 release
Karana Viewer Overview:
This video presents an overview of Karana Viewer, a graphical interface to kdFlex:
kdFlex 1.1.3 Code Changes Summary
API Changes
- Modified nonlinear solver cost and jacobian functions to use
Eigen::Refinstead of c++ references - Added the
DampedContactForceas an alternative toHuntCrossley - Combined
ModelManagerTREE_DYNAMICSandTREE_AUGMENTED_DYNAMICSsolver options into singleFORWARD_DYNAMICSoption docs - Switched
getPath()method forChainedFrameToFrameandOrientedChainedFrameToFrameclass to return list of frames on the path instead of list of edges. docs PhysicalHingeParamsandPhysicalSubhingeParamshave been added toPhysicalBodyParams. This allows these params to capture all the information for subhinges, whereas previously only axes was included. See the data logging notebook for an example of how these are used.- macOS now uses Python 3.12 (same as Linux version).
New Features
- Added the Karana Viewer graphical interface app to browse and interact with a kdFlex simulation. The app can be launched from a Python script by calling
Multibody.gui. This video provides an overview of the GUI and some of its basic features. - Added new Python script option to
toFile()for theDataStructs ofSubTree,SubGraph,StatePropagatorandSim. This will generate a standalone Python script to re-create the object associated with theDataStruct. See SubTreeDS.toFile for details. - Added
SceneFileObjectas a way of deferring loading of 3d mesh assets defined in mesh files. - Added
ResourceFinder, to manage a configurable list of directories to search in for resources such as 3d meshes. - Added joint stop support to
ConstraintKinematicsSolver::solveQ(). - Added robust linear solvers and improved numerical stability of closed-chain tree-augmented dynamics near singular configurations
- Added
SubTree::cloneSubTree()andSubGraph::cloneSubGraph()methods to cloneSubTreeandSubGraphinstances respectively. docs - Added
SubTree::removeStickParts()method to discard existing stick parts. docs - Added
PhysicalBody::relocateBodyFrame()to relocate body frame for a body while leaving everything else unchanged. docs - Added
Algorithms::evalGravitationalPotentialEnergy()method for computing the gravitational potential energy of the multibody system. docs - Added
addPlotsconvenience utility to theSimclass to simplify addtion of plots. See addPlots for more details.
Enhancements
- Changed
Karana::Math::floatingPointExceptions(true)to ignore underflows. - Added warning if creating a
CoalScenePartfrom static mesh geometry without convex flag set, since collision detection for non-convex objects is not robust. - The C++ code usage tracking has been updated to help find stray Python references and inform users about them. See findPythonReferences for details.
- Updated loop constraints to allow for duplicate names. This modifies how their
DataStructversions are saved/loaded. See LoopContraintDS for more details.
Bug Fixes
- Fixed bug where
cmFramecaches did not depend on assocaitedSpatialInertiacaches. Now, changing aSpatialInertiafor aPhysicalBodycorrectly triggers a re-evaluation of thecmFrame.