Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crazyflow/control/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

__all__ = []

from crazyflow.control.core import Control, parametrize
from crazyflow.control.core import Control, load_params, parametrize
from crazyflow.control.mellinger import attitude2force_torque as mellinger_attitude2force_torque
from crazyflow.control.mellinger import state2attitude as mellinger_state2attitude

Expand All @@ -23,4 +23,4 @@
"mellinger_attitude2force_torque": mellinger_attitude2force_torque,
}

__all__ = ["Control", "parametrize"]
__all__ = ["Control", "load_params", "parametrize"]
4 changes: 2 additions & 2 deletions crazyflow/dynamics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@

from typing import Callable

from crazyflow.dynamics.core import Dynamics, parametrize
from crazyflow.dynamics.core import Dynamics, load_params, parametrize
from crazyflow.dynamics.first_principles import dynamics as _first_principles_dynamics
from crazyflow.dynamics.so_rpy import dynamics as _so_rpy_dynamics
from crazyflow.dynamics.so_rpy_rotor import dynamics as _so_rpy_rotor_dynamics
from crazyflow.dynamics.so_rpy_rotor_drag import dynamics as _so_rpy_rotor_drag_dynamics

__all__ = ["parametrize", "available_dynamics", "dynamics_features", "Dynamics"]
__all__ = ["parametrize", "load_params", "available_dynamics", "dynamics_features", "Dynamics"]


available_dynamics: dict[str, Callable] = {
Expand Down
5 changes: 2 additions & 3 deletions crazyflow/envs/drone_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
from numpy.typing import NDArray

from crazyflow.control import Control
from crazyflow.control.core import load_params
from crazyflow.control.mellinger import force_torque2rotor_vel
from crazyflow.drones import load_params
from crazyflow.dynamics import Dynamics
from crazyflow.sim import Sim
from crazyflow.sim.data import SimData
Expand All @@ -33,7 +32,7 @@ def action_space(control_type: Control, drone: str) -> spaces.Box:
"""
match control_type:
case Control.attitude:
params = load_params(force_torque2rotor_vel, drone)
params = load_params(drone)
thrust_min, thrust_max = params["thrust_min"] * 4, params["thrust_max"] * 4
return spaces.Box(
np.array([-np.pi / 2, -np.pi / 2, -np.pi / 2, thrust_min], dtype=np.float32),
Expand Down
4 changes: 2 additions & 2 deletions docs/user-guide/control/parametrize.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ rpyt, _ = ctrl(pos, quat, vel, cmd)

## Loading raw parameters

Use [`load_params`][crazyflow.control.core.load_params] to inspect or override the values that `parametrize` would bind for a specific controller function:
Use [`load_params`][crazyflow.control.load_params] to inspect or override the values that `parametrize` would bind for a specific controller function:

```python
from crazyflow.control.core import load_params
from crazyflow.control import load_params
from crazyflow.control.mellinger import state2attitude

params = load_params(state2attitude, "cf2x_L250")
Expand Down
4 changes: 2 additions & 2 deletions docs/user-guide/dynamics/parametrize.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,10 @@ parametrized_dynamics = parametrize(dynamics, drone="cf2x_T350")

## Loading raw parameters

If you need the parameter values directly, for example, to pass them to [`symbolic_dynamics`](symbolic.md), use [`load_params`][crazyflow.dynamics.core.load_params]:
If you need the parameter values directly, for example, to pass them to [`symbolic_dynamics`](symbolic.md), use [`load_params`][crazyflow.dynamics.load_params]:

```python { .python continuation }
from crazyflow.dynamics.core import load_params
from crazyflow.dynamics import load_params

params = load_params(dynamics, "cf2x_L250")
params["mass"] # 0.0319
Expand Down
3 changes: 1 addition & 2 deletions tests/integration/test_interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import pytest
from scipy.spatial.transform import Rotation as R

from crazyflow.control import Control, parametrize
from crazyflow.control.core import load_params
from crazyflow.control import Control, load_params, parametrize
from crazyflow.control.mellinger import force_torque2rotor_vel, state2attitude
from crazyflow.control.transform import motor_force2rotor_vel
from crazyflow.sim import Dynamics, Sim
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/control/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import array_api_strict
import pytest

from crazyflow.control.core import load_params, parametrize
from crazyflow.control import load_params, parametrize
from crazyflow.control.mellinger import (
attitude2force_torque,
force_torque2rotor_vel,
Expand Down
3 changes: 1 addition & 2 deletions tests/unit/control/test_mellinger.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
import numpy as np
import pytest

from crazyflow.control import parametrize
from crazyflow.control.core import load_params
from crazyflow.control import load_params, parametrize
from crazyflow.control.mellinger import (
attitude2force_torque,
force_torque2rotor_vel,
Expand Down
11 changes: 9 additions & 2 deletions tests/unit/dynamics/test_parametrization.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,15 @@
import pytest

from crazyflow.drones import available_drones
from crazyflow.dynamics import available_dynamics
from crazyflow.dynamics.core import parametrize
from crazyflow.dynamics import available_dynamics, load_params, parametrize


@pytest.mark.unit
@pytest.mark.parametrize("dynamics_name, dynamics", available_dynamics.items())
@pytest.mark.parametrize("drone", available_drones)
def test_dynamics_parameter_loading(dynamics_name: str, dynamics: Callable, drone: str) -> None:
"""Check that parameters can be loaded for all available dynamics and drones."""
load_params(dynamics, drone)


@pytest.mark.unit
Expand Down
Loading