Observed since 20 Oct, 19:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
adaptive-kmpc-py
A Python implementation of the adaptive Koopman model predictive control algorithm
This is a Python implementation of the adaptive Koopman model predictive control (KMPC) algorithm, proposed in https://arxiv.org/abs/2503.17902 (currently under review).
An equivalent Julia implementation can be found in the official paper repository.
The controller allows approximating nonlinear system dynamics from experimental data as a linear system, which is then embedded in a convex model predictive controller. This eliminates the need for determining a dynamic model via first principles. Additionally, the model is updated online from the closed-loop feedback, which enables control of systems with varying dynamic parameters.
The algorithm is explained in depth in the linked paper, and verified with real-system control experiments on a 1R and 2R robot system. To ensure understanding of the code, variable names are chosen according to the notation used in the paper.
The following process schematic may help in getting a quick overview of the algorithm and the code.
preceding experiment.circular buffer, operatin under first-in-first-out logic.linear model in the discrete time domain.convex quadratic program along with some reference trajectory, constraints, and feedback on the current state allows solving for an optimal control input that is applied to the system.You can install the latest version from GitHub:
pip install git+https://github.com/adrianodelr/adaptive-kmpc-py.git
Or via the package manager:
pip install adaptive-kmpc-py
For understanding basic usage, you can have a look at the Jupyter notebooks:
Both demonstrate simulated tracking control of serial robots.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
numpyEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.10",
"evaluation": "NOT_EVALUATED"
} | numpy<1.26.0,>=1.22.4 | runtime |
scipyEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.10",
"evaluation": "NOT_EVALUATED"
} | scipy<=1.11.2,>=1.9.0 | runtime |
osqpEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.10",
"evaluation": "NOT_EVALUATED"
} | osqp<1.1.0,>=0.6.2 | runtime |
numbaEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.10",
"evaluation": "NOT_EVALUATED"
} | numba<0.61.0,>=0.58.0 | runtime |
pykoopmanEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pykoopman==1.1.0 | runtime |
bdist_wheel · 5.91 KB · Python py3
sdist · 4.84 KB · Python source
Observed since 20 Oct, 19:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:67d23309b2054062e49e0eb12feb5e51291c0b4ea2d5185b977d9c9d5e8bbfd9