mdp
模块:
| 名称 | 描述 |
|---|---|
curriculums |
|
observations |
|
类:
| 名称 | 描述 |
|---|---|
FlightActionMapper |
Map batched normalized actions into controller targets, wrench, or RPM. |
FlightMappingConfig |
Mapping-range configuration for normalized action scaling. |
Mixer |
Map batched thrust and moment demands to rotor speed commands. |
AerodynamicEffects |
Compute drag, ground effect, and planar near-wall effect in batches. |
AerodynamicEffectsCfg |
Environment-specific aerodynamic-effect configuration. |
VehicleParams |
Generic multi-rotor vehicle physics. |
RotorDynamics |
Batched motor dynamics model for rotor thrust and torque. |
FlightControlAction |
Body torque control action term. |
FlightControlActionCfg |
See :class: |
HelixTrajectory |
Batched helix trajectory. |
LemniscateTrajectory |
Batched Bernoulli lemniscate trajectory. |
LissajousTrajectory |
Batched three-dimensional Lissajous trajectory. |
RectangleTrajectory |
Batched constant-speed rectangle trajectory in the horizontal plane. |
RandomTrajectoryCommand |
Trajectory command generator with randomized type and parameters per environment. |
RandomTrajectoryCommandCfg |
Configuration for randomized trajectory commands. |
modify_reward_weight_linearly |
Curriculum term that linearly updates a reward weight during training. |
函数:
| 名称 | 描述 |
|---|---|
died |
Termination condition based on the robot's height. |
root_rotmat_w_flat |
Rotation matrix of the root in world frame, flattened to a 9D vector. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
ACTION_KEY_ORDER |
Stable policy-action field order derived from the shared controller schema. |
ACTION_KEY_ORDER
module-attribute
ACTION_KEY_ORDER = tuple(ControllerState.__annotations__)
Stable policy-action field order derived from the shared controller schema.
Only fields present in the active control mask consume action slices.
FlightActionMapper
FlightActionMapper(control_mode: str, params: VehicleParams = VehicleParams(), mapping: FlightMappingConfig | None = None, control_mask: dict | None = None, num_envs: int = 1, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None)
Map batched normalized actions into controller targets, wrench, or RPM.
Initialize the batched action mapper and backend namespace.
方法:
| 名称 | 描述 |
|---|---|
randomize |
Randomize. |
action_to_collective_acc |
Action to collective acc. |
collective_acc_to_thrust |
Collective acc to thrust. |
action_to_collective_thrust |
Action to collective thrust. |
decode_action |
Decode normalized batched action into a runtime-neutral control request. |
map_action |
Resolve normalized batched action into simulation rotor RPM commands. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
requires_controller |
bool
|
Requires controller. |
requires_controller
property
requires_controller: bool
Requires controller.
randomize
randomize(env_ids=None, randomization: dict | None = None)
Randomize.
action_to_collective_acc
action_to_collective_acc(action: ArrayLike, mixer) -> ArrayLike
Action to collective acc.
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
The total collective acceleration array. |
collective_acc_to_thrust
collective_acc_to_thrust(collective_acc: ArrayLike) -> ArrayLike
Collective acc to thrust.
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
The total thrust array. |
action_to_collective_thrust
action_to_collective_thrust(action: ArrayLike, mixer) -> ArrayLike
Action to collective thrust.
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
The total thrust array. |
decode_action
decode_action(action: ArrayLike, mixer, *, state: ControllerState | None = None) -> FlightMapping
Decode normalized batched action into a runtime-neutral control request.
返回:
| 类型 | 描述 |
|---|---|
FlightMapping
|
FlightMapping dictionary containing control requests. |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If state is missing when required for control mode. |
map_action
map_action(action: ArrayLike, mixer, *, state: ControllerState | None = None, flight_controller: ControllerBase | None = None) -> FlightMapping
Resolve normalized batched action into simulation rotor RPM commands.
返回:
| 类型 | 描述 |
|---|---|
FlightMapping
|
FlightMapping dictionary containing RPM commands and wrench details. |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If flight_controller is missing for mapped modes. |
FlightMappingConfig
dataclass
FlightMappingConfig(velocity_range: tuple[float, float, float] | None = (3.0, 3.0, 1.5), acceleration_range: tuple[float, float, float] | None = (3.0, 3.0, 2.0), attitude_range: tuple[float, float, float] | None = None, body_rate_range: tuple[float, float, float] | None = (2.0, 2.0, 2.0), rel_rotation: bool = False, rotation_step_len: float | None = None)
Mapping-range configuration for normalized action scaling.
方法:
| 名称 | 描述 |
|---|---|
from_params |
Build mapping ranges from vehicle parameters. |
resolve |
Resolve config overrides into concrete mapping ranges. |
from_params
classmethod
from_params(params: VehicleParams) -> FlightMappingConfig
Build mapping ranges from vehicle parameters.
返回:
| 类型 | 描述 |
|---|---|
FlightMappingConfig
|
Instantiated FlightMappingConfig object. |
resolve
resolve(params: VehicleParams) -> FlightMappingConfig
Resolve config overrides into concrete mapping ranges.
返回:
| 类型 | 描述 |
|---|---|
FlightMappingConfig
|
Resolved FlightMappingConfig object. |
Mixer
Mixer(params: VehicleParams = VehicleParams(), num_envs: int = 1, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None, allocation_mode: Literal['pinv', 'saturation'] = 'pinv')
Map batched thrust and moment demands to rotor speed commands.
The default "pinv" allocator applies direct pseudo-inverse allocation.
"saturation" enables a staged trim strategy: roll/pitch authority is
trimmed first if needed, and yaw authority is allocated from the remaining
rotor-speed margin.
Initialize the mixer matrix and backend namespace.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
VehicleParams
|
Vehicle parameters used to build the allocation matrix. |
VehicleParams()
|
|
int
|
Number of parallel environments represented by the batch. |
1
|
|
Optional backend device, mainly used by Torch. |
None
|
|
|
BackendName | None
|
Explicit Array API backend. If omitted, NumPy is used when
|
None
|
|
ModuleType | None
|
Pre-resolved Array API namespace. Overrides |
None
|
|
Literal['pinv', 'saturation']
|
|
'pinv'
|
方法:
| 名称 | 描述 |
|---|---|
randomize |
Randomize mixer parameters for selected environments. |
calculate_rotor_commands |
Allocate |
randomize
randomize(env_ids=None, randomization: dict | None = None)
Randomize mixer parameters for selected environments.
calculate_rotor_commands
calculate_rotor_commands(control: ArrayLike) -> ArrayLike
Allocate [thrust, roll, pitch, yaw] controls to rotor RPM.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ArrayLike
|
Batched control array with shape |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
Batched rotor speed magnitudes with shape |
AerodynamicEffects
AerodynamicEffects(params: VehicleParams = VehicleParams(), cfg: AerodynamicEffectsCfg | None = None, num_envs: int = 1, num_rotors: int = 4, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None)
Compute drag, ground effect, and planar near-wall effect in batches.
Surface geometry is represented in each environment's local world frame. Rotor-force increments, body forces, and force telemetry are represented in the vehicle body frame. The model owns no simulator objects and can therefore be shared by NumPy, Torch, JAX, and CuPy callers.
Initialize coefficients, plane geometry, and telemetry buffers.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
VehicleParams
|
Vehicle physical and aerodynamic coefficients. |
VehicleParams()
|
|
AerodynamicEffectsCfg | None
|
Environment-specific switches, wind, and plane geometry. |
None
|
|
int
|
Number of parallel simulation environments. |
1
|
|
int
|
Number of rotors per environment. |
4
|
|
Optional backend device, mainly used by Torch. |
None
|
|
|
BackendName | None
|
Explicit Array API backend name. |
None
|
|
ModuleType | None
|
Pre-resolved Array API namespace. Overrides |
None
|
方法:
| 名称 | 描述 |
|---|---|
randomize |
Sample per-environment aerodynamic state for selected environments. |
set_external_force |
Set one shared or per-environment world-frame external force. |
set_wall_plane |
Set one shared or per-environment wall plane. |
update |
Compute rotor-force increments and root-body force for one simulation step. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
enabled |
bool
|
Whether any aerodynamic effect is enabled. |
enabled
property
enabled: bool
Whether any aerodynamic effect is enabled.
randomize
randomize(env_ids: ArrayLike | list[int] | slice | None = None, parameter_ranges: dict[str, tuple[ArrayLike, ArrayLike]] | None = None, effect_probabilities: dict[str, float] | None = None, effect_scale_ranges: dict[str, tuple[ArrayLike, ArrayLike]] | None = None) -> None
Sample per-environment aerodynamic state for selected environments.
Parameter ranges are absolute values rather than multipliers. Effect
probabilities create exact per-episode on/off masks, while scale ranges
multiply the corresponding computed force increment. If every optional
argument is omitted, configuration is read from
params.randomization["aerodynamics"].
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ArrayLike | list[int] | slice | None
|
Environment indices to resample, or all environments. |
None
|
|
dict[str, tuple[ArrayLike, ArrayLike]] | None
|
Absolute ranges for aerodynamic coefficients. |
None
|
|
dict[str, float] | None
|
Bernoulli probability for each effect. |
None
|
|
dict[str, tuple[ArrayLike, ArrayLike]] | None
|
Multiplicative force-scale range per effect. |
None
|
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If a key, probability, or physical range is invalid. |
set_external_force
set_external_force(external_force_w: ArrayLike) -> None
Set one shared or per-environment world-frame external force.
set_wall_plane
set_wall_plane(point_w: ArrayLike, normal_w: ArrayLike) -> None
Set one shared or per-environment wall plane.
Moving-surface scenarios can call this before :meth:update to
update the analytic plane pose.
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If any wall normal is zero, near-zero, or non-finite. |
update
update(rotor_thrusts: ArrayLike, rotor_positions_w: ArrayLike, rotor_axes_b: ArrayLike, body_velocity_b: ArrayLike, body_rotation_wb: ArrayLike) -> tuple[ArrayLike, ArrayLike]
Compute rotor-force increments and root-body force for one simulation step.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ArrayLike
|
Positive rotor thrust magnitudes, shape |
必需 |
|
ArrayLike
|
Rotor centers in environment-local world frame,
shape |
必需 |
|
ArrayLike
|
Rotor positive-thrust axes in vehicle body frame, shape
|
必需 |
|
ArrayLike
|
Root-body velocity in the vehicle body frame,
shape |
必需 |
|
ArrayLike
|
Body-to-world rotation matrices, shape
|
必需 |
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
Tuple of per-rotor vehicle-body-frame force increments |
ArrayLike
|
and root-body-frame drag plus prescribed force |
AerodynamicEffectsCfg
dataclass
AerodynamicEffectsCfg(*, enable_drag: bool = False, enable_external_force: bool = False, enable_ground_effect: bool = False, enable_wall_effect: bool = False, external_force_w: tuple[float, float, float] = (0.0, 0.0, 0.0), ground_height: float = 0.0, max_ground_effect_gain: float = 2.0, wall_plane_point_w: tuple[float, float, float] = (0.0, 0.0, 0.0), wall_plane_normal_w: tuple[float, float, float] = (1.0, 0.0, 0.0), max_surface_distance: float = 5.0)
Environment-specific aerodynamic-effect configuration.
Plane coordinates use each simulator environment's local world frame. Effects default to disabled so existing tasks retain their current physics.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
enable_drag |
bool
|
Apply body-axis linear drag. |
enable_external_force |
bool
|
Apply the configured world-frame external force. |
enable_ground_effect |
bool
|
Augment per-rotor thrust near a horizontal ground plane. |
enable_wall_effect |
bool
|
Apply per-rotor forces near the configured wall plane. |
external_force_w |
tuple[float, float, float]
|
Constant environment-local world-frame external force (N). |
ground_height |
float
|
Height of the analytic horizontal ground plane (m). |
max_ground_effect_gain |
float
|
Maximum ground-effect thrust multiplier used near the model singularity. |
wall_plane_point_w |
tuple[float, float, float]
|
One point on the analytic wall plane (m). |
wall_plane_normal_w |
tuple[float, float, float]
|
Wall-plane unit-normal direction; either side of the plane is valid. |
max_surface_distance |
float
|
Distance beyond which surface effects are exactly disabled (m). |
enable_drag
class-attribute
instance-attribute
enable_drag: bool = False
Apply body-axis linear drag.
enable_external_force
class-attribute
instance-attribute
enable_external_force: bool = False
Apply the configured world-frame external force.
enable_ground_effect
class-attribute
instance-attribute
enable_ground_effect: bool = False
Augment per-rotor thrust near a horizontal ground plane.
enable_wall_effect
class-attribute
instance-attribute
enable_wall_effect: bool = False
Apply per-rotor forces near the configured wall plane.
external_force_w
class-attribute
instance-attribute
external_force_w: tuple[float, float, float] = (0.0, 0.0, 0.0)
Constant environment-local world-frame external force (N).
ground_height
class-attribute
instance-attribute
ground_height: float = 0.0
Height of the analytic horizontal ground plane (m).
max_ground_effect_gain
class-attribute
instance-attribute
max_ground_effect_gain: float = 2.0
Maximum ground-effect thrust multiplier used near the model singularity.
wall_plane_point_w
class-attribute
instance-attribute
wall_plane_point_w: tuple[float, float, float] = (0.0, 0.0, 0.0)
One point on the analytic wall plane (m).
wall_plane_normal_w
class-attribute
instance-attribute
wall_plane_normal_w: tuple[float, float, float] = (1.0, 0.0, 0.0)
Wall-plane unit-normal direction; either side of the plane is valid.
max_surface_distance
class-attribute
instance-attribute
max_surface_distance: float = 5.0
Distance beyond which surface effects are exactly disabled (m).
VehicleParams
dataclass
VehicleParams(*, rho: float = 1.184, g: float = 9.81, sim_dt: float = 0.01, step_dt: float = 0.01, randomization: VehicleRandomization = VehicleRandomization(), mass: float = 2.1, inertia: list = (lambda: [[0.015, 0.0, 0.0], [0.0, 0.0348, 0.0], [0.0, 0.0, 0.042503]])(), x: float = 0.0952, y: float = 0.114423, h: float = -0.0125, alpha: float = math.radians(8.0), diameter: float = 0.476, drag_coefficients: tuple[float, float, float] = (0.1, 0.1, 0.1), ground_effect_k: float = 0.171, wall_effect_a1: float = 0.21, wall_effect_b1: float = 0.34, wall_effect_a2: float = 0.06, wall_effect_b2: float = 0.54, r_p: float = 0.0775, Ct: float = 0.666, Cq: float = 0.0716, theta0: float = math.radians(14.6), thetaTip: float = math.radians(6.8), theta1: float = math.nan, lock: float = 0.6051, cT: float = math.nan, cM: float = math.nan, spin_dir: tuple[float, float, float, float] = (1.0, 1.0, -1.0, -1.0), tau_f: float = 0.01, tau_m: float = 0.05, max_rpm: float = 10000.0, init_rpm: float = math.nan, rotor_rpm_rate_limit: float = 50000.0, tau_up: float = math.nan, tau_down: float = math.nan, mpc_xy_vel_max: float = 12.0, mpc_z_vel_max_up: float = 3.0, mpc_z_vel_max_dn: float = 1.5, mpc_acc_hor_max: float = 5.0, mpc_acc_up_max: float = 4.0, mpc_acc_down_max: float = 3.0, mpc_man_tilt_max: float = math.radians(35.0), mc_rollrate_max: float = math.radians(220.0), mc_pitchrate_max: float = math.radians(220.0), mc_yawrate_max: float = math.radians(200.0))
Generic multi-rotor vehicle physics.
The base class carries LAV2-compatible defaults for the shared multi-rotor
parameters so that VehicleParams() continues to produce a working
LAV2-flavoured flight configuration without the ground chassis (2.1 kg).
Concrete subclasses add robot-specific locomotion and geometry:
TrackVehicleParams— LAV2: tracked ground locomotion + ducted airframeTiltWheelVehicleParams— ATMO: tilting arms + two side motors whose belt transmissions synchronize four wheel shells
方法:
| 名称 | 描述 |
|---|---|
__post_init__ |
Calculate derived parameters and resolve default sentinels. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
rho |
float
|
Air density (kg/m³). |
g |
float
|
Gravitational acceleration (m/s²). |
sim_dt |
float
|
Simulation time step (s). |
step_dt |
float
|
Control time step (s). |
randomization |
VehicleRandomization
|
Per-component runtime-randomization configuration. |
mass |
float
|
Total vehicle mass (kg); concrete robot subclasses may override it. |
inertia |
list
|
Vehicle inertia matrix at its center of mass (kg*m^2). |
x |
float
|
Arm length in x — rotor moment-arm for roll (m). |
y |
float
|
Arm length in y — rotor moment-arm for pitch (m). |
h |
float
|
CG height below rotor plane (m, negative = below). |
alpha |
float
|
Duct / rotor cant angle about y-axis (rad — 0 for flat rotors like ATMO). |
diameter |
float
|
Overall vehicle diameter (m). |
drag_coefficients |
tuple[float, float, float]
|
Linear body-axis drag coefficients (N·s/m). |
ground_effect_k |
float
|
Empirical ground-effect distance coefficient for the target multirotor. |
wall_effect_a1 |
float
|
Near-wall lateral-force amplitude fitted by Ding et al. (2023). |
wall_effect_b1 |
float
|
Near-wall lateral-force exponential base fitted by Ding et al. (2023). |
wall_effect_a2 |
float
|
Near-wall vertical-thrust amplitude fitted by Ding et al. (2023). |
wall_effect_b2 |
float
|
Near-wall vertical-thrust exponential base fitted by Ding et al. (2023). |
r_p |
float
|
Propeller radius (m). |
Ct |
float
|
Thrust coefficient (blade-element). |
Cq |
float
|
Torque coefficient (blade-element). |
theta0 |
float
|
Blade root pitch angle (rad). |
thetaTip |
float
|
Blade tip pitch angle (rad). |
theta1 |
float
|
Blade twist (rad), defaults to theta0 - thetaTip. |
lock |
float
|
Lock number. |
cT |
float
|
Thrust coefficient T = cT·rpm² (N / rpm²); defaults from Ct. |
cM |
float
|
Reaction-torque coefficient M = cM·rpm² (N·m / rpm²); defaults from Cq. |
spin_dir |
tuple[float, float, float, float]
|
Rotor spin direction signs; + means clockwise, - means counter-clockwise. |
tau_f |
float
|
Motor filter time constant (s). |
tau_m |
float
|
Legacy motor time constant (s). |
max_rpm |
float
|
Maximum rotor speed (rpm — LAV2 default). |
init_rpm |
float
|
Initial rotor speed — defaults to 0.2·max_rpm. |
rotor_rpm_rate_limit |
float
|
Rotor-speed rate-of-change limit (rpm/s). |
tau_up |
float
|
Motor spin-up time constant (s), defaults to tau_m. |
tau_down |
float
|
Motor spin-down time constant (s), defaults to tau_m. |
mpc_xy_vel_max |
float
|
Maximum horizontal velocity setpoint magnitude in m/s (0 - 20). |
mpc_z_vel_max_up |
float
|
Maximum upward velocity setpoint in m/s (0.5 - 8). |
mpc_z_vel_max_dn |
float
|
Maximum downward velocity setpoint magnitude in m/s (0.5 - 4). |
mpc_acc_hor_max |
float
|
Maximum horizontal acceleration setpoint magnitude in m/s^2 (2 - 15). |
mpc_acc_up_max |
float
|
Maximum upward acceleration setpoint in m/s^2 (2 - 15). |
mpc_acc_down_max |
float
|
Maximum downward acceleration setpoint magnitude in m/s^2 (2 - 15). |
mpc_man_tilt_max |
float
|
Maximum manual tilt angle in radians (deg: 0 - 90). |
mc_rollrate_max |
float
|
Maximum roll-rate setpoint in rad/s (deg/s: 0 - 1800). |
mc_pitchrate_max |
float
|
Maximum pitch-rate setpoint in rad/s (deg/s: 0 - 1800). |
mc_yawrate_max |
float
|
Maximum yaw-rate setpoint in rad/s (deg/s: 0 - 1800). |
rho
class-attribute
instance-attribute
rho: float = 1.184
Air density (kg/m³).
g
class-attribute
instance-attribute
g: float = 9.81
Gravitational acceleration (m/s²).
sim_dt
class-attribute
instance-attribute
sim_dt: float = 0.01
Simulation time step (s).
step_dt
class-attribute
instance-attribute
step_dt: float = 0.01
Control time step (s).
randomization
class-attribute
instance-attribute
randomization: VehicleRandomization = field(default_factory=VehicleRandomization)
Per-component runtime-randomization configuration.
mass
class-attribute
instance-attribute
mass: float = 2.1
Total vehicle mass (kg); concrete robot subclasses may override it.
inertia
class-attribute
instance-attribute
inertia: list = field(default_factory=lambda: [[0.015, 0.0, 0.0], [0.0, 0.0348, 0.0], [0.0, 0.0, 0.042503]])
Vehicle inertia matrix at its center of mass (kg*m^2).
x
class-attribute
instance-attribute
x: float = 0.0952
Arm length in x — rotor moment-arm for roll (m).
y
class-attribute
instance-attribute
y: float = 0.114423
Arm length in y — rotor moment-arm for pitch (m).
h
class-attribute
instance-attribute
h: float = -0.0125
CG height below rotor plane (m, negative = below).
alpha
class-attribute
instance-attribute
alpha: float = math.radians(8.0)
Duct / rotor cant angle about y-axis (rad — 0 for flat rotors like ATMO).
diameter
class-attribute
instance-attribute
diameter: float = 0.476
Overall vehicle diameter (m).
drag_coefficients
class-attribute
instance-attribute
drag_coefficients: tuple[float, float, float] = (0.1, 0.1, 0.1)
Linear body-axis drag coefficients (N·s/m).
ground_effect_k
class-attribute
instance-attribute
ground_effect_k: float = 0.171
Empirical ground-effect distance coefficient for the target multirotor.
wall_effect_a1
class-attribute
instance-attribute
wall_effect_a1: float = 0.21
Near-wall lateral-force amplitude fitted by Ding et al. (2023).
wall_effect_b1
class-attribute
instance-attribute
wall_effect_b1: float = 0.34
Near-wall lateral-force exponential base fitted by Ding et al. (2023).
wall_effect_a2
class-attribute
instance-attribute
wall_effect_a2: float = 0.06
Near-wall vertical-thrust amplitude fitted by Ding et al. (2023).
wall_effect_b2
class-attribute
instance-attribute
wall_effect_b2: float = 0.54
Near-wall vertical-thrust exponential base fitted by Ding et al. (2023).
r_p
class-attribute
instance-attribute
r_p: float = 0.0775
Propeller radius (m).
Ct
class-attribute
instance-attribute
Ct: float = 0.666
Thrust coefficient (blade-element).
Cq
class-attribute
instance-attribute
Cq: float = 0.0716
Torque coefficient (blade-element).
theta0
class-attribute
instance-attribute
theta0: float = math.radians(14.6)
Blade root pitch angle (rad).
thetaTip
class-attribute
instance-attribute
thetaTip: float = math.radians(6.8)
Blade tip pitch angle (rad).
theta1
class-attribute
instance-attribute
theta1: float = math.nan
Blade twist (rad), defaults to theta0 - thetaTip.
lock
class-attribute
instance-attribute
lock: float = 0.6051
Lock number.
cT
class-attribute
instance-attribute
cT: float = math.nan
Thrust coefficient T = cT·rpm² (N / rpm²); defaults from Ct.
cM
class-attribute
instance-attribute
cM: float = math.nan
Reaction-torque coefficient M = cM·rpm² (N·m / rpm²); defaults from Cq.
spin_dir
class-attribute
instance-attribute
spin_dir: tuple[float, float, float, float] = (1.0, 1.0, -1.0, -1.0)
Rotor spin direction signs; + means clockwise, - means counter-clockwise.
LAV2 defaults to rotors 0/1 clockwise and 2/3 counter-clockwise, so the
signs are (+,+,-,-).
tau_f
class-attribute
instance-attribute
tau_f: float = 0.01
Motor filter time constant (s).
tau_m
class-attribute
instance-attribute
tau_m: float = 0.05
Legacy motor time constant (s).
max_rpm
class-attribute
instance-attribute
max_rpm: float = 10000.0
Maximum rotor speed (rpm — LAV2 default).
init_rpm
class-attribute
instance-attribute
init_rpm: float = math.nan
Initial rotor speed — defaults to 0.2·max_rpm.
rotor_rpm_rate_limit
class-attribute
instance-attribute
rotor_rpm_rate_limit: float = 50000.0
Rotor-speed rate-of-change limit (rpm/s).
tau_up
class-attribute
instance-attribute
tau_up: float = math.nan
Motor spin-up time constant (s), defaults to tau_m.
tau_down
class-attribute
instance-attribute
tau_down: float = math.nan
Motor spin-down time constant (s), defaults to tau_m.
mpc_xy_vel_max
class-attribute
instance-attribute
mpc_xy_vel_max: float = 12.0
Maximum horizontal velocity setpoint magnitude in m/s (0 - 20).
mpc_z_vel_max_up
class-attribute
instance-attribute
mpc_z_vel_max_up: float = 3.0
Maximum upward velocity setpoint in m/s (0.5 - 8).
mpc_z_vel_max_dn
class-attribute
instance-attribute
mpc_z_vel_max_dn: float = 1.5
Maximum downward velocity setpoint magnitude in m/s (0.5 - 4).
mpc_acc_hor_max
class-attribute
instance-attribute
mpc_acc_hor_max: float = 5.0
Maximum horizontal acceleration setpoint magnitude in m/s^2 (2 - 15).
mpc_acc_up_max
class-attribute
instance-attribute
mpc_acc_up_max: float = 4.0
Maximum upward acceleration setpoint in m/s^2 (2 - 15).
mpc_acc_down_max
class-attribute
instance-attribute
mpc_acc_down_max: float = 3.0
Maximum downward acceleration setpoint magnitude in m/s^2 (2 - 15).
mpc_man_tilt_max
class-attribute
instance-attribute
mpc_man_tilt_max: float = math.radians(35.0)
Maximum manual tilt angle in radians (deg: 0 - 90).
mc_rollrate_max
class-attribute
instance-attribute
mc_rollrate_max: float = math.radians(220.0)
Maximum roll-rate setpoint in rad/s (deg/s: 0 - 1800).
mc_pitchrate_max
class-attribute
instance-attribute
mc_pitchrate_max: float = math.radians(220.0)
Maximum pitch-rate setpoint in rad/s (deg/s: 0 - 1800).
mc_yawrate_max
class-attribute
instance-attribute
mc_yawrate_max: float = math.radians(200.0)
Maximum yaw-rate setpoint in rad/s (deg/s: 0 - 1800).
__post_init__
__post_init__()
Calculate derived parameters and resolve default sentinels.
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If spin_dir does not contain four signs. |
RotorDynamics
RotorDynamics(params: VehicleParams = VehicleParams(), num_envs: int = 1, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None)
Bases: DynamicsBase
Batched motor dynamics model for rotor thrust and torque.
This backend-agnostic Array API implementation keeps
the same low-pass motor response, RPM rate limiting, quadratic thrust/torque
coefficients, and motor-direction torque signs while operating on
(num_envs, 4) batches.
Initialize rotor dynamics and backend arrays.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
VehicleParams
|
Vehicle parameters used by the motor model. |
VehicleParams()
|
|
int
|
Number of parallel environments represented by the batch. |
1
|
|
Optional backend device, mainly used by Torch. |
None
|
|
|
BackendName | None
|
Explicit Array API backend name. |
None
|
|
ModuleType | None
|
Pre-resolved Array API namespace. Overrides |
None
|
方法:
| 名称 | 描述 |
|---|---|
randomize |
Randomize motor parameters for selected environments. |
update |
Update motor state and return thrust/torque outputs. |
reset |
Reset selected environments to initial rotor speeds. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
params |
VehicleParams
|
Vehicle parameters for the dynamics model. |
params
instance-attribute
params: VehicleParams = params
Vehicle parameters for the dynamics model.
randomize
randomize(env_ids=None, randomization: dict[str, tuple[float, float]] | None = None)
Randomize motor parameters for selected environments.
update
update(commands: ArrayLike) -> ArrayLike
Update motor state and return thrust/torque outputs.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ArrayLike
|
Desired rotor speeds with shape |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
Batched thrusts followed by torques with shape |
reset
reset(env_ids=None)
Reset selected environments to initial rotor speeds.
FlightControlAction
FlightControlAction(cfg: FlightControlActionCfg, env: ManagerBasedRLEnv)
Bases: ActionTerm
Body torque control action term.
This action term applies a wrench to the drone body frame based on action commands
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
cfg |
FlightControlActionCfg
|
The configuration of the action term. |
aerodynamics |
AerodynamicEffects
|
Shared aerodynamic model and force telemetry. |
IO_descriptor |
GenericActionIODescriptor
|
The IO descriptor of the LAV2 flight control action term. |
cfg
instance-attribute
cfg: FlightControlActionCfg = cfg
The configuration of the action term.
aerodynamics
property
aerodynamics: AerodynamicEffects
Shared aerodynamic model and force telemetry.
IO_descriptor
property
IO_descriptor: GenericActionIODescriptor
The IO descriptor of the LAV2 flight control action term.
FlightControlActionCfg
Bases: ActionTermCfg
See :class:FlightControlAction for more details.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
class_type |
type[ActionTerm]
|
Class of the action term. |
asset_name |
str
|
Name of the asset in the environment for which the commands are generated. |
rotor_body_names |
tuple[str, ...]
|
Ordered rotor body names matching controller/mixer rotor order. |
root_body_name |
str | None
|
Body receiving drag and prescribed force; defaults to the articulation root. |
params |
VehicleParams
|
Vehicle parameters. |
gains |
dict | None
|
Optional gains configuration for the flight controller. |
limits |
dict | None
|
Optional command-limit configuration passed directly to the flight controller. |
controller |
str
|
Controller class name. Options: 'FlightController' (PID), 'GeoControl'. |
control_mode |
str
|
Control mode, options: cmd_motor_thrusts, cmd_motor_speeds, cmd_ctbm, cmd_ctbr, cmd_ctatt, cmd_ctatt_euler, cmd_ctatt_quat, cmd_ctatt_rotmat, cmd_ctatt_rotvec, cmd_acc, cmd_vel, cmd_vel_ffacc, cmd_pos. |
mapping |
FlightMappingConfig
|
Action-mapping range overrides resolved against |
aerodynamics |
AerodynamicEffectsCfg
|
Optional drag, external-force, ground-effect, and wall configuration. |
class_type
class-attribute
instance-attribute
class_type: type[ActionTerm] = FlightControlAction
Class of the action term.
asset_name
class-attribute
instance-attribute
asset_name: str = 'robot'
Name of the asset in the environment for which the commands are generated.
rotor_body_names
class-attribute
instance-attribute
rotor_body_names: tuple[str, ...] = ('rotor0', 'rotor1', 'rotor2', 'rotor3')
Ordered rotor body names matching controller/mixer rotor order.
root_body_name
class-attribute
instance-attribute
root_body_name: str | None = None
Body receiving drag and prescribed force; defaults to the articulation root.
params
class-attribute
instance-attribute
params: VehicleParams = VehicleParams()
Vehicle parameters.
gains
class-attribute
instance-attribute
gains: dict | None = None
Optional gains configuration for the flight controller.
limits
class-attribute
instance-attribute
limits: dict | None = None
Optional command-limit configuration passed directly to the flight controller.
controller
class-attribute
instance-attribute
controller: str = 'FlightController'
Controller class name. Options: 'FlightController' (PID), 'GeoControl'.
control_mode
class-attribute
instance-attribute
control_mode: str = 'cmd_motor_speeds'
Control mode, options: cmd_motor_thrusts, cmd_motor_speeds, cmd_ctbm, cmd_ctbr, cmd_ctatt, cmd_ctatt_euler, cmd_ctatt_quat, cmd_ctatt_rotmat, cmd_ctatt_rotvec, cmd_acc, cmd_vel, cmd_vel_ffacc, cmd_pos.
rotorpy ref: - https://github.com/spencerfolk/rotorpy/blob/main/rotorpy/learning/quadrotor_environments.py#L319C1-L350C12 - https://github.com/spencerfolk/rotorpy/blob/main/rotorpy/vehicles/multirotor.py#L997
TODO: also align control modes with px4, see: https://docs.px4.io/v1.14/en/flight_modes/offboard (version is unclear ATM)
mapping
class-attribute
instance-attribute
mapping: FlightMappingConfig = FlightMappingConfig()
Action-mapping range overrides resolved against params.
The default mapping is an intentional policy-facing behavior rather than a direct reflection of the parameter-derived controller ranges.
aerodynamics
class-attribute
instance-attribute
aerodynamics: AerodynamicEffectsCfg = AerodynamicEffectsCfg()
Optional drag, external-force, ground-effect, and wall configuration.
HelixTrajectory
dataclass
HelixTrajectory(*, num_envs: int = 1, device: str | None = None, backend: BackendName | None = None, xp: ModuleType | None = None, initialize: bool = True, yaw_from_velocity: bool = True, fixed_yaw: ArrayLike | float = 0.0, attitude: ArrayLike | tuple[float, float] = (0.0, 0.0), body_rate: ArrayLike | tuple[float, float] = (0.0, 0.0), center: ArrayLike | tuple[float, float, float] = (0.0, 0.0, 1.0), radius: ArrayLike | float = 1.0, omega: ArrayLike | float = 0.5, z_amplitude: ArrayLike | float = 0.0, z_frequency: ArrayLike | float = 1.0, z_phase: ArrayLike | float = 0.0)
Bases: SpatialTrajectory
Batched helix trajectory.
方法:
| 名称 | 描述 |
|---|---|
sample_heading |
Sample batched yaw and yaw-rate references for time values |
build_target |
Assemble a batched dict target from motion primitives. |
__post_init__ |
Initialize HelixTrajectory. |
sample |
Sample the helix at time t. |
sample_heading
sample_heading(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> tuple[ArrayLike, ArrayLike]
Sample batched yaw and yaw-rate references for time values t.
返回:
| 类型 | 描述 |
|---|---|
tuple[ArrayLike, ArrayLike]
|
Tuple of yaw and yaw_rate arrays. |
build_target
build_target(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> ControllerTarget
Assemble a batched dict target from motion primitives.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The assembled controller target dictionary. |
__post_init__
__post_init__()
Initialize HelixTrajectory.
sample
sample(t: ArrayLike) -> ControllerTarget
LemniscateTrajectory
dataclass
LemniscateTrajectory(*, num_envs: int = 1, device: str | None = None, backend: BackendName | None = None, xp: ModuleType | None = None, initialize: bool = True, yaw_from_velocity: bool = True, fixed_yaw: ArrayLike | float = 0.0, attitude: ArrayLike | tuple[float, float] = (0.0, 0.0), body_rate: ArrayLike | tuple[float, float] = (0.0, 0.0), center: ArrayLike | tuple[float, float, float] = (0.0, 0.0, 1.0), scale: ArrayLike | float = 1.0, omega: ArrayLike | float = 0.5, z_amplitude: ArrayLike | float = 0.0, z_frequency: ArrayLike | float = 1.0, z_phase: ArrayLike | float = 0.0)
Bases: SpatialTrajectory
Batched Bernoulli lemniscate trajectory.
方法:
| 名称 | 描述 |
|---|---|
sample_heading |
Sample batched yaw and yaw-rate references for time values |
build_target |
Assemble a batched dict target from motion primitives. |
__post_init__ |
Initialize LemniscateTrajectory. |
sample |
Sample the lemniscate at time t. |
sample_heading
sample_heading(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> tuple[ArrayLike, ArrayLike]
Sample batched yaw and yaw-rate references for time values t.
返回:
| 类型 | 描述 |
|---|---|
tuple[ArrayLike, ArrayLike]
|
Tuple of yaw and yaw_rate arrays. |
build_target
build_target(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> ControllerTarget
Assemble a batched dict target from motion primitives.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The assembled controller target dictionary. |
__post_init__
__post_init__()
Initialize LemniscateTrajectory.
sample
sample(t: ArrayLike) -> ControllerTarget
LissajousTrajectory
dataclass
LissajousTrajectory(*, num_envs: int = 1, device: str | None = None, backend: BackendName | None = None, xp: ModuleType | None = None, initialize: bool = True, yaw_from_velocity: bool = True, fixed_yaw: ArrayLike | float = 0.0, attitude: ArrayLike | tuple[float, float] = (0.0, 0.0), body_rate: ArrayLike | tuple[float, float] = (0.0, 0.0), center: ArrayLike | tuple[float, float, float] = (0.0, 0.0, 1.0), amplitude: ArrayLike | tuple[float, float, float] = (1.0, 1.0, 0.2), frequency: ArrayLike | tuple[float, float, float] = (1.0, 2.0, 0.5), phase: ArrayLike | tuple[float, float, float] = (0.0, 0.0, 0.0), omega: ArrayLike | float = 0.5)
Bases: SpatialTrajectory
Batched three-dimensional Lissajous trajectory.
方法:
| 名称 | 描述 |
|---|---|
sample_heading |
Sample batched yaw and yaw-rate references for time values |
build_target |
Assemble a batched dict target from motion primitives. |
__post_init__ |
Initialize LissajousTrajectory. |
sample |
Sample the Lissajous trajectory at time t. |
sample_heading
sample_heading(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> tuple[ArrayLike, ArrayLike]
Sample batched yaw and yaw-rate references for time values t.
返回:
| 类型 | 描述 |
|---|---|
tuple[ArrayLike, ArrayLike]
|
Tuple of yaw and yaw_rate arrays. |
build_target
build_target(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> ControllerTarget
Assemble a batched dict target from motion primitives.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The assembled controller target dictionary. |
__post_init__
__post_init__()
Initialize LissajousTrajectory.
sample
sample(t: ArrayLike) -> ControllerTarget
Sample the Lissajous trajectory at time t.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The sampled controller target. |
RectangleTrajectory
dataclass
RectangleTrajectory(*, num_envs: int = 1, device: str | None = None, backend: BackendName | None = None, xp: ModuleType | None = None, initialize: bool = True, yaw_from_velocity: bool = True, fixed_yaw: ArrayLike | float = 0.0, attitude: ArrayLike | tuple[float, float] = (0.0, 0.0), body_rate: ArrayLike | tuple[float, float] = (0.0, 0.0), center: ArrayLike | tuple[float, float, float] = (0.0, 0.0, 1.0), size: ArrayLike | tuple[float, float] = (2.0, 1.0), speed: ArrayLike | float = 0.5)
Bases: SpatialTrajectory
Batched constant-speed rectangle trajectory in the horizontal plane.
方法:
| 名称 | 描述 |
|---|---|
sample_heading |
Sample batched yaw and yaw-rate references for time values |
build_target |
Assemble a batched dict target from motion primitives. |
__post_init__ |
Initialize RectangleTrajectory. |
sample |
Sample the rectangle trajectory at time t. |
sample_heading
sample_heading(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> tuple[ArrayLike, ArrayLike]
Sample batched yaw and yaw-rate references for time values t.
返回:
| 类型 | 描述 |
|---|---|
tuple[ArrayLike, ArrayLike]
|
Tuple of yaw and yaw_rate arrays. |
build_target
build_target(t: ArrayLike, pos: ArrayLike, vel: ArrayLike, acc: ArrayLike) -> ControllerTarget
Assemble a batched dict target from motion primitives.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The assembled controller target dictionary. |
__post_init__
__post_init__()
Initialize RectangleTrajectory.
sample
sample(t: ArrayLike) -> ControllerTarget
Sample the rectangle trajectory at time t.
返回:
| 类型 | 描述 |
|---|---|
ControllerTarget
|
The sampled controller target. |
RandomTrajectoryCommand
RandomTrajectoryCommand(cfg: RandomTrajectoryCommandCfg, env: ManagerBasedEnv)
Bases: CommandTerm
Trajectory command generator with randomized type and parameters per environment.
RandomTrajectoryCommandCfg
Bases: CommandTermCfg
Configuration for randomized trajectory commands.
modify_reward_weight_linearly
modify_reward_weight_linearly(cfg: CurriculumTermCfg, env: ManagerBasedRLEnv)
Bases: ManagerTermBase
Curriculum term that linearly updates a reward weight during training.
died
died(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot'), min: float = 0.2, max: float = 2.0) -> torch.Tensor
Termination condition based on the robot's height.
root_rotmat_w_flat
root_rotmat_w_flat(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Rotation matrix of the root in world frame, flattened to a 9D vector.