Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.7%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Basic Info
  • Host: GitHub
  • Owner: suppress-unileon
  • License: mit
  • Language: Python
  • Default Branch: main
  • Size: 3.8 MB
Statistics
  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • Open Issues: 0
  • Releases: 1
Created over 1 year ago · Last pushed about 1 year ago
Metadata Files
Readme License Citation

README.md

benchmark-systems

Open collection of benchmark problems. The goal is to provide a common set of models to test and compare different control algorithms. These models have been used by the control community in many different implementations.

The package is designed to be easy to use, using as few dependencies as possible. It is developed by SUPPRESS Research Group, from Universidad de León.

Dependencies

The package has the following dependencies:

  • scipy >= 1.14.1
  • scipy-dae >= 0.0.6

How it works

Some models are implemented as functions that return a state-space representation of the system:

```python def pendulum(t, x, *, m: float, L: float, drag: float = 0.0, u: float = 0.0) -> np.ndarray: ''' Just a humble pendulum. '''

g = Const.GRAVITY

# State space
dx = np.zeros(2)
dx[0] = x[1]
dx[1] = -g/L * sin(x[0]) - drag/(m*L**2)*x[1] + 1/(m*L**2)*u

return dx

`` These models can be integrated usingsolve_ivpfromscipy`:

```python pendulumstates = solveivp(lambda t, x: pendulum(t, x, m=1, L=2, drag=0.0, u=0), tspan=(0, 20), y0=[np.pi-0.1, 0], teval=np.linspace(0, 20, 1000))

for i, label, in enumerate(['Theta (rad)', 'Omega (rad/s)']): plt.plot(pendulumstates.t, pendulumstates.y[i], label=label) plt.xlabel('Time (s)') plt.legend() ``` pendulum_states

Advanced models

Other models can be expressed more conveniently as a set of differential-algebraic equations (DAE). We select scipy-dae to solve these models because it uses almost the same interface as scipy, and aims to be integrated into scipy in the future.

For example, the model of a quadrotor can be expressed as a DAE or an ODE:

quadrotor

Image source: https://es.mathworks.com/help/symbolic/derive-quadrotor-dynamics-for-nonlinearMPC.html
  • Newton-Euler model (ODE) States: $x = [x \ y \ z \ \phi \ \theta \ \psi \ s \ v \ w \ p \ q \ r]^T$;

  • Euler-Lagrange model (DAE) States: $x = [x \ y \ z \ \phi \ \theta \ \psi \ \dot{x} \ \dot{y} \ \dot{z} \ \dot{\phi} \ \dot{\theta} \ \dot{\psi} ]^T$;

Control actions: $u = [\omega1^2 \ \omega2^2 \ \omega3^2 \ \omega4^2 ]^T$

```python quadrotor_params = { 'Ixx': 1.2, 'Iyy': 1.2, 'Izz': 2.3, 'k': 1, 'L': 0.25, 'm': 2, 'drag': 0.2 }

w2 = quadrotorparams['m']*9.81/(quadrotorparams['k']4) # Squared speed of the propellers in order to hover ... 4kw^2 = mg

u = [w20.97, w2, w21.03, w2] # Pitch only

quadrotorodestates = solveivp(lambda t, x: quadrotorode(t, x, *quadrotorparams, u=u), tspan=(0, 5), y0=[0,0,5] + 9[0], teval=np.linspace(0, 5, 1000)) quadrotordaestates = solvedae(lambda t, x, xdot: quadrotordae(t, x, xdot, **quadrotorparams, u=u), tspan=(0, 5), y0=[0,0,5] + 9*[0], ydot0=np.zeros(12), t_eval=np.linspace(0, 5, 1000))

fig, axs = plt.subplots(2, 1, sharex=True) for i, label in enumerate(['X (m)', 'Y (m)', 'Z (m)', 'Phi (rad)', 'Theta (rad)', 'Psi (rad)']): axs[0].plot(quadrotorodestates.t, quadrotorodestates.y[i], label=label) axs[1].plot(quadrotordaestates.t, quadrotordaestates.y[i], label=label) for i, model in enumerate(['Newton-Euler model', 'Euler-Lagrange model']): axs[i].legend() axs[i].settitle(model) axs[-1].setxlabel('Time (s)') ```

quadrotor_states

Models

All model simulations are available in the examples folder as a Jupyter notebook.

Installation

Currently, a prerelease version is available via TestPypi:

bash pip install -i https://test.pypi.org/simple/ benchmark-systems

Owner

  • Name: SUPPRESS Research Group
  • Login: suppress-unileon
  • Kind: organization
  • Location: Spain

SUPPRESS Research Group. University of León (Spain)

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: benchmark-systems
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Guzmán
    family-names: González
    email: ggonzm@unileon.es
    affiliation: University of León
    orcid: 'https://orcid.org/0000-0002-2130-7867'
  - given-names: Antonio
    family-names: Morán
    email: a.moran@unileon.es
    affiliation: University of León
    orcid: 'https://orcid.org/0000-0002-2762-6949'
  - given-names: Miguel Ángel
    family-names: Prada Medrano
    email: ma.prada@unileon.es
    affiliation: University of León
    orcid: 'https://orcid.org/0000-0002-1563-1556'
  - given-names: Manuel
    family-names: Dominguez Gonzalez
    email: mdomg@unileon.es
    affiliation: University of León
    orcid: 'https://orcid.org/0000-0002-3921-1599'
year: 2025
repository-code: 'https://github.com/suppress-unileon/benchmark-systems'
abstract: >-
  Open collection of benchmark problems. The goal is to
  provide a common set of models to test and compare
  different control algorithms. These models have been used
  by the control community in many different
  implementations.

GitHub Events

Total
  • Release event: 1
  • Delete event: 1
  • Member event: 1
  • Push event: 17
  • Create event: 5
Last Year
  • Release event: 1
  • Delete event: 1
  • Member event: 1
  • Push event: 17
  • Create event: 5

Dependencies

pyproject.toml pypi
  • scipy >=1.14.1
  • scipy-dae >=0.0.6