Releases: Simple-Robotics/aligator
aligator v0.17.1
What's Changed
Update jrl-cmakemodules submodule to fix release process.
Full Changelog: v0.17.0...v0.17.1
What's Changed (v0.17.0)
Added
- pixi: add pixi-build (preview support) (#369)
- gar/blk-matrix : added
BlkMatrix::isApprox()(#366) - core : added mimalloc-based memory resource (#366)
- modelling/costs : add getter and setter for cost term weights (#359)
- Support for Pinocchio 4 (#361)
- Added a hash function
ExtendedStringHashfor string types (e.g.std::string) which supports transparent/heterogeneous lookup in compatible hash maps (e.g.boost::unordered_map) using types other than key type e.g.std::string_view(#364) - Added support in Python bindings for
std::string_view(converting to and from Python'sstrbuilt-in type) (#364) - Added TwoFrameEquality residual to enforce relative pose equality between two Pinocchio frames (#378)
Changed
- Change several classes (including solvers and contact-related modelling) to take
std::string_viewwhere possible (#364) - core : have
replaceStageCircular()return ejected knot (#376) - python : do not import utils.plotting automatically (#369)
- ci: display ccache statistics (#369)
- pixi: update environments (#369)
- Move header
<aligator/gar/blk-matrix.hpp>to<aligator/core/blk-matrix> - solver-proxddp : make new
mimallocmemory resource the allocator resource for ProxDDP solver (#367) - tests/gar/block-matrix.cpp : test against BunchKaufman factorization
- move headers
allocator.hppandarena-matrix.hpptoaligator/coredir (#362) - python: aligator now requires eigenpy version 3.10.3 at least
- python: remove eigenpy version checks
- python: improve
CostStack.getComponent()error message - tests/python: more comprehensive test for
aligator.CostStack(#359) - modelling/multibody : merge header
context.hppintofwd.hpp
Fixed
- Fixed pixi build and Tracy integration issues: add ninja dependency and update configs (#375)
- Fixed
num_threadsarg missing in call toproblem.evaluate()inSolverProxDDP::tryLinearStep()(#373)
Removed
- modelling/multibody : remove txx files, remove
context.hpp - core : remove
callback-base.txx, removeconstraint.txx - core : remove deprecated class template
StageConstraintTpl, and its Python bindings
Full Changelog: v0.16.0...v0.17.1
aligator v0.16.0
What's Changed
This release brings a major change to the ProxDDP solver, which no longer uses proximal iteration the co-state (the dynamics' Lagrange multiplies). This choice is made to increase the solver's overall performance.
The ProxDDP solver now defaults to using a linear rollout for the state-control trajectory update.
Furthermore, on a temporary basis, implicit discrete dynamics are no longer supported in the API and solvers.
One major new addition is the ArenaMatrix template class, which is a allocator-aware class which manages an Eigen matrix-like object and is compatible with Eigen operations. The design is inspired from stan-dev/math's arena_matrix class.
Fixed
- gar : fix missing move assignment operator in
LqrProblemTpl - Fix C++20 support. Fix
constevalcompilation errors related to fmt - Fix
aligator::gar::ParallelRiccatiSolvermissing from docs - Fix missing set of Pinocchio-support (cost, dynamics, etc) classes
- solver-proxddp : fix return type of
LinesearchVariant::isValid() - memory : added template class
ArenaMatrix(#348)
Changed
- gar : allow setting number of refinement iterations for condensed KKT solver
- ProxDDP solver : change default rollout type to
RolloutType::LINEAR/ROLLOUT_LINEAR - solvers/proxddp : make
Workspacean allocator-aware class - add
[[nodiscard]]attribute to several functions in:- core/manifold-base
- gar/lqr-problem
- gar/utils
- modelling/spaces/cartesian-product
- solvers/proxddp/solver-proxddp
- readme/cmake : update actually expected minimum version of eigenpy to 3.9
- solvers : make proxddp algo's Results class copyable again (in C++ and Python) (#322)
- python/visitors : also set
__copy__method on exposed class withCopyableVisitor(#322) - python : make
Resultscopyable (usingCopyableVisitor) (#322) - ProxDDP solver : remove proximal iteration/ALM over co-states
- ProxDDP solver : throw when given invalid linesearch enum value
- core/linesearches : move
LinesearchOptionsstruct out of theLinesearchtemplate class, add CTAD - Change all tests to use Catch2 instead of Boost.Test
- The Riccati algorithms now run faster after the dual-regularisation on co-states and the QR for the implicit dynamics have been removed. The algos might be less numerically accurate.
- the base interface and derived solvers no longer take the scalar argument
mudyn(dual regularisation on the costate)
- the base interface and derived solvers no longer take the scalar argument
- Several classes are now allocator-aware:
- the Riccati-based solvers in gar (
ProximalRiccatiSolver,ParallelRiccatiSolver) WorkspaceTplinaligator/solvers/proxddp
- the Riccati-based solvers in gar (
- cmake/pixi: update maximum version for fmt library to v12 included (#355)
Changes to dynamics
- Remove explicit dynamics (incl. explicit integrators) from
DynamicsModelclass hierarchy - Make
ExplicitDynamicsModelused everywhere in API (e.g.StageModelnow takes/storespolymorphic<ExplicitDynamicsModel>) - Directly store state space repr dim and actual dim (
nxandndx) inManifoldAbstractclass
Added
- gar: add CTAD for the
ParallelRiccatiSolverandProximalRiccatiSolverclasses - testing: added a test_mpc.py script to test parallel and serial mpc implementations (#331)
- modelling : added wheeled inverted pendulum dynamics (#326)
- CMake option to
BUILD_STANDALONE_PYTHON_INTERFACE(#347) - utils: add free function
forwardDynamics()(replaces previous struct) inaligator/utils/forward-dyn.hpp
Removed
- fwd.hpp : remove deprecated typedef
ODEDataTpl - gar: remove Cholmod backend (#345)
- cmake / pixi : remove Cholmod dependency (#345)
- gar: remove support for implicit dynamics in LQ solver interface
- remove member
LqrKnotTpl::E - simplify Riccati kernel algorithm
- remove member
- memory : removed template class
ManagedMatrix(#348) - removed several
.txxtemplate instantiation declaration files - third-party : remove headers related to
boost::span:boost/core/data.hpp,boost/core/make_span.hpp,boost/core/span.hpp - removed header
aligator/tags.hpp
Full Changelog: v0.15.0...v0.16.0
aligator v0.15.0
This PR accounts for the end of Ubuntu 20.04 support, and increases the minimum required version of CMake to 3.22, in line with jrl-umi3218/jrl-cmakemodules#764.
What's Changed
- CMakeLists.txt : Update minimum required version of CMake to 3.22 by @ManifoldFR in #320
Full Changelog: v0.14.1...v0.15.0
aligator v0.14.1
aligator v0.14.0
This release brings many major changes to aligator.
We officially drop support for Pinocchio 2. As we start looking forward to Pinocchio 4, aligator will require at least Pinocchio 3.4. If you need support for a lower version of Pinocchio 3, please contact us and suggest patches.
Furthermore, aligator no longer depends on the proxsuite-nlp library, which will be archived in the near future - all functionality (manifolds, constraints) has been merged into aligator itself.
What's Changed
- Change work in progress branch by @jorisv in #297
- Add CMake macro
aligator_create_python_extension()to export by @ManifoldFR in #298 - Merge expose-stage-data.cpp into expose-stage.cpp by @ManifoldFR in #299
- [gar] Add
LqrProblemTpl::isApprox()and helperlqrKnotsSameDim, check dimensions inLqrKnotTpl::isApprox()by @ManifoldFR in #300 - [gar] Add fwd header, rename
{ riccati-impl.hpp => riccati-kernel.hpp }by @ManifoldFR in #301 - [python] make BlkMatrixPythonVisitor an incomplete type when template argument is wrong by @ManifoldFR in #304
- .gersemirc : add bench dir by @ManifoldFR in #305
- Update pixi lockfile by @update-pixi-lockfile in #306
- Add memory allocator support for LQ subproblem types, merge
garinto main aligator library, slight refactor ofDenseRiccatiSolverby @ManifoldFR in #243 - Officially remove support for Pinocchio 2, require Pinocchio >= 3.4 by @ManifoldFR in #307
- Move constraint sets from
proxsuite-nlpby @ManifoldFR in #310 - Add polymorphic value wrapper, remove dependence on
proxsuite-nlpheaders by @ManifoldFR in #312 - Merge parts of
proxsuite-nlp(manifolds and constraints) into aligator, remove dependency on proxsuite-nlp by @ManifoldFR in #309 - Managed matrix by @ManifoldFR in #313
Full Changelog: v0.13.0...v0.14.0
aligator v0.13.0
This release introduces API breaking changes for the LqrKnot, LqrProblem classes as well as StateErrorResidual.
Read on for more details.
What's Changed
- Update pixi lockfile by @update-pixi-lockfile in #282
- [gar] Rename {LQRKnot,LQRProblem} to {LqrKnot, LqrProblem} by @ManifoldFR in #283
- Correct references to equations. by @abussy-aldebaran in #284
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #286
- Update CITATIONS.bib and CITATION.cff by @ManifoldFR in #291
- Reverse sign of StateErrorResidual by @ManifoldFR in #292
- macos-linux-pixi workflow: change branch rules by @ManifoldFR in #293
- Fix segfault in
FrameCollisionResidual, add corresponding test intest_frames.pyby @oomcth in #294
New Contributors
Full Changelog: v0.12.0...v0.13.0
aligator v0.12.0
This release increases the minimum version of Crocoddyl to 3.0.1 for users of the compatibility module.
What's Changed
Full Changelog: v0.11.0...v0.12.0
aligator v0.11.0
What's Changed
- [cmake] Add
cmakesubmodule dir to gersemi definitions by @ManifoldFR in #253 - Change macro
ALIGATOR_DOMAIN_ERRORto use variadic args by @ManifoldFR in #255 - Update pixi lockfile by @update-pixi-lockfile in #259
- Don't link against all pinocchio by @jorisv in #260
- topic/cmake sync submodule by @ManifoldFR in #262
- Use more Pinocchio instantiated functions by @ManifoldFR in #261
- Collision residual by @edantec in #264
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #263
- Fix copy of TrajOptProblem by @abussy-aldebaran in #265
- Changed CMAKE_INSTALL_FULL_ to CMAKE_INSTALL_ by @abussy-aldebaran in #267
- Prevent duplication of log columns. by @abussy-aldebaran in #271
- Update pixi lockfile by @update-pixi-lockfile in #269
- Nix by @LudovicDeMatteis in #268
- Add MPC test/example. by @abussy-aldebaran in #272
- Allow customization of the initial solution. by @abussy-aldebaran in #274
New Contributors
- @abussy-aldebaran made their first contribution in #265
Full Changelog: v0.10.0...v0.11.0
v0.10.0
What's Changed
- Change from deprecated
ConstraintSetBase<T>toConstraintSetTpl<T>by @ManifoldFR in #233 - Add a multibody friction cone cost, rename
FrictionConeResidualtoCentroidalFrictionConeResidualby @edantec in #234 - Add gravity compensation residual by @ManifoldFR in #235
- Add pixi support by @jorisv in #240
- Fixes to ProxDDP by @ManifoldFR in #242
- Change linear friction cone to ice cream cone by @edantec in #238
- topic/gar/devel by @ManifoldFR in #236
- Update pixi lockfile by @update-pixi-lockfile in #245
- Fix build instruction by @jorisv in #249
- Fully support building aligator without Pinocchio support (including without proxsuite-nlp Pinocchio support) by @ManifoldFR in #250
- Switch to nonmonotone linesearch by @ManifoldFR in #244
New Contributors
- @update-pixi-lockfile made their first contribution in #245
Full Changelog: v0.9.0...v0.10.0
aligator v0.9.0
Version 0.9.0 of aligator brings a host of changes:
- some for performance (cycling problems properly, with big thanks to @edantec),
- some for convenience,
- some for the ProxDDP algorithm,
- and big changes to the dynamics class hierarchy
Users should assume these changes are API-breaking (in both C++ and Python). Namely:
- the
StageFunctionmethods (e.g.evaluateandcomputeJacobians) now take arguments(x,u), no morey(corresponding to the next state in the OCP);StageDataobjects no longer have the Jacobian fieldStageData::Jy_ - the
DynamicsModelclass and its subclasses are no longer subclasses ofStageFunctionfollowing this change. These are now distinct class hierarchies - the
BCLParamsstruct is no longer used inSolverProxDDP. Now there is an innerAlmParamsstruct with its own fields - scaling of constraints in ProxDDP has completely changed. Non-dynamics constraints are driven by the overall
muparameter, with dynamics being scaled down according to the value ofsolver.bcl_params.dyn_al_scale_
Checking the changes to the unit tests and examples is strongly recommended.
Known issues
- cycling the
ParallelRiccatiSolverlinear solver is still broken. This requires a more in-depth look, coming in the next version.
What's Changed
- Change all map types to boost::unordered_map by @ManifoldFR in #203
- [core | modelling] Add templated getters for cost and dynamics by @ManifoldFR in #205
- [tests/python] Restore Pinocchio 3 tests, add check for Pinocchio features from Python by @ManifoldFR in #206
- [ci] Cancel PR workflow on new push by @ManifoldFR in #210
- [autodiff] separate out CostFiniteDifferenceHelper by @ManifoldFR in #212
- [solvers] Remove constraint prox scalers by @ManifoldFR in #214
- Fix the cycling of problem data in MPC by @edantec in #215
- Force API updates by @edantec in #216
- Re-define ALM params struct internally to
aligatorby @ManifoldFR in #219 - core/constraint.hpp : add cast-getter by @ManifoldFR in #222
- SolverProxDDP: remove solver parameter
rho_by @ManifoldFR in #221 - Scale the dynamics' AL parameter instead of the constraints, remove deprecated functions, rename
TrajOptProblemTpl::init_condition_toinit_constraint_by @ManifoldFR in #223 - Cycle the Riccati solver by @edantec in #217
- Deprecate struct
StageConstraint, add option to set dual tolerance onSolverProxDDP, re-implementTrajOptProblemTpl::checkIntegrity()by @ManifoldFR in #226 - Switch from cmake-format to gersemi for CMake formatting by @ManifoldFR in #227
- Make
DynamicsModelTplseparate fromStageFunctionTplclass hierarchy by @ManifoldFR in #229 - Change formatting of exceptions, using variadic macro and type-erased implementation by @ManifoldFR in #230
- Fix support for fmt version 10 by @ManifoldFR in #231
Full Changelog: v0.8.0...v0.9.0 (commits) | CHANGELOG