mdp
模块:
| 名称 | 描述 |
|---|---|
rewards |
|
类:
| 名称 | 描述 |
|---|---|
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: |
DelayedObservation |
A modifier used to return a stochastically delayed (stale) version of |
DelayedObservationCfg |
Configuration parameters for a delayed observation modifier. |
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. |
DifferentialDriveController |
PX4-style position/heading cascade with differential speed allocation. |
DifferentialDriveActionMapper |
Map normalized ground actions into differential controller targets. |
DifferentialDriveMappingConfig |
Policy-facing scaling for differential-drive controller modes. |
GroundDriveActuatorAdapter |
Batched yaw allocation, side limiting, and actuator command latency. |
GroundDriveActuatorConfig |
Nominal actuator response applied after differential allocation. |
DifferentialDriveControlAction |
Map selectable ground-control actions to drive-joint velocity targets. |
DifferentialDriveControlActionCfg |
Configuration for selectable differential-drive control. |
函数:
| 名称 | 描述 |
|---|---|
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. |
randomize_action_term_attr |
Randomize a selected action-term attribute. |
randomize_ground_actuator_params |
Randomize the ground actuator adapter attached to an action term. |
hold_joint_position_target |
Re-assert a fixed joint position target on reset. |
scale_body_inertia |
Apply scalar or per-axis Isaac inertia scales from the default tensor. |
planar_pos_error_tanh |
Reward XY position tracking without constraining ground-contact height. |
track_trajectory_ang_vel_z_exp |
Reward yaw-rate tracking for trajectory commands with yaw at index three. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
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 |
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); 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). |
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); 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).
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.
引发:
| 类型 | 描述 |
|---|---|
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 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_vel_ffacc, 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_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.
DelayedObservation
DelayedObservation(cfg: DelayedObservationCfg, data_dim: tuple[int, ...], device: str)
Bases: ModifierBase
A modifier used to return a stochastically delayed (stale) version of an observation term. This can also be used to model multi-rate observations for non-sensor terms, e.g., pure MDP terms or proprioceptive terms.
This modifier takes an existing observation term/function, pushes each new batched observation into a DelayBuffer, and returns an older sample according to a per-environment integer time-lag. Lags are drawn uniformly from [min_lag, max_lag], with an optional probability to hold the previous lag (to mimic repeated frames). With 'update_period>0' (multi-rate), new lags are applied only on refresh ticks, which occur every update_period policy steps. Between refreshes the realised lag can increase at most by +1 (frame hold). This process is causal: the lag for each environment can only increase by 1 each step, ensuring that the returned observation is never older than the previous step's lagged observation.
Shapes are preserved: the returned tensor has the exact shape of the wrapped
term ([num_envs, *obs_shape]).
Configuration:
min_lag (int): Minimum time-lag (in steps) to sample. Default 0.
max_lag (int): Maximum time-lag (in steps) to sample. Default 3.
per_env (bool): If True, sample a different lag for each environment.
If False, use the same lag for all envs. Default True.
hold_prob (float): Probability in [0, 1] of holding the previous lag
instead of sampling a new one. Default 0.0 (always sample new).
update_period (int): If > 0, apply new lags every update_period
policy steps (models a lower sensor cadence). Between updates, the
lag can increase by at most +1 each step (frame hold). If 0 (default),
update every step.
per_env_phase (bool): Only relevant if update_period > 0. If True,
each environment has a different random phase offset for lag updates.
If False, all envs update their lag simultaneously. Default True.
Example: .. code-block:: python
# create a height_scan observation using the delayed observation modifier
from isaaclab.utils.modifiers import DelayedObservation
height_scan = ObservationTermCfg(
func=mdp.height_scan,
params={"sensor_cfg": SceneEntityCfg("height_scanner")},
noise=Unoise(n_min=-0.1, n_max=0.1),
clip=(-1.0, 1.0),
modifiers=[
modifiers.DelayedObservationCfg(
min_lag=0,
max_lag=3,
per_env=True,
hold_prob=0.66,
update_period=3,
per_env_phase=True,
)
],
)
Initialize the DelayedObservation modifier.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
DelayedObservationCfg
|
Configuration parameters. |
必需 |
方法:
| 名称 | 描述 |
|---|---|
reset |
Resets the delay buffer and internal state. |
__call__ |
Add the current data to the delay buffer and return a stale sample |
reset
reset(env_ids: Sequence[int] | None = None)
Resets the delay buffer and internal state.
Since the DelayBuffer does not support partial resets, partial resets keep the underlying buffer but temporarily clamp the affected envs' lags to the number of fresh samples observed since reset. This prevents observations from the previous episode from being returned while the delay window refills.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Sequence[int] | None
|
The environment ids. Defaults to None, in which case all environments are considered. |
None
|
__call__
__call__(data: Tensor) -> torch.Tensor
Add the current data to the delay buffer and return a stale sample according to the current lag for each environment.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Tensor
|
The data to apply delay to. |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Tensor
|
Delayed data. Shape is the same as data. |
DelayedObservationCfg
Bases: ModifierCfg
Configuration parameters for a delayed observation modifier.
For more information, please check the :class:DelayedObservation class.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
func |
type[DelayedObservation]
|
The delayed observation function to be called for applying the delay. |
min_lag |
int
|
The minimum lag (in number of policy steps) to be applied to the observations. Defaults to 0. |
max_lag |
int
|
The maximum lag (in number of policy steps) to be applied to the observations. |
per_env |
bool
|
Whether to use a separate lag for each environment. |
hold_prob |
float
|
The probability of holding the previous lag when updating the lag. |
update_period |
int
|
The period (in number of policy steps) at which the lag is updated. |
per_env_phase |
bool
|
Whether to use a separate phase for each environment when updating the lag. |
func
class-attribute
instance-attribute
func: type[DelayedObservation] = DelayedObservation
The delayed observation function to be called for applying the delay.
min_lag
class-attribute
instance-attribute
min_lag: int = 0
The minimum lag (in number of policy steps) to be applied to the observations. Defaults to 0.
max_lag
class-attribute
instance-attribute
max_lag: int = 3
The maximum lag (in number of policy steps) to be applied to the observations.
This value must be greater than or equal to :attr:min_lag.
per_env
class-attribute
instance-attribute
per_env: bool = True
Whether to use a separate lag for each environment.
hold_prob
class-attribute
instance-attribute
hold_prob: float = 0.0
The probability of holding the previous lag when updating the lag.
update_period
class-attribute
instance-attribute
update_period: int = 1
The period (in number of policy steps) at which the lag is updated.
If set to 0, the lag is sampled once at the beginning and remains constant throughout the simulation.
If set to a positive integer, the lag is updated every update_period policy steps. Defaults to 1.
This value must be less than or equal to :attr:max_lag if it is greater than 0.
per_env_phase
class-attribute
instance-attribute
per_env_phase: bool = True
Whether to use a separate phase for each environment when updating the lag.
If set to True, each environment will have its own phase when updating the lag. If set to False, all environments will share the same phase. Defaults to True.
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.
DifferentialDriveController
DifferentialDriveController(params: VehicleParams, control_mask: dict | None = None, gains: dict | None = None, limits: dict | None = None, num_envs: int = 1, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None)
Bases: ControllerBase
PX4-style position/heading cascade with differential speed allocation.
The output is [left, right] drive-shaft angular velocity in rad/s. The
controller is independent of wheel count: a platform adapter commands one
physical drive joint per side, while backend mechanical constraints
synchronize any follower road wheels or wheel shells.
Initialize the batched differential-drive controller.
方法:
| 名称 | 描述 |
|---|---|
randomize |
Randomize gains and limits for selected environments. |
reset |
Reset all PID state for selected environments. |
update |
Compute left/right drive-shaft angular-velocity targets in rad/s. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
params |
VehicleParams
|
Vehicle parameters for the controller. |
params
instance-attribute
params: VehicleParams = params
Vehicle parameters for the controller.
randomize
randomize(env_ids=None, gains: dict[str, Any] | None = None, limits: dict[str, Any] | None = None)
Randomize gains and limits for selected environments.
reset
reset(env_ids=None)
Reset all PID state for selected environments.
update
update(target: ControllerTarget, state: ControllerState) -> ArrayLike
Compute left/right drive-shaft angular-velocity targets in rad/s.
返回:
| 类型 | 描述 |
|---|---|
ArrayLike
|
The computed drive-shaft angular velocity array. |
DifferentialDriveActionMapper
DifferentialDriveActionMapper(control_mode: str, params: VehicleParams, mapping: DifferentialDriveMappingConfig | None = None, control_mask: dict | None = None, num_envs: int = 1, device=None, *, backend: BackendName | None = None, xp: ModuleType | None = None)
Map normalized ground actions into differential controller targets.
Initialize the ground mapper and stable action-field indices.
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If mapping ranges or control mode is invalid. |
方法:
| 名称 | 描述 |
|---|---|
decode_action |
Decode a policy action into side speed or a controller target. |
map_action |
Resolve an action into left/right output-shaft speed targets. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
requires_controller |
bool
|
Whether this mode passes through the differential controller. |
requires_controller
property
requires_controller: bool
Whether this mode passes through the differential controller.
decode_action
decode_action(action: ArrayLike, *, state: ControllerState | None = None) -> DifferentialDriveMapping
Decode a policy action into side speed or a controller target.
返回:
| 类型 | 描述 |
|---|---|
DifferentialDriveMapping
|
DifferentialDriveMapping dictionary containing decoded action. |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If state is missing when required. |
map_action
map_action(action: ArrayLike, *, state: ControllerState | None = None, controller: ControllerBase | None = None) -> DifferentialDriveMapping
Resolve an action into left/right output-shaft speed targets.
返回:
| 类型 | 描述 |
|---|---|
DifferentialDriveMapping
|
DifferentialDriveMapping dictionary containing side speed targets. |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
If controller is missing when required. |
DifferentialDriveMappingConfig
dataclass
DifferentialDriveMappingConfig(forward_speed_range: float | None = None, yaw_rate_range: float | None = None, heading_range: float = pi, side_speed_range: float | None = None)
Policy-facing scaling for differential-drive controller modes.
方法:
| 名称 | 描述 |
|---|---|
from_params |
Build mapping ranges from track or wheel platform parameters. |
resolve |
Resolve explicit overrides against platform-derived defaults. |
from_params
classmethod
from_params(params: VehicleParams) -> DifferentialDriveMappingConfig
Build mapping ranges from track or wheel platform parameters.
返回:
| 类型 | 描述 |
|---|---|
DifferentialDriveMappingConfig
|
Instantiated DifferentialDriveMappingConfig object. |
引发:
| 类型 | 描述 |
|---|---|
TypeError
|
If params lacks track or wheel attributes. |
resolve
resolve(params: VehicleParams) -> DifferentialDriveMappingConfig
Resolve explicit overrides against platform-derived defaults.
返回:
| 类型 | 描述 |
|---|---|
DifferentialDriveMappingConfig
|
Resolved DifferentialDriveMappingConfig object. |
GroundDriveActuatorAdapter
GroundDriveActuatorAdapter(*, physics_dt: float, side_speed_limit: float, config: GroundDriveActuatorConfig, num_envs: int = 1, device=None, backend: BackendName | None = None, xp: ModuleType | None = None)
Batched yaw allocation, side limiting, and actuator command latency.
Build an Array API adapter for one fixed-rate physics loop.
方法:
| 名称 | 描述 |
|---|---|
randomize |
Randomize selected actuator parameters as nominal-relative scales. |
reset |
Clear actuator command state for selected environments. |
update |
Return the physical-side target for the current physics step. |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
side_gain |
ArrayLike
|
Current left/right gain samples. |
side_gain
property
side_gain: ArrayLike
Current left/right gain samples.
randomize
randomize(env_ids=None, randomization: dict[str, tuple[float, float] | float] | None = None) -> None
Randomize selected actuator parameters as nominal-relative scales.
reset
reset(env_ids=None) -> None
Clear actuator command state for selected environments.
update
update(targets: ArrayLike, *, apply_yaw_compensation: bool = True) -> ArrayLike
Return the physical-side target for the current physics step.
GroundDriveActuatorConfig
dataclass
GroundDriveActuatorConfig(yaw_allocation_scale: float = 1.0, left_gain: float = 1.0, right_gain: float = 1.0, left_delay_s: float = 0.0, right_delay_s: float = 0.0)
Nominal actuator response applied after differential allocation.
DifferentialDriveControlAction
DifferentialDriveControlAction(cfg: DifferentialDriveControlActionCfg, env: ManagerBasedRLEnv)
Bases: ActionTerm
Map selectable ground-control actions to drive-joint velocity targets.
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
ideal_side_speed_targets |
Tensor
|
Controller output before Isaac-specific allocation and latency. |
applied_side_speed_targets |
Tensor
|
Side targets after allocation/gain and before actuator latency. |
sampled_actuator_parameters |
dict[str, Tensor]
|
Expose per-environment samples for episode diagnostics. |
IO_descriptor |
GenericActionIODescriptor
|
Describe policy channels for the selected ground-control mode. |
ideal_side_speed_targets
property
ideal_side_speed_targets: Tensor
Controller output before Isaac-specific allocation and latency.
applied_side_speed_targets
property
applied_side_speed_targets: Tensor
Side targets after allocation/gain and before actuator latency.
sampled_actuator_parameters
property
sampled_actuator_parameters: dict[str, Tensor]
Expose per-environment samples for episode diagnostics.
IO_descriptor
property
IO_descriptor: GenericActionIODescriptor
Describe policy channels for the selected ground-control mode.
DifferentialDriveControlActionCfg
Bases: ActionTermCfg
Configuration for selectable differential-drive control.
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.
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_ground_actuator_params
randomize_ground_actuator_params(env: ManagerBasedRLEnv, env_ids, action_term_name: str = 'ground_control_action', actuator_attr: str = '_actuator_adapter', param_range: dict[str, tuple[float, float] | float] | None = None) -> None
Randomize the ground actuator adapter attached to an action term.
hold_joint_position_target
hold_joint_position_target(env: ManagerBasedRLEnv, env_ids, target_pos: float, joint_names: list[str], asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> None
Re-assert a fixed joint position target on reset.
ArticulationCfg.InitialStateCfg.joint_pos sets the initial joint state,
not the actuator target. For joints driven by a stiff position actuator that
are not policy-controlled — e.g. ATMO's base_to_arm[l,r] locked at 90 deg
for the ground-mode modal transition — the drive target defaults to 0 and the
actuator yanks the joint out of its init pose (arms snap back to the 0-deg
flight pose, dropping the chassis onto the ground). This event writes the
position target back to target_pos each reset so the actuator holds the
configured pose for the episode; the target persists across steps because the
action manager never commands these joints.
scale_body_inertia
scale_body_inertia(env: ManagerBasedRLEnv, env_ids, scale: float | tuple[float, float] | tuple[tuple[float, float], tuple[float, float], tuple[float, float]], asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> None
Apply scalar or per-axis Isaac inertia scales from the default tensor.
planar_pos_error_tanh
planar_pos_error_tanh(env: ManagerBasedRLEnv, std: float, command_name: str) -> torch.Tensor
Reward XY position tracking without constraining ground-contact height.
track_trajectory_ang_vel_z_exp
track_trajectory_ang_vel_z_exp(env: ManagerBasedRLEnv, std: float, command_name: str, asset_cfg: SceneEntityCfg = SceneEntityCfg('robot')) -> torch.Tensor
Reward yaw-rate tracking for trajectory commands with yaw at index three.