Skip to content

Commit b6b4f89

Browse files
committed
Batch of fixes and changes
- Remove constants - Rename structs to data - Add drag and rotor physics - Decrease interface tolerances - Add gradient tests - Bump drone-models version
1 parent 6d81948 commit b6b4f89

19 files changed

Lines changed: 347 additions & 127 deletions

crazyflow/control/control.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,3 @@ def controllable(step: Array, freq: int, control_steps: Array, control_freq: int
5959
updated.
6060
"""
6161
return ((step - control_steps) >= (freq / control_freq)) | (control_steps == -1)
62-
63-
64-
# TODO: Remove these constants
65-
KF: float = 3.16e-10
66-
PWM2RPM_SCALE: float = 0.2685
67-
PWM2RPM_CONST: float = 4070.3
68-
MIN_PWM: float = 20000
69-
MAX_PWM: float = 65535
70-
MIN_RPM: float = PWM2RPM_SCALE * MIN_PWM + PWM2RPM_CONST
71-
MAX_RPM: float = PWM2RPM_SCALE * MAX_PWM + PWM2RPM_CONST
72-
MIN_THRUST: float = KF * MIN_RPM**2
73-
MAX_THRUST: float = KF * MAX_RPM**2

crazyflow/envs/drone_env.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,37 @@
55
import jax
66
import jax.numpy as jnp
77
import numpy as np
8+
from drone_controllers.mellinger.params import ForceTorqueParams
89
from gymnasium import spaces
910
from gymnasium.vector import AutoresetMode, VectorEnv
1011
from gymnasium.vector.utils import batch_space
1112
from jax import Array
1213
from numpy.typing import NDArray
1314

14-
from crazyflow.control.control import MAX_THRUST, MIN_THRUST, Control
15+
from crazyflow.control.control import Control
1516
from crazyflow.sim import Sim
17+
from crazyflow.sim.data import SimData
1618
from crazyflow.sim.physics import Physics
17-
from crazyflow.sim.structs import SimData
1819
from crazyflow.utils import leaf_replace
1920

2021

21-
def action_space(control_type: Control) -> spaces.Box:
22+
def action_space(control_type: Control, drone_model: str) -> spaces.Box:
2223
"""Select the appropriate action space for a given control type.
2324
2425
Args:
2526
control_type: The desired control mode.
27+
drone_model: Drone model of the environment.
2628
2729
Returns:
2830
The action space.
2931
"""
3032
match control_type:
3133
case Control.attitude:
34+
params = ForceTorqueParams.load(drone_model)
35+
thrust_min, thrust_max = params.thrust_min * 4, params.thrust_max * 4
3236
return spaces.Box(
33-
np.array([4 * MIN_THRUST, -np.pi / 2, -np.pi / 2, -np.pi / 2], dtype=np.float32),
34-
np.array([4 * MAX_THRUST, np.pi / 2, np.pi / 2, np.pi / 2], dtype=np.float32),
37+
np.array([-np.pi / 2, -np.pi / 2, -np.pi / 2, thrust_min], dtype=np.float32),
38+
np.array([np.pi / 2, np.pi / 2, np.pi / 2, thrust_max], dtype=np.float32),
3539
)
3640
case Control.force_torque:
3741
return spaces.Box(-1.0, 1.0, shape=(6,))
@@ -99,7 +103,7 @@ def __init__(
99103
self._marked_for_reset = jnp.zeros((self.sim.n_worlds), dtype=jnp.bool_, device=self.device)
100104

101105
# Define action and observation spaces
102-
self.single_action_space = action_space(self.sim.control)
106+
self.single_action_space = action_space(self.sim.control, self.sim.drone_model)
103107
self.action_space = batch_space(self.single_action_space, self.sim.n_worlds)
104108
self.single_observation_space = spaces.Dict(
105109
{

crazyflow/envs/figure_8_env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from jax import Array
99

1010
from crazyflow.envs.drone_env import DroneEnv
11+
from crazyflow.sim.data import SimData
1112
from crazyflow.sim.physics import Physics
12-
from crazyflow.sim.structs import SimData
1313
from crazyflow.sim.visualize import draw_line, draw_points
1414
from crazyflow.utils import leaf_replace
1515

crazyflow/envs/landing_env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from jax import Array
1010

1111
from crazyflow.envs.drone_env import DroneEnv
12+
from crazyflow.sim.data import SimState
1213
from crazyflow.sim.physics import Physics
13-
from crazyflow.sim.structs import SimState
1414

1515

1616
class LandingEnv(DroneEnv):

crazyflow/envs/reach_pos_env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from jax import Array
1111

1212
from crazyflow.envs.drone_env import DroneEnv
13+
from crazyflow.sim.data import SimData
1314
from crazyflow.sim.physics import Physics
14-
from crazyflow.sim.structs import SimData
1515
from crazyflow.utils import leaf_replace
1616

1717

crazyflow/randomize/randomize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from jax import Array
44

55
from crazyflow.sim import Sim
6-
from crazyflow.sim.structs import SimData
6+
from crazyflow.sim.data import SimData
77
from crazyflow.utils import leaf_replace
88

99

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313
MellingerForceTorqueData,
1414
MellingerStateData,
1515
)
16-
from crazyflow.sim.physics import FirstPrinciplesData, Physics, SoRpyData
16+
from crazyflow.sim.physics import (
17+
FirstPrinciplesData,
18+
Physics,
19+
SoRpyData,
20+
SoRpyRotorData,
21+
SoRpyRotorDragData,
22+
)
1723

1824

1925
@dataclass
@@ -173,6 +179,10 @@ def create(
173179
return FirstPrinciplesData.create(n_worlds, n_drones, drone_model, device)
174180
case Physics.so_rpy:
175181
return SoRpyData.create(n_worlds, n_drones, drone_model, device)
182+
case Physics.so_rpy_rotor:
183+
return SoRpyRotorData.create(n_worlds, n_drones, drone_model, device)
184+
case Physics.so_rpy_rotor_drag:
185+
return SoRpyRotorDragData.create(n_worlds, n_drones, drone_model, device)
176186
case _:
177187
raise ValueError(f"Physics mode {physics} not implemented")
178188

crazyflow/sim/integration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from jax.numpy import vectorize
99
from jax.scipy.spatial.transform import Rotation as R
1010

11-
from crazyflow.sim.structs import SimData
11+
from crazyflow.sim.data import SimData
1212

1313

1414
class Integrator(str, Enum):

0 commit comments

Comments
 (0)