kdFlex 1.1.1 Code Changes Summary
API Changes
- Switched from using
quantities to define units/quantities to pint. See the units and quantities section for details.
- Changed all methods using std::vector for indices to instead use km::VecInt
- Scrubbed public API to remove methods only used for internal testing.
New Features
- Added
Prefabs, which are used hierarchical, self‑contained, reusable components that can be assembled into a larger simulation. See the prefabs section for more details.
- Added
BasicPrefab, which is a Prefab used for importing/exporting models: this includes both the Multibody model and assocaited KModels. See the BasicPrefab section for more details.
- Added
Vars (short for variable), which are containers that hold a value that can change over time. These provide convenient ways to introspect, plot, and log data. See the Var section for more details.
- Added a
vars member to each BaseWithVars class. This is a common interface to get Vars for a given object. See BaseWithVars.vars for more details.
- The URDF importer has been moved to
BasicPrefabDS, i.e., you should use BasicPrefabDS.fromFile(my_urdf_file.urdf) rather than SubGraphDS.fromFile(my_urdf.urdf). The BasicPrefabDS version includes support for associated KModels such as SubhingeSpringDampers on the joints. See the URDF tutorial for details.
- Added the
Math.Ray class consisting of a pair of 3-vectors for direction and origin.
Enhancements
- PID controllers have been updated to take a single trajectory profile rather than two, as the trajectory profiles now output a value as well as its derivative. This simplifies creating a PID controller as well as enforces consistency between the position-level and velocity-level trajectory. See PID for more details.
- Added robotics algorithms notebook
- Added VecInt typedef
- Added a
ProxyScene.setupGraphics method in python as an alternative to the Multibody.setupGraphics convenience function in cases where there is no need for a Multibody.
Bug Fixes
- Fixed bug in
KModel.isReady check that would always show not ready if an unregistered model had pre/postModelStep methods defined. Now, this check only happens when the models are registered, so KModel.isReady works as expected.