All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.10.0 - 2024-12-09
- Add a multibody friction cone cost (#234)
- Add a
GravityCompensationResidual
, modelling$r(x,u) = Bu - G(q)$ (#235) - Add Pixi support (#240)
- Added a nonmonotone linesearch procedure (#244)
- Add enum value
StepAcceptanceStrategy::LINESEARCH_NONMONOTONE
(#244)
- API BREAKING: Change enum value
StepAcceptanceStrategy::LINESEARCH
toLINESEARCH_NONMONOTONE
(#244)- Add constructor argument
StepAcceptanceStrategy sa_strategy
, defaults to nonmonotone
- Add constructor argument
- The minimum required version of proxsuite-nlp is now 0.10.0 (#244)
SolverProxDDP
: add temporary vectors for linesearchSolverProxDDP
: remove exceptions fromcomputeMultipliers()
, return a bool flag- HistoryCallback: take solver instance as argument
gar
: rework and move sparse matrix utilities togar/utils.hpp
SolverProxDDP
: RenamemaxRefinementSteps_
andrefinementThreshold_
to snake-caseSolverProxDDP
: makelinesearch_
public- Change uses of
ConstraintSetBase
template class toConstraintSetTpl
(following changes in proxsuite-nlp 0.9.0) (#223) - [gar] Throw an exception if trying to instantiate
ParallelRiccatiSolver
with num_threads smaller than 2. - [API BREAKING] Rename friction cone for centroidal into CentroidalFrictionCone (#234)
- Change the linear multibody friction cone to the true "ice cream" cone (#238)
- [gar] Rework
RiccatiSolverDense
to not use inner structFactorData
- Various changes to
gar
tests andtest_util
, addLQRKnot::isApprox()
- Default constructor for
LQRProblemTpl
- Removed header
gar/fwd.hpp
with forward-declarations
- Building aligator without Pinocchio support (including without Pinocchio support in the proxsuite-nlp dependency) is now supported. (#250)
0.9.0 - 2024-10-11
- [python] Added getter
getComponent()
forCostStack
, similar to C++ API - Templated getters
getCost<U>()
andgetDynamics<U>()
in the StageModel class, and anothergetDynamics<U>()
for integrator classes, to get the concrete types (##205) - Add a templated getter
getConstraint<U>
to ConstraintStack (#222) - python: Add helper
aligator.has_pinocchio_features()
(#206) - Add a cycleProblem function that properly rotates the problem data for MPC applications (#215)
- Add a DCM cost function
- Add a cycleAppend function in Riccati solver headers to cycle the LQR solver
SolverProxDDP
: add manually settable dual feasibility tolerancetarget_dual_tol_
with a getter and setter (with side effects)
- All map types are now
boost::unordered_map
(#203) - Separate CostFiniteDifference out of finite-difference.hpp (#212)
- Change the API of the wrench cost functions to allow 3D and 6D forces
- Separate centroidal wrench cone and multibody wrench cone costs
- Add a contact_name item to the CostMap structure
- Re-define ALM params struct internally to aligator (#219)
- SolverProxDDP: add dynamics AL parameter scaling
- Rename
has_dyn_model
->hasDynModel
andis_explicit
->isExplicit
- Add
cost
(trajectory cost) column to logger TrajOptProblem
: rename memberinit_condition_
toinit_constraint_
(fitting with ctor argument name)- python/utils: return axes instances from velocity/controls plotting helpers
- make
LinearFuntionTpl::evaluate()
call more efficient (using.noalias()
) HistoryCallbackTpl
now stores stored data directly- Deprecate the
StageConstraintTpl
template struct, deprecate the related typedefs - [python] Deprecate
aligator.StageConstraint
, functions and methods (e.g.StageModel.addConstraint(cstr: StageConstraint)
) which use it - Change formatting of exceptions, using variadic macro and type-erased implementation (#230)
The following API-BREAKING changes come from PR #229
- Separate
DynamicsModelTpl
and its subclasses from theStageFunctionTpl
class hierarchy - Methods (
.evaluate()
,.computeJacobians()
) inStageFunctionTpl
are now binary (take only(x, u)
)
- Remove constraint scalers (including header
core/alm-weights.hpp
) from ProxDDP algorithm (#214) - SolverProxDDP: remove solver parameter
rho_
(#221) - Remove deprecated functions
ConstraintStackTpl::getDims
andStageModelTpl::dyn_model
- Remove
CallbackBaseTpl::post_linesearch_call(boost::any)
- Remove unused headers
clone.hpp
andversion.hpp
- Restore Pinocchio 3 Python tests (#206)
- Fix warnings in
multibody-constraint-fwd.{hpp, hxx}
about deprecated Pinocchio types and functions (commit df04100c)
0.8.0 - 2024-09-18
- Getter
getResidual<Derived>()
for composite cost functions (#198) - Getter
getComponent<Derived>()
forCostStack
(#199)
- Optimize a bunch of includes
- core: remove headers
proximal-penalty.hpp
/proximal-penalty.hxx
- Change storage of
CostStack
toboost::unordered::unordered_map
, pointing to pair of cost function and weight (#199) - Change storage for
ConstraintStack
to using twostd::vector<polymorphic<>>
the structStageConstraintTpl
is now merely a convenient API shortcut for the end-user. - Remove
StageConstraintTpl::nr()
(in C++ only) - Update minimum required version of eigenpy to 3.7.0
- Add tracy macros to
stage-model.hxx
- Change minimum required version of proxsuite-nlp to 0.8.0
0.7.0 - 2024-09-12
- Use placement-new for
Workspace
andResults
in solvers (FDDP and ProxDDP) - Deprecate typedef for
std::vector<T, Eigen::aligned_allocator<T>>
- Deprecate function template
allocate_shared_eigen_aligned<T>
- Use custom macro defined in
aligator/tracy.hpp
to call Tracy (#191) - Change default behaviour with regards to Tracy (
DOWNLOAD_TRACY
is set toOFF
) - Upgrade minimum required version of proxsuite-nlp to 0.7.0
- Add compatibility with jrl-cmakemodules workspace (#172)
0.6.1 - 2024-05-27
- Add force and wrench cone costs
- Add centroidal momentum cost
- Do not compile or use
gar::ParallelRiccatiSolver<>
when OpenMP support is disabled (#160) - Allow to build with fmt 11 (#173)
0.6.0 - 2024-05-23
- Added constrained LQR example (#145)
- Adds tracy as a profiling tool
- Adds a new sublibrary called
gar
to represent and solve time-varying linear-quadratic subproblems - Adds a parallel, block-sparse factorization for the implicit/proximal Riccati algorithm
- Integrates the CHOLMOD solver from the SuiteSparse library into
gar
- Add a C++ example and benchmark of Talos walking by @edantec
- Add a
BlkMatrix<>
template class for dealing with block Eigen matrices effectively - Copy the headers from boost::core::span
- Add SE2 car benchmark
bench/se2-car.cpp
- Split part of
macros.hpp
into new headereigen-macros.hpp
, addALIGATOR_NOMALLOC_SCOPED
macro to disable Eigen's malloc per-scope and a caching system to restore the malloc status - Add
context.hpp
file foraligator/modelling/dynamics
- Standardized CMake output directories (#147)
- Split derivative computation into first- and second-order functions per stage by @fabinsch
- Changed minimum version of C++ to C++17 (no longer use
boost::optional
orboost::filesystem
) - SolverProxDDP now uses linear solvers provided by
gar
(API breaking), addLQSolverChoice
enum - Minimum version of eigenpy upgraded to 3.4 (for supporting
std::unique_ptr
) - Move cost functions to
aligator/modelling/costs
- Deprecate
ControlBoxFunction
- Remove
LDLTChoice
enum (API breaking) - Refactor computation of problem Lagrangian's gradient
- Remove
aligator/core/stage-data.hxx
- StageModel/StageData now store dynamics model/data separate from other constraints, add
dynamics_data
toStageData
- Rewrite the
Logger
class (rename fromBaseLogger
) using map data structures to store line formatting info + content - Merge struct ODEData into ContinousDynamicsData, rename continous-base.hpp header to continuous-dynamics-abstract
- Optimize a few includes for faster compilation:
aligator/modelling/dynamics/fwd.hpp
aligator/core/stage-model.hpp
no longer includesaligator/core/cost-abstract.hpp
- Split
traj-opt-data.hpp
out oftraj-opt-problem.hpp
- Rename
ContinousDynamicsBase
toContinousDynamicsAbstract
- Rename
CostBase
toCostAbstract
- Expose
TrajOptData.init_data
- Remove
LDLTChoice
enum andSolverProxDDP.ldlt_solver_choice
attribute
0.5.1 - 2024-04-24
- Fix finite difference function in python unittest (#128)
- Add kinodynamics forward scheme
- Add centroidal dynamics derivative cost to regularize the time derivative of centroidal dynamics
- Add Python example of Solo stepping in place
- Add wrench cone cost for 6D contact in centroidal dynamics
- Add a 6D contact formulation for every centroidal cost and dynamics, including kinodynamics
0.5.0 - 2024-02-13
- Add a pair filter strategy as an alternative to linesearch methods
- Add a python example of a locomotion OCP with the robot Talos
- Add two nonlinear centroidal dynamical models, where the control is respectively contact forces and their time derivative
- Add a set of cost functions to generate a centroidal problem with user-defined contacts
- Add unittests and example of typical centroidal problem
0.4.1 - 2024-01-25
- CMake: fetch submodule if not available in (#103)
- CMake: move benchmark dependency speecification in main file
- Document and simplify the LQR example
- Finish the se2-car.cpp example (#110)
- Add template instantiation for IntegratorAbstract, ExplicitIntegratorAbstract and IntegratorRK2 (#114)
- Don't output numpy matrices in
example-talos-arm
- Fix name of frame parent attribute in examples
- Export C++ definitions in CMake config file
- Fix Doxyfile python bindings directory (#110)
- Fix for eigenpy 3.3 (#121)
0.4.0 - 2023-12-22
- This is the first release of
aligator
. This library is a joint effort between INRIA and LAAS-CNRS, and will be maintained and expanded in the future. Please provide constructive feedback and contribute!