mdp
模块:
| 名称 | 描述 |
|---|---|
actions |
|
commands |
|
events |
|
modifiers |
|
observations |
|
rewards |
|
terminations |
|
类:
| 名称 | 描述 |
|---|---|
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. |
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: |
UniformPoseCommandGlobal |
Command generator that generates pose commands containing a 3-D position and heading. |
UniformPoseCommandGlobalCfg |
Configuration for the uniform 3D-pose command generator. |
UniformVelocityGlobalCommand |
Command generator that generates a velocity command with uniform distribution. |
UniformVelocityGlobalCommandCfg |
Configuration for the uniform velocity command generator. |
UniformBimodalVelocityCommand |
Bimodal velocity command generator with a discrete mode indicator (4+1). |
UniformBimodalVelocityCommandCfg |
Configuration for the bimodal velocity command generator (flight vs ground). |
函数:
| 名称 | 描述 |
|---|---|
randomize_action_term_attr |
Randomize a selected action-term attribute. |
randomize_controller_params |
Randomize controller gains and command limits attached to an action term. |
randomize_mixer_params |
Randomize mixer parameters attached to an action term. |
randomize_rotor_params |
Randomize rotor parameters attached to an action term. |
randomize_mapping_params |
Randomize action-mapper runtime parameters attached to an action term. |
target_pos_b |
Position of target in body frame. |
root_euler_w |
Euler angles of the root in world frame. |
root_axis_angle_w |
Axis-angle of the root in world frame. |
root_rotmat_w_flat |
Rotation matrix of the root in world frame, flattened to a 9D vector. |
lin_vel_l2 |
Penalize base linear velocity using L2 squared kernel. |
ang_vel_l2 |
Penalize base angular velocity using L2 squared kernel. |
pos_error_l2 |
Penalize asset pos from its target pos using L2 squared kernel. |
pos_error_tanh |
Penalize asset pos from its target pos using tanh kernel. |
yaw_error_l2 |
Penalize heading error from target heading using L2 squared kernel. |
yaw_error_tanh |
Penalize heading error from target heading using tanh kernel. |
track_lin_vel_z_exp |
Reward tracking of linear velocity commands (z axis) using exponential kernel. |
track_lin_vel_exp |
Reward tracking of linear velocity commands using exponential kernel. |
track_yaw_vel_exp |
Reward tracking of angular velocity commands (yaw) using exponential kernel. |
hover_tracking |
Penalize deviation of the collective acceleration command from hover. |
bimodal_action_tanh |
Penalize bimodal actions using tanh kernel. |
bimodal_height_tanh |
Penalize bimodal height using tanh kernel. |
contact_impulse |
Penalize excessive contact impulse (rate of change of contact forces). |
bimodal_contacts |
Penalize contacts when switching from flight to ground mode. |
died |
Termination condition based on the robot's height. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
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.
collective_acc_to_thrust
collective_acc_to_thrust(collective_acc: ArrayLike) -> ArrayLike
Collective acc to thrust.
action_to_collective_thrust
action_to_collective_thrust(action: ArrayLike, mixer) -> ArrayLike
Action to collective thrust.
decode_action
decode_action(action: ArrayLike, mixer, *, state: ControllerState | None = None) -> FlightMapping
Decode normalized batched action into a runtime-neutral control request.
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.
FlightMappingConfig
dataclass
FlightMappingConfig(velocity_range: tuple[float, float, float] | None = None, acceleration_range: tuple[float, float, float] | None = None, 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.
resolve
resolve(params: VehicleParams) -> FlightMappingConfig
Resolve config overrides into concrete mapping ranges.
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 |
VehicleParams
dataclass
VehicleParams(*, rho: float = 1.184, g: float = 9.81, sim_dt: float = 0.01, step_dt: float = 0.01, randomization: dict[str, dict[str, tuple[float, float]]] = dict(), 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, Cdx: float = 0.5, 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 track / airframe specifics).
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 |
dict[str, dict[str, tuple[float, float]]]
|
Per-component parameter-randomisation scale ranges. |
mass |
float
|
Total vehicle mass (kg — LAV2 default; override for other robots). |
inertia |
list
|
Inertia matrix (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). |
Cdx |
float
|
Body drag coefficient. |
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: dict[str, dict[str, tuple[float, float]]] = field(default_factory=dict)
Per-component parameter-randomisation scale ranges.
mass
class-attribute
instance-attribute
mass: float = 2.1
Total vehicle mass (kg — LAV2 default; override for other robots).
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]])
Inertia matrix (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).
Cdx
class-attribute
instance-attribute
Cdx: float = 0.5
Body drag coefficient.
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.
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 is the backend-agnostic Array API implementation. It 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.
See :mod:lav2.dynamics.numpy.rotor and :mod:lav2.dynamics.torch.rotor
for the legacy backend-specific implementations.
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. |
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.
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. |
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_pos. |
mapping |
FlightMappingConfig
|
Action-mapping range overrides resolved against |
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.
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_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.
UniformPoseCommandGlobal
UniformPoseCommandGlobal(cfg: UniformPoseCommandGlobalCfg, env: ManagerBasedEnv)
Bases: CommandTerm
Command generator that generates pose commands containing a 3-D position and heading.
The command generator samples uniform 3D positions around the environment origin. The
heading command is either set to point towards the target or is sampled uniformly.
This can be configured through the :attr:UniformPoseCommandGlobalCfg.simple_heading
parameter in the configuration.
Initialize the command generator class.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
UniformPoseCommandGlobalCfg
|
The configuration parameters for the command generator. |
必需 |
|
ManagerBasedEnv
|
The environment object. |
必需 |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
cfg |
UniformPoseCommandGlobalCfg
|
Configuration for the command generator. |
command |
Tensor
|
The desired 3D-pose in base frame. Shape is (num_envs, 4). |
cfg
instance-attribute
cfg: UniformPoseCommandGlobalCfg
Configuration for the command generator.
command
property
command: Tensor
The desired 3D-pose in base frame. Shape is (num_envs, 4).
UniformPoseCommandGlobalCfg
Bases: CommandTermCfg
Configuration for the uniform 3D-pose command generator.
类:
| 名称 | 描述 |
|---|---|
Ranges |
Uniform distribution ranges for the position commands. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
asset_name |
str
|
Name of the asset in the environment for which the commands are generated. |
simple_heading |
bool
|
Whether to use simple heading or not. |
ranges |
Ranges
|
Distribution ranges for the position commands. |
goal_pose_visualizer_cfg |
VisualizationMarkersCfg
|
The configuration for the goal pose visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG. |
asset_name
class-attribute
instance-attribute
asset_name: str = MISSING
Name of the asset in the environment for which the commands are generated.
simple_heading
class-attribute
instance-attribute
simple_heading: bool = MISSING
Whether to use simple heading or not.
If True, the heading is in the direction of the target position.
ranges
class-attribute
instance-attribute
ranges: Ranges = MISSING
Distribution ranges for the position commands.
goal_pose_visualizer_cfg
class-attribute
instance-attribute
goal_pose_visualizer_cfg: VisualizationMarkersCfg = GREEN_ARROW_X_MARKER_CFG.replace(prim_path='/Visuals/Command/pose_goal')
The configuration for the goal pose visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG.
Ranges
Uniform distribution ranges for the position commands.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
pos_x |
tuple[float, float]
|
Range for the x position (in m). |
pos_y |
tuple[float, float]
|
Range for the y position (in m). |
pos_z |
tuple[float, float]
|
Range for the z position (in m). |
heading |
tuple[float, float]
|
Heading range for the position commands (in rad). |
pos_x
class-attribute
instance-attribute
pos_x: tuple[float, float] = MISSING
Range for the x position (in m).
pos_y
class-attribute
instance-attribute
pos_y: tuple[float, float] = MISSING
Range for the y position (in m).
pos_z
class-attribute
instance-attribute
pos_z: tuple[float, float] = MISSING
Range for the z position (in m).
heading
class-attribute
instance-attribute
heading: tuple[float, float] = MISSING
Heading range for the position commands (in rad).
Used only if :attr:simple_heading is False.
UniformVelocityGlobalCommand
UniformVelocityGlobalCommand(cfg: UniformVelocityGlobalCommandCfg, env: ManagerBasedEnv)
Bases: CommandTerm
Command generator that generates a velocity command with uniform distribution.
The command comprises linear velocity in x, y, z directions and an angular velocity around the z-axis. It is given in the robot's base frame.
If the :attr:cfg.heading_command flag is set to True, the angular velocity is computed from the heading
error similar to doing a proportional control on the heading error. The target heading is sampled uniformly
from the provided range. Otherwise, the angular velocity is sampled uniformly from the provided range.
Mathematically, the angular velocity is computed as follows from the heading command:
.. math::
\omega_z = \frac{1}{2} \text{wrap_to_pi}(\theta_{\text{target}} - \theta_{\text{current}})
Initialize the command generator.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
UniformVelocityGlobalCommandCfg
|
The configuration of the command generator. |
必需 |
|
ManagerBasedEnv
|
The environment. |
必需 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If the heading command is active but the heading range is not provided. |
方法:
| 名称 | 描述 |
|---|---|
__str__ |
Return a string representation of the command generator. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
cfg |
UniformVelocityGlobalCommandCfg
|
The configuration of the command generator. |
command |
Tensor
|
The desired base velocity command in the base frame. Shape is (num_envs, 4). |
cfg
instance-attribute
cfg: UniformVelocityGlobalCommandCfg
The configuration of the command generator.
command
property
command: Tensor
The desired base velocity command in the base frame. Shape is (num_envs, 4).
__str__
__str__() -> str
Return a string representation of the command generator.
UniformVelocityGlobalCommandCfg
Bases: CommandTermCfg
Configuration for the uniform velocity command generator.
类:
| 名称 | 描述 |
|---|---|
Ranges |
Uniform distribution ranges for the velocity commands. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
asset_name |
str
|
Name of the asset in the environment for which the commands are generated. |
heading_command |
bool
|
Whether to use heading command or angular velocity command. Defaults to False. |
heading_control_stiffness |
float
|
Scale factor to convert the heading error to angular velocity command. Defaults to 1.0. |
rel_standing_envs |
float
|
The sampled probability of environments that should be standing still. Defaults to 0.0. |
rel_heading_envs |
float
|
The sampled probability of environments where the robots follow the heading-based angular velocity command |
ranges |
Ranges
|
Distribution ranges for the velocity commands. |
goal_vel_visualizer_cfg |
VisualizationMarkersCfg
|
The configuration for the goal velocity visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG. |
current_vel_visualizer_cfg |
VisualizationMarkersCfg
|
The configuration for the current velocity visualization marker. Defaults to BLUE_ARROW_X_MARKER_CFG. |
asset_name
class-attribute
instance-attribute
asset_name: str = MISSING
Name of the asset in the environment for which the commands are generated.
heading_command
class-attribute
instance-attribute
heading_command: bool = False
Whether to use heading command or angular velocity command. Defaults to False.
If True, the angular velocity command is computed from the heading error, where the target heading is sampled uniformly from provided range. Otherwise, the angular velocity command is sampled uniformly from provided range.
heading_control_stiffness
class-attribute
instance-attribute
heading_control_stiffness: float = 1.0
Scale factor to convert the heading error to angular velocity command. Defaults to 1.0.
rel_standing_envs
class-attribute
instance-attribute
rel_standing_envs: float = 0.0
The sampled probability of environments that should be standing still. Defaults to 0.0.
rel_heading_envs
class-attribute
instance-attribute
rel_heading_envs: float = 1.0
The sampled probability of environments where the robots follow the heading-based angular velocity command (the others follow the sampled angular velocity command). Defaults to 1.0.
This parameter is only used if :attr:heading_command is True.
ranges
class-attribute
instance-attribute
ranges: Ranges = MISSING
Distribution ranges for the velocity commands.
goal_vel_visualizer_cfg
class-attribute
instance-attribute
goal_vel_visualizer_cfg: VisualizationMarkersCfg = GREEN_ARROW_X_MARKER_CFG.replace(prim_path='/Visuals/Command/velocity_goal')
The configuration for the goal velocity visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG.
current_vel_visualizer_cfg
class-attribute
instance-attribute
current_vel_visualizer_cfg: VisualizationMarkersCfg = BLUE_ARROW_X_MARKER_CFG.replace(prim_path='/Visuals/Command/velocity_current')
The configuration for the current velocity visualization marker. Defaults to BLUE_ARROW_X_MARKER_CFG.
Ranges
Uniform distribution ranges for the velocity commands.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
lin_vel_x |
tuple[float, float]
|
Range for the linear-x velocity command (in m/s). |
lin_vel_y |
tuple[float, float]
|
Range for the linear-y velocity command (in m/s). |
lin_vel_z |
tuple[float, float]
|
Range for the linear-z velocity command (in m/s). |
ang_vel_z |
tuple[float, float]
|
Range for the angular-z velocity command (in rad/s). |
heading |
tuple[float, float] | None
|
Range for the heading command (in rad). Defaults to None. |
lin_vel_x
class-attribute
instance-attribute
lin_vel_x: tuple[float, float] = MISSING
Range for the linear-x velocity command (in m/s).
lin_vel_y
class-attribute
instance-attribute
lin_vel_y: tuple[float, float] = MISSING
Range for the linear-y velocity command (in m/s).
lin_vel_z
class-attribute
instance-attribute
lin_vel_z: tuple[float, float] = MISSING
Range for the linear-z velocity command (in m/s).
ang_vel_z
class-attribute
instance-attribute
ang_vel_z: tuple[float, float] = MISSING
Range for the angular-z velocity command (in rad/s).
heading
class-attribute
instance-attribute
heading: tuple[float, float] | None = None
Range for the heading command (in rad). Defaults to None.
This parameter is only used if :attr:~UniformVelocityGlobalCommandCfg.heading_command is True.
UniformBimodalVelocityCommand
UniformBimodalVelocityCommand(cfg: UniformBimodalVelocityCommandCfg, env: ManagerBasedEnv)
Bases: CommandTerm
Bimodal velocity command generator with a discrete mode indicator (4+1).
This command samples base-frame velocities with two modes:
- Flight mode: uses ranges_flight
- Ground mode: uses ranges_ground
The output command augments the 4-D velocity with a 1-D discrete indicator: - 0.0 for flight mode - 1.0 for ground/terrestrial mode
Heading behavior matches UniformVelocityGlobalCommand with optional heading-target
proportional control. Ranges are applied per selected mode.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
command |
Tensor
|
Return 4-D velocity plus 1-D mode indicator. Shape: (num_envs, 5). |
command
property
command: Tensor
Return 4-D velocity plus 1-D mode indicator. Shape: (num_envs, 5).
UniformBimodalVelocityCommandCfg
Bases: CommandTermCfg
Configuration for the bimodal velocity command generator (flight vs ground).
类:
| 名称 | 描述 |
|---|---|
Ranges |
Uniform distribution ranges for velocity commands per mode. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
asset_name |
str
|
Name of the asset receiving commands. |
heading_command |
bool
|
Whether to convert heading error to angular velocity (per-mode ranges apply). |
heading_control_stiffness |
float
|
Scale factor for heading error to yaw rate conversion. |
rel_standing_envs |
float
|
Probability that an environment should be standing still (zero command). |
rel_heading_envs |
float
|
Probability that an environment uses heading-based angular velocity when enabled. |
rel_flight_envs |
float
|
Probability of sampling flight mode (vs ground). |
ranges_flight |
Ranges
|
Ranges for flight mode sampling. |
ranges_ground |
Ranges
|
Ranges for ground/terrestrial mode sampling. |
goal_vel_visualizer_cfg |
VisualizationMarkersCfg
|
The configuration for the goal velocity visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG. |
current_vel_visualizer_cfg |
VisualizationMarkersCfg
|
The configuration for the current velocity visualization marker. Defaults to BLUE_ARROW_X_MARKER_CFG. |
asset_name
class-attribute
instance-attribute
asset_name: str = MISSING
Name of the asset receiving commands.
heading_command
class-attribute
instance-attribute
heading_command: bool = False
Whether to convert heading error to angular velocity (per-mode ranges apply).
heading_control_stiffness
class-attribute
instance-attribute
heading_control_stiffness: float = 1.0
Scale factor for heading error to yaw rate conversion.
rel_standing_envs
class-attribute
instance-attribute
rel_standing_envs: float = 0.0
Probability that an environment should be standing still (zero command).
rel_heading_envs
class-attribute
instance-attribute
rel_heading_envs: float = 1.0
Probability that an environment uses heading-based angular velocity when enabled.
rel_flight_envs
class-attribute
instance-attribute
rel_flight_envs: float = 0.5
Probability of sampling flight mode (vs ground).
ranges_flight
class-attribute
instance-attribute
ranges_flight: Ranges = MISSING
Ranges for flight mode sampling.
ranges_ground
class-attribute
instance-attribute
ranges_ground: Ranges = MISSING
Ranges for ground/terrestrial mode sampling.
goal_vel_visualizer_cfg
class-attribute
instance-attribute
goal_vel_visualizer_cfg: VisualizationMarkersCfg = VisualizationMarkersCfg(prim_path='/Visuals/Command/velocity_goal', markers={'flight': sim_utils.UsdFileCfg(usd_path=f'{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd', scale=(1.0, 0.1, 0.1), visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 1.0, 0.0))), 'ground': sim_utils.UsdFileCfg(usd_path=f'{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd', scale=(1.0, 0.1, 0.1), visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(1.0, 0.0, 0.0)))})
The configuration for the goal velocity visualization marker. Defaults to GREEN_ARROW_X_MARKER_CFG.
current_vel_visualizer_cfg
class-attribute
instance-attribute
current_vel_visualizer_cfg: VisualizationMarkersCfg = BLUE_ARROW_X_MARKER_CFG.replace(prim_path='/Visuals/Command/velocity_current')
The configuration for the current velocity visualization marker. Defaults to BLUE_ARROW_X_MARKER_CFG.
Ranges
Uniform distribution ranges for velocity commands per mode.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
lin_vel_x |
tuple[float, float]
|
Range for the linear-x velocity command (in m/s). |
lin_vel_y |
tuple[float, float]
|
Range for the linear-y velocity command (in m/s). |
lin_vel_z |
tuple[float, float]
|
Range for the linear-z velocity command (in m/s). |
ang_vel_z |
tuple[float, float]
|
Range for the angular-z velocity command (in rad/s). |
heading |
tuple[float, float] | None
|
Range for the heading command (in rad). Defaults to None. |
lin_vel_x
class-attribute
instance-attribute
lin_vel_x: tuple[float, float] = MISSING
Range for the linear-x velocity command (in m/s).
lin_vel_y
class-attribute
instance-attribute
lin_vel_y: tuple[float, float] = MISSING
Range for the linear-y velocity command (in m/s).
lin_vel_z
class-attribute
instance-attribute
lin_vel_z: tuple[float, float] = MISSING
Range for the linear-z velocity command (in m/s).
ang_vel_z
class-attribute
instance-attribute
ang_vel_z: tuple[float, float] = MISSING
Range for the angular-z velocity command (in rad/s).
heading
class-attribute
instance-attribute
heading: tuple[float, float] | None = None
Range for the heading command (in rad). Defaults to None.
This parameter is only used if :attr:~UniformBimodalVelocityCommandCfg.heading_command is True.
randomize_action_term_attr
randomize_action_term_attr(env: ManagerBasedEnv, env_ids: Tensor | None, action_term_name: str = 'flight_control_action', attr_name: str = '_flight_controller', **kwargs) -> None
Randomize a selected action-term attribute.
randomize_controller_params
randomize_controller_params(env: ManagerBasedEnv, env_ids: Tensor | None, action_term_name: str = 'flight_control_action', controller_attr: str = '_flight_controller', limits: dict | None = None, params: dict[str, tuple[float, float]] | None = None, randomize_gains: bool | dict = False) -> None
Randomize controller gains and command limits attached to an action term.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
dict | None
|
Min/max limit ranges forwarded to |
None
|
|
dict[str, tuple[float, float]] | None
|
Physical parameter ranges (mass, g) for |
None
|
|
bool | dict
|
|
False
|
randomize_mixer_params
randomize_mixer_params(env: ManagerBasedEnv, env_ids: Tensor | None, action_term_name: str = 'flight_control_action', mixer_attr: str = '_mixer', param_range: dict[str, tuple[float, float]] | None = None) -> None
Randomize mixer parameters attached to an action term.
randomize_rotor_params
randomize_rotor_params(env: ManagerBasedEnv, env_ids: Tensor | None, action_term_name: str = 'flight_control_action', rotor_attr: str = '_rotor_dynamics', param_range: dict[str, tuple[float, float]] | None = None) -> None
Randomize rotor parameters attached to an action term.
randomize_mapping_params
randomize_mapping_params(env: ManagerBasedEnv, env_ids: Tensor | None, action_term_name: str = 'flight_control_action', mapper_attr: str = '_mapper', param_range: dict[str, tuple[float, float]] | None = None) -> None
Randomize action-mapper runtime parameters attached to an action term.
target_pos_b
target_pos_b(env: ManagerBasedRLEnv, command_name: str | None = None, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Position of target in body frame.
root_euler_w
root_euler_w(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Euler angles of the root in world frame.
root_axis_angle_w
root_axis_angle_w(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Axis-angle of the root in world frame.
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.
lin_vel_l2
lin_vel_l2(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Penalize base linear velocity using L2 squared kernel.
ang_vel_l2
ang_vel_l2(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Penalize base angular velocity using L2 squared kernel.
pos_error_l2
pos_error_l2(env: ManagerBasedRLEnv, command_name: str) -> torch.Tensor
Penalize asset pos from its target pos using L2 squared kernel.
pos_error_tanh
pos_error_tanh(env: ManagerBasedRLEnv, std: float, command_name: str) -> torch.Tensor
Penalize asset pos from its target pos using tanh kernel.
yaw_error_l2
yaw_error_l2(env: ManagerBasedRLEnv, command_name: str) -> torch.Tensor
Penalize heading error from target heading using L2 squared kernel.
yaw_error_tanh
yaw_error_tanh(env: ManagerBasedRLEnv, std: float, command_name: str) -> torch.Tensor
Penalize heading error from target heading using tanh kernel.
track_lin_vel_z_exp
track_lin_vel_z_exp(env: ManagerBasedRLEnv, std: float, command_name: str, is_bimodal: bool = False, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Reward tracking of linear velocity commands (z axis) using exponential kernel.
track_lin_vel_exp
track_lin_vel_exp(env: ManagerBasedRLEnv, std: float, command_name: str, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Reward tracking of linear velocity commands using exponential kernel.
track_yaw_vel_exp
track_yaw_vel_exp(env: ManagerBasedRLEnv, std: float, command_name: str, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Reward tracking of angular velocity commands (yaw) using exponential kernel.
hover_tracking
hover_tracking(env: ManagerBasedRLEnv, std: float = 0.1, action_name: str = 'flight_control_action') -> torch.Tensor
Penalize deviation of the collective acceleration command from hover.
This reward applies to any flight action mode whose first action channel
directly represents total collective acceleration
(cmd_ctatt*, cmd_ctbr, cmd_ctbm, etc.). Other modes return zero.
The penalty measures how far the current collective action sample is from hover acceleration. This encourages the policy to stay near the hover operating point.
bimodal_action_tanh
bimodal_action_tanh(env: ManagerBasedRLEnv, std: float, command_name: str, flight_action_name: str = 'flight_control_action', ground_action_name: str = 'ground_control_action', ground_weight: float = 1.0, flight_weight: float = 1.0) -> torch.Tensor
Penalize bimodal actions using tanh kernel.
bimodal_height_tanh
bimodal_height_tanh(env: ManagerBasedRLEnv, std: float, command_name: str, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot'), ground_weight: float = 1.0, flight_weight: float = 1.0) -> torch.Tensor
Penalize bimodal height using tanh kernel.
contact_impulse
contact_impulse(env: ManagerBasedRLEnv, threshold: float, sensor_cfg: SceneEntityCfg, mode: str = 'threshold') -> torch.Tensor
Penalize excessive contact impulse (rate of change of contact forces).
This function calculates the impulse as the change in contact forces between consecutive time steps and penalizes values that exceed a threshold.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ManagerBasedRLEnv
|
The learning environment. |
必需 |
|
float
|
Maximum acceptable impulse magnitude. Forces below this are not penalized. |
必需 |
|
SceneEntityCfg
|
Configuration for the contact sensor, specifying which bodies to monitor. |
必需 |
|
str
|
Penalty calculation mode: - "threshold": Penalize only the amount exceeding threshold (continuous) - "binary": Return 1.0 if any impulse exceeds threshold, else 0.0 (discrete) - "total": Return total impulse magnitude regardless of threshold (for monitoring) |
'threshold'
|
返回:
| 类型 | 描述 |
|---|---|
Tensor
|
torch.Tensor: Penalty value for each environment: - "threshold" mode: Sum of (impulse - threshold) for all violations - "binary" mode: 1.0 if violation exists, 0.0 otherwise - "total" mode: Total impulse magnitude |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If the sensor history length is less than 2 or the mode is invalid. |
示例:
>>> # Penalize hard landings (impulse > 50 N·s)
>>> impulse_penalty = contact_impulse(
... env, threshold=50.0,
... sensor_cfg=SceneEntityCfg("contact_sensor", body_ids=[arml_id, armr_id]),
... mode="threshold"
... )
>>> rewards["impulse_penalty"] = impulse_penalty * -1.0
bimodal_contacts
bimodal_contacts(env: ManagerBasedRLEnv, command_name: str, threshold: float, sensor_cfg: SceneEntityCfg, mode: str = 'threshold', ground_weight: float = 1.0, flight_weight: float = 1.0) -> torch.Tensor
Penalize contacts when switching from flight to ground mode.
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.