Skip to content

Commit

Permalink
Interface to DAQP (#836)
Browse files Browse the repository at this point in the history
* dense qp interface to daqp.

* Include daqp in dense_qp_interface

* Correct C/P error.

* Include daqp in ocp_qp_interface.

* Add daqp to external sources

* Add DAQP to CMake/Makefiles.

* gitignore daqp.cmake.

* Remove old auxiliary function for compute size of DAQPProblem.

* DAQP in dense and ocp example.

* BUGFIX: else -> else if in daqp_opts_set

* Add DAQP to MATLAB/Octave interface.

* Include DAQP in python interface.

* Set ACADOS_WITH_DAQP default to OFF.

* fix indents

* DAQP fix in dense_qp_interface

* unify formatting, minor comments

* add DAQP in C test

* test DAQP on Github Actions

* update daqp

* DAQP: use blasfeo_dvecse instead of for loop

* DAQP: error if there are equality constraints

* DAQP: more some comments, formatting

* BUGFIX: update constraint senses for DAQP correctly.

* DAQP: Add support for equality constraints.

* DAQP: Extract dual variables for equality constraints.

* DAQP: extend memory to handle multiple slacks variables.

* DAQP: extract soft slack weights to memory.

* DAQP: extract slacks.

* Shift QP to handle linear penalty on slacks.

* DAQP: correctly assign memory.

* DAQP: fix typo to get dim ne

* qpOASES: use blasfeo_dvecse

* test_ocp_wtnx6: tried qpOASES, DAQP still open

* soft_constraint_test: better Python

* DAQP: Setup soft constraint weights/bounds and take entire qp_in into output auxiliary function.

* DAQP: Assign memory to soft constraint weights in DAQP workspace.

* DAQP: extract primal/dual information for the soft constraints from DAQP solution.

* DAQP: enable multiple soft weights/bounds in DAQP

* DAQP: update submodule.

* DAQP: structure memory computation, make multiple of 8

* DAQP: remove acados_daqp_get_dims and make dims more explicit

* test_ocp_wtnx6 changes to be able to test with templated solver

* test_ocp_wtnx6: run with DAQP, Partially and full condensed HPIPM, qpOASES too slow

* Python soft_constraint_test: test all QP solvers, compare SQP iterations

* DAQP: some formatting

* DAQP: update submodule

* test_wtnx6: evaluate timings, fix MATLAB

* DAQP: some formatting

* DAQP: simplify notation

* DAQP: align opts mem more safely

* qpOASES: align opts mem more safely

* DAQP: remove qp->sense, constraint types directly specified in work->sense

* DAQP: use BLASFEO_DVECEL

* DAQP: use correct index when nb != nv

* DAQP: correct value of idx already set above.

* DAQP: unignore constraints that could have been ignored in previous solves due to being a zero row.

* DAQP: ensure that quadratic slack weights are nonzero.

* DAQP: Option of DAQP in pmsm_example.

* DAQP: update submodule.

* DAQP: add notes on transcription, use SET_* for verbosity

* DAQP: notes on equalities.

* DAQP: add comments on the shifts that are used to handle linear penalties on soft slacks.

* DAQP: update submodule

* DAQP: add commented debug prints

Co-authored-by: Jonathan Frey <jonathanpaulfrey@gmail.com>
Co-authored-by: Daniel Arnström <daniel.arnstrom@liu.se>
  • Loading branch information
3 people committed Aug 10, 2022
1 parent 71e6bbd commit 3e7a8c1
Show file tree
Hide file tree
Showing 31 changed files with 1,138 additions and 84 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/c_test_blasfeo_reference.yml
Expand Up @@ -19,6 +19,7 @@ env:
ACADOS_OCTAVE_TEMPLATE: OFF
ACADOS_WITH_OSQP: ON
ACADOS_WITH_QPOASES: ON
ACADOS_WITH_DAQP: ON
ACADOS_WITH_QPDUNES: ON


Expand Down Expand Up @@ -67,7 +68,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DACADOS_WITH_QPOASES=$ACADOS_WITH_QPOASES -DACADOS_WITH_QPDUNES=$ACADOS_WITH_QPDUNES -DACADOS_WITH_OSQP=$ACADOS_WITH_OSQP -DACADOS_PYTHON=$ACADOS_PYTHON -DACADOS_UNIT_TESTS=$ACADOS_UNIT_TESTS -DACADOS_OCTAVE=$ACADOS_OCTAVE -DACADOS_OCTAVE_TEMPLATE=$ACADOS_OCTAVE_TEMPLATE -DLA=REFERENCE
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DACADOS_WITH_QPOASES=$ACADOS_WITH_QPOASES -DACADOS_WITH_DAQP=$ACADOS_WITH_DAQP -DACADOS_WITH_QPDUNES=$ACADOS_WITH_QPDUNES -DACADOS_WITH_OSQP=$ACADOS_WITH_OSQP -DACADOS_PYTHON=$ACADOS_PYTHON -DACADOS_UNIT_TESTS=$ACADOS_UNIT_TESTS -DACADOS_OCTAVE=$ACADOS_OCTAVE -DACADOS_OCTAVE_TEMPLATE=$ACADOS_OCTAVE_TEMPLATE -DLA=REFERENCE


- name: Build & Install
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/full_build.yml
Expand Up @@ -19,6 +19,7 @@ env:
ACADOS_OCTAVE_TEMPLATE: ON
ACADOS_WITH_OSQP: ON
ACADOS_WITH_QPOASES: ON
ACADOS_WITH_DAQP: ON
ACADOS_WITH_QPDUNES: OFF


Expand Down Expand Up @@ -67,7 +68,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DACADOS_WITH_QPOASES=$ACADOS_WITH_QPOASES -DACADOS_WITH_QPDUNES=$ACADOS_WITH_QPDUNES -DACADOS_WITH_OSQP=$ACADOS_WITH_OSQP -DACADOS_PYTHON=$ACADOS_PYTHON -DACADOS_UNIT_TESTS=$ACADOS_UNIT_TESTS -DACADOS_OCTAVE=$ACADOS_OCTAVE -DACADOS_OCTAVE_TEMPLATE=$ACADOS_OCTAVE_TEMPLATE
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DACADOS_WITH_QPOASES=$ACADOS_WITH_QPOASES -DACADOS_WITH_DAQP=$ACADOS_WITH_DAQP -DACADOS_WITH_QPDUNES=$ACADOS_WITH_QPDUNES -DACADOS_WITH_OSQP=$ACADOS_WITH_OSQP -DACADOS_PYTHON=$ACADOS_PYTHON -DACADOS_UNIT_TESTS=$ACADOS_UNIT_TESTS -DACADOS_OCTAVE=$ACADOS_OCTAVE -DACADOS_OCTAVE_TEMPLATE=$ACADOS_OCTAVE_TEMPLATE


- name: Build & Install
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Expand Up @@ -36,3 +36,6 @@
[submodule "examples/acados_python/tests/test_data"]
path = examples/acados_python/tests/test_data
url = https://github.com/acados/test_data
[submodule "external/daqp"]
path = external/daqp
url = https://github.com/darnstrom/daqp.git
6 changes: 6 additions & 0 deletions CMakeLists.txt
Expand Up @@ -72,6 +72,7 @@ option(ACADOS_EXAMPLES "Compile Examples" OFF)
option(ACADOS_LINT "Compile Lint" OFF)
# Extarnal libs
option(ACADOS_WITH_QPOASES "qpOASES solver" OFF)
option(ACADOS_WITH_DAQP "DAQP solver" OFF)
option(ACADOS_WITH_HPMPC "HPMPC solver" OFF)
option(ACADOS_WITH_QORE "QORE solver" OFF)
option(ACADOS_WITH_OOQP "OOQP solver" OFF)
Expand Down Expand Up @@ -191,6 +192,7 @@ if(CMAKE_BUILD_TYPE MATCHES WithExternalLibs)
set(ACADOS_WITH_QORE ON CACHE BOOL "Add QORE solver")
set(ACADOS_WITH_OOQP ON CACHE BOOL "Add OOQP solver")
set(ACADOS_WITH_QPOASES ON CACHE BOOL "Add qpOASES solver")
set(ACADOS_WITH_DAQP ON CACHE BOOL "Add DAQP solver")
set(ACADOS_WITH_QPDUNES ON CACHE BOOL "Add qpDUNES solver")
set(ACADOS_WITH_OSQP ON CACHE BOOL "Add OSQP solver")
endif()
Expand Down Expand Up @@ -297,6 +299,9 @@ endif()
if(${ACADOS_WITH_QPOASES})
set(LINK_FLAG_QPOASES -lqpOASES_e)
endif()
if(${ACADOS_WITH_DAQP})
set(LINK_FLAG_DAQP -ldaqp)
endif()
if(${ACADOS_WITH_QPDUNES})
set(LINK_FLAG_QPDUNES -lqpdunes)
endif()
Expand All @@ -317,6 +322,7 @@ endif()
file(WRITE lib/link_libs.json {\n)
file(APPEND lib/link_libs.json \t\"openmp\":\ \"${LINK_FLAG_OPENMP}\",\n)
file(APPEND lib/link_libs.json \t\"qpoases\":\ \"${LINK_FLAG_QPOASES}\",\n)
file(APPEND lib/link_libs.json \t\"daqp\":\ \"${LINK_FLAG_DAQP}\",\n)
file(APPEND lib/link_libs.json \t\"qpdunes\":\ \"${LINK_FLAG_QPDUNES}\",\n)
file(APPEND lib/link_libs.json \t\"osqp\":\ \"${LINK_FLAG_OSQP}\",\n)
file(APPEND lib/link_libs.json \t\"hpmpc\":\ \"${LINK_FLAG_HPMPC}\",\n)
Expand Down
11 changes: 11 additions & 0 deletions acados/CMakeLists.txt
Expand Up @@ -57,6 +57,10 @@ if(NOT ACADOS_WITH_QPOASES)
list(REMOVE_ITEM ACADOS_SRC "${PROJECT_SOURCE_DIR}/acados/dense_qp/dense_qp_qpoases.c")
endif()

if(NOT ACADOS_WITH_DAQP)
list(REMOVE_ITEM ACADOS_SRC "${PROJECT_SOURCE_DIR}/acados/dense_qp/dense_qp_daqp.c")
endif()

if(NOT ACADOS_WITH_QPDUNES)
list(REMOVE_ITEM ACADOS_SRC "${PROJECT_SOURCE_DIR}/acados/ocp_qp/ocp_qp_qpdunes.c")
endif()
Expand Down Expand Up @@ -109,6 +113,12 @@ if(ACADOS_WITH_QPOASES)
target_compile_definitions(acados PUBLIC USE_ACADOS_TYPES)
endif()

if(ACADOS_WITH_DAQP)
target_link_libraries(acados PUBLIC daqp)

target_compile_definitions(acados PUBLIC ACADOS_WITH_DAQP)
endif()

if(ACADOS_WITH_QPDUNES)
target_link_libraries(acados PUBLIC qpdunes)

Expand Down Expand Up @@ -173,6 +183,7 @@ configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/acadosConfig.cmake.in
PATH_VARS ACADOS_WITH_HPMPC
ACADOS_WITH_QORE
ACADOS_WITH_QPOASES
ACADOS_WITH_DAQP
ACADOS_WITH_QPDUNES
ACADOS_WITH_OSQP
ACADOS_WITH_OOQP)
Expand Down
3 changes: 3 additions & 0 deletions acados/dense_qp/Makefile
Expand Up @@ -41,6 +41,9 @@ OBJS += dense_qp_hpipm.o
ifeq ($(ACADOS_WITH_QPOASES), 1)
OBJS += dense_qp_qpoases.o
endif
ifeq ($(ACADOS_WITH_DAQP), 1)
OBJS += dense_qp_daqp.o
endif
ifeq ($(ACADOS_WITH_QORE), 1)
OBJS += dense_qp_qore.o
endif
Expand Down

0 comments on commit 3e7a8c1

Please sign in to comment.