Skip to content

Releases: Simple-Robotics/aligator

aligator v0.17.1

01 Dec 16:20
v0.17.1

Choose a tag to compare

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 ExtendedStringHash for 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's str built-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_view where 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 mimalloc memory resource the allocator resource for ProxDDP solver (#367)
  • tests/gar/block-matrix.cpp : test against BunchKaufman factorization
  • move headers allocator.hpp and arena-matrix.hpp to aligator/core dir (#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.hpp into fwd.hpp

Fixed

  • Fixed pixi build and Tracy integration issues: add ninja dependency and update configs (#375)
  • Fixed num_threads arg missing in call to problem.evaluate() in SolverProxDDP::tryLinearStep() (#373)

Removed

  • modelling/multibody : remove txx files, remove context.hpp
  • core : remove callback-base.txx, remove constraint.txx
  • core : remove deprecated class template StageConstraintTpl, and its Python bindings

Full Changelog: v0.16.0...v0.17.1

aligator v0.16.0

15 Oct 13:54
v0.16.0
d199d3b

Choose a tag to compare

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 consteval compilation errors related to fmt
  • Fix aligator::gar::ParallelRiccatiSolver missing 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 Workspace an 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 with CopyableVisitor (#322)
  • python : make Results copyable (using CopyableVisitor) (#322)
  • ProxDDP solver : remove proximal iteration/ALM over co-states
  • ProxDDP solver : throw when given invalid linesearch enum value
  • core/linesearches : move LinesearchOptions struct out of the Linesearch template 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)
  • Several classes are now allocator-aware:
    • the Riccati-based solvers in gar (ProximalRiccatiSolver, ParallelRiccatiSolver)
    • WorkspaceTpl in aligator/solvers/proxddp
  • cmake/pixi: update maximum version for fmt library to v12 included (#355)

Changes to dynamics

  • Remove explicit dynamics (incl. explicit integrators) from DynamicsModel class hierarchy
  • Make ExplicitDynamicsModel used everywhere in API (e.g. StageModel now takes/stores polymorphic<ExplicitDynamicsModel>)
  • Directly store state space repr dim and actual dim (nx and ndx) in ManifoldAbstract class

Added

  • gar: add CTAD for the ParallelRiccatiSolver and ProximalRiccatiSolver classes
  • 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) in aligator/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
  • memory : removed template class ManagedMatrix (#348)
  • removed several .txx template 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

23 May 11:48
v0.15.0

Choose a tag to compare

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

23 May 09:56
v0.14.1

Choose a tag to compare

This is a patch release to include a change to the Results struct's Python bindings.

Thanks @Tordjx !

What's Changed

New Contributors

Full Changelog: v0.14.0...v0.14.1

aligator v0.14.0

07 May 18:07
v0.14.0

Choose a tag to compare

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 helper lqrKnotsSameDim, check dimensions in LqrKnotTpl::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 gar into main aligator library, slight refactor of DenseRiccatiSolver by @ManifoldFR in #243
  • Officially remove support for Pinocchio 2, require Pinocchio >= 3.4 by @ManifoldFR in #307
  • Move constraint sets from proxsuite-nlp by @ManifoldFR in #310
  • Add polymorphic value wrapper, remove dependence on proxsuite-nlp headers 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

26 Apr 17:32
v0.13.0

Choose a tag to compare

This release introduces API breaking changes for the LqrKnot, LqrProblem classes as well as StateErrorResidual.

Read on for more details.

What's Changed

New Contributors

Full Changelog: v0.12.0...v0.13.0

aligator v0.12.0

27 Mar 14:58
v0.12.0

Choose a tag to compare

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

17 Mar 11:41
v0.11.0

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.10.0...v0.11.0

v0.10.0

09 Dec 21:45
v0.10.0

Choose a tag to compare

What's Changed

  • Change from deprecated ConstraintSetBase<T> to ConstraintSetTpl<T> by @ManifoldFR in #233
  • Add a multibody friction cone cost, rename FrictionConeResidual to CentroidalFrictionConeResidual by @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

11 Oct 08:56
v0.9.0

Choose a tag to compare

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 StageFunction methods (e.g. evaluate and computeJacobians) now take arguments (x,u), no more y (corresponding to the next state in the OCP); StageData objects no longer have the Jacobian field StageData::Jy_
  • the DynamicsModel class and its subclasses are no longer subclasses of StageFunction following this change. These are now distinct class hierarchies
  • the BCLParams struct is no longer used in SolverProxDDP. Now there is an inner AlmParams struct with its own fields
  • scaling of constraints in ProxDDP has completely changed. Non-dynamics constraints are driven by the overall mu parameter, with dynamics being scaled down according to the value of solver.bcl_params.dyn_al_scale_

Checking the changes to the unit tests and examples is strongly recommended.

Known issues

  • cycling the ParallelRiccatiSolver linear 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 aligator by @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_ to init_constraint_ by @ManifoldFR in #223
  • Cycle the Riccati solver by @edantec in #217
  • Deprecate struct StageConstraint, add option to set dual tolerance on SolverProxDDP, re-implement TrajOptProblemTpl::checkIntegrity() by @ManifoldFR in #226
  • Switch from cmake-format to gersemi for CMake formatting by @ManifoldFR in #227
  • Make DynamicsModelTpl separate from StageFunctionTpl class 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