mdp
Modules:
| Name | Description |
|---|---|
actions |
|
commands |
|
rewards |
|
Classes:
| Name | Description |
|---|---|
FlightActionMapper |
Map batched normalized actions into controller targets, wrench, or RPM. |
FlightMappingConfig |
Mapping-range configuration for normalized action scaling. |
Mixer |
Map thrust and moment demands to rotor commands. |
FlightController |
PID flight controller (batched). |
VehicleParams |
LAV2 vehicle parameters. |
RotorDynamics |
Batched rotor dynamics model. |
ControlActionManager |
Base class for Genesis flight action managers. |
PositionDebugVisualizerConfig |
Defines the configuration for the debug visualizer. |
PositionCommandManager |
Generates a position + heading command from uniform distribution. |
Functions:
| Name | Description |
|---|---|
wrap_to_pi |
Wraps input angles (in radians) to the range :math: |
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. |
FlightActionMapper
FlightActionMapper(control_mode: str, params: VehicleParams = VehicleParams(), mapping: FlightMappingConfig | None = None, *, num_envs: int = 1, device: str | device = 'cpu')
Map batched normalized actions into controller targets, wrench, or RPM.
Initialize a batched Torch flight action mapper for the selected mode.
Methods:
| Name | Description |
|---|---|
randomize |
Randomize mapper runtime parameters used by action scaling. |
action_to_collective_acc |
Map a normalized policy collective action to total collective acceleration. |
collective_acc_to_thrust |
Convert total collective acceleration into total thrust in Newtons. |
action_to_collective_thrust |
Convert a normalized policy collective action into total thrust. |
map_action |
Map a normalized batched action into RPM commands and intermediates. |
Attributes:
| Name | Type | Description |
|---|---|---|
requires_controller |
bool
|
Whether this mode needs a controller target expansion step. |
requires_controller
property
requires_controller: bool
Whether this mode needs a controller target expansion step.
randomize
randomize(env_ids=None, randomization: dict[str, tuple[float, float]] | None = None) -> None
Randomize mapper runtime parameters used by action scaling.
action_to_collective_acc
action_to_collective_acc(action: Tensor, mixer: Mixer) -> torch.Tensor
Map a normalized policy collective action to total collective acceleration.
collective_acc_to_thrust
collective_acc_to_thrust(collective_acc: Tensor) -> torch.Tensor
Convert total collective acceleration into total thrust in Newtons.
action_to_collective_thrust
action_to_collective_thrust(action: Tensor, mixer: Mixer) -> torch.Tensor
Convert a normalized policy collective action into total thrust.
map_action
map_action(action: Tensor, mixer: Mixer, *, state: Tensor | None = None, flight_controller: ControllerBase | None = None) -> FlightMappingResult
Map a normalized batched action into RPM commands and intermediates.
FlightMappingConfig
dataclass
FlightMappingConfig(velocity_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))
Mapping-range configuration for normalized action scaling.
Methods:
| Name | Description |
|---|---|
from_params |
Build mapping ranges from vehicle parameters. |
resolve |
Resolve config overrides into concrete mapping ranges. |
Attributes:
| Name | Type | Description |
|---|---|---|
velocity_range |
tuple[float, float, float] | None
|
Velocity scaling in m/s for x, y, z axes. |
attitude_range |
tuple[float, float, float] | None
|
Attitude scaling in radians. |
body_rate_range |
tuple[float, float, float] | None
|
Body-rate scaling in rad/s. |
velocity_range
class-attribute
instance-attribute
velocity_range: tuple[float, float, float] | None = None
Velocity scaling in m/s for x, y, z axes.
attitude_range
class-attribute
instance-attribute
attitude_range: tuple[float, float, float] | None = None
Attitude scaling in radians.
body_rate_range
class-attribute
instance-attribute
body_rate_range: tuple[float, float, float] | None = (2.0, 2.0, 2.0)
Body-rate scaling in rad/s.
from_params
classmethod
from_params(params: VehicleParams) -> FlightMappingConfig
Build mapping ranges from vehicle parameters.
The returned ranges are chosen to broadly cover the controller range
exposed by VehicleParams without requiring exact one-to-one
alignment with the internal PX4-style controller limits.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
VehicleParams
|
Vehicle parameters providing the reference control bounds. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
FlightMappingConfig |
FlightMappingConfig
|
Mapping ranges derived from |
resolve
resolve(params: VehicleParams) -> FlightMappingConfig
Resolve config overrides into concrete mapping ranges.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
VehicleParams
|
Vehicle parameters providing fallback control bounds. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
FlightMappingConfig |
FlightMappingConfig
|
Concrete mapping ranges for runtime use. |
Mixer
Mixer(params: VehicleParams = VehicleParams(), num_envs: int = 1, device: str | device = 'cpu')
Map thrust and moment demands to rotor commands.
Note
电机推力分配: 电机1 = 推力 - 横滚(roll) + 俯仰(pitch) + 偏航(yaw) 电机2 = 推力 + 横滚(roll) - 俯仰(pitch) + 偏航(yaw) 电机3 = 推力 + 横滚(roll) + 俯仰(pitch) - 偏航(yaw) 电机4 = 推力 - 横滚(roll) - 俯仰(pitch) - 偏航(yaw)
Initialize the torch mixer with vehicle parameters and device.
Methods:
| Name | Description |
|---|---|
randomize |
Randomize mixer runtime parameters from nominal values. |
calculate_rotor_commands |
Allocate thrust and moments into rotor speeds. |
randomize
randomize(env_ids=None, randomization=None)
Randomize mixer runtime parameters from nominal values.
calculate_rotor_commands
calculate_rotor_commands(control: Tensor) -> torch.Tensor
Allocate thrust and moments into rotor speeds.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Tensor
|
Desired total thrust and roll/pitch/yaw moments. Shape: (num_envs, 4) |
required |
Returns:
| Type | Description |
|---|---|
Tensor
|
torch.Tensor: The amplitude of each motor's rotational speed (calculated using |
FlightController
FlightController(params: VehicleParams = VehicleParams(), control_mask: list[int] = [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], gains: dict | None = None, limits: dict | None = None, num_envs: int = 1, device: str | device = 'cpu')
Bases: ControllerBase
PID flight controller (batched).
Initialize the batched flight PID controller.
Methods:
| Name | Description |
|---|---|
randomize |
Randomize configured PID gains, controller limits, and physical params. |
reset |
Reset PID loops for selected environments. |
update |
Update controller. |
Attributes:
| Name | Type | Description |
|---|---|---|
params |
VehicleParams
|
Vehicle parameters for the controller. |
control_mask |
ndarray | Tensor
|
unified control mask for target/state channels, used in update(). e.g. using 9~11 for attitude yaw control. |
params
instance-attribute
params: VehicleParams = params
Vehicle parameters for the controller.
control_mask
instance-attribute
control_mask: ndarray | Tensor = control_mask
unified control mask for target/state channels, used in update(). e.g. using 9~11 for attitude yaw control.
randomize
randomize(env_ids=None, gains=None, limits=None, params=None)
Randomize configured PID gains, controller limits, and physical params.
reset
reset(env_ids)
Reset PID loops for selected environments.
update
update(target: Tensor, state: Tensor) -> torch.Tensor
Update controller.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Tensor
|
(N, 12) desired [x, y, z, vx, vy, vz, roll, pitch, yaw, wx, wy, wz] |
required |
|
Tensor
|
(N, 12) current state same ordering. |
required |
Returns:
| Type | Description |
|---|---|
Tensor
|
torch.Tensor: Tensor of shape (N, 4): [thrust, roll_moment, pitch_moment, yaw_moment]. |
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: np.diag([0.015, 0.0348, 0.042503]).tolist())(), diameter: float = 0.476, Cdx: float = 0.5, x: float = 0.0952, y: float = 0.114423, h: float = -0.0125, alpha: float = math.radians(8.0), 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), lock: float = 0.6051, max_rpm: float = 10000.0, init_rpm: float = math.nan, rotor_rpm_rate_limit: float = 50000.0, tau_f: float = 0.01, tau_m: float = 0.05, tau_up: float = math.nan, tau_down: float = math.nan, r_w: float = 0.0285, n_w: int = 4, B: float = 0.136, L: float = 0.23, h_cg: float = 0.078, f: float = 0.01, mu0: float = 0.8, K: float = 20, track_cmd_rate_limit: float = 100, mpc_xy_vel_max: float = 12.0, mpc_z_vel_max_up: float = 3.0, mpc_z_vel_max_dn: float = 1.5, 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))
LAV2 vehicle parameters.
Methods:
| Name | Description |
|---|---|
__post_init__ |
Calculate derived parameters. |
Attributes:
| Name | Type | Description |
|---|---|---|
rho |
float
|
空气密度 (kg/m^3) |
g |
float
|
重力加速度 (m/s^2) |
sim_dt |
float
|
仿真步长 (s) |
step_dt |
float
|
控制步长 (s) |
randomization |
dict[str, dict[str, tuple[float, float]]]
|
运行时参数随机化配置,按组件 (e.g. rotor/mixer) 划分为多个 scale 相对范围子表 |
mass |
float
|
质量 (kg) |
inertia |
list
|
惯性矩阵 (kg*m^2) |
diameter |
float
|
直径 (m) |
Cdx |
float
|
空气阻力系数 |
x |
float
|
x方向臂长 (m) |
y |
float
|
y方向臂长 (m) |
h |
float
|
重心高度 (m) |
alpha |
float
|
y方向涵道外倾角度 (rad) |
r_p |
float
|
螺旋桨半径 (m) |
Ct |
float
|
推力系数 |
Cq |
float
|
扭矩系数 |
theta0 |
float
|
桨根角 (rad) |
thetaTip |
float
|
桨尖角 (rad) |
theta1 |
float
|
桨叶扭转角 (rad) |
lock |
float
|
Lock number |
max_rpm |
float
|
最大转速 |
init_rpm |
float
|
初始转速 |
rotor_rpm_rate_limit |
float
|
旋翼转速变化率限制 (rpm/s) |
cT |
float
|
转速平方到推力增益 (N/(rpm^2)) |
cM |
float
|
转速平方到扭矩增益 (N*m/(rpm^2)) |
tau_f |
float
|
电机滤波时间常数 (s) |
tau_m |
float
|
兼容保留的电机时间常数 (s) |
tau_up |
float
|
电机升速时间常数 (s) |
tau_down |
float
|
电机降速时间常数 (s) |
r_w |
float
|
主动轮半径 (m) |
n_w |
int
|
负重轮个数 |
B |
float
|
两侧履带中心距 (m) |
L |
float
|
履带节点接地部分长度 (m) |
h_cg |
float
|
车体质心高度 (m) |
f |
float
|
滚动阻力系数(以干燥混凝土路面或沥青路面为例) |
mu0 |
float
|
滑转率为1时的摩擦系数 |
K |
float
|
依赖于土壤黏聚系数和摩擦特性的常数 |
track_cmd_rate_limit |
float
|
履带主动轮指令变化率限制 (rad/s^2) |
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_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
空气密度 (kg/m^3)
g
class-attribute
instance-attribute
g: float = 9.81
重力加速度 (m/s^2)
sim_dt
class-attribute
instance-attribute
sim_dt: float = 0.01
仿真步长 (s)
step_dt
class-attribute
instance-attribute
step_dt: float = 0.01
控制步长 (s)
randomization
class-attribute
instance-attribute
randomization: dict[str, dict[str, tuple[float, float]]] = field(default_factory=dict)
运行时参数随机化配置,按组件 (e.g. rotor/mixer) 划分为多个 scale 相对范围子表
mass
class-attribute
instance-attribute
mass: float = 2.1
质量 (kg)
inertia
class-attribute
instance-attribute
inertia: list = field(default_factory=lambda: tolist())
惯性矩阵 (kg*m^2)
diameter
class-attribute
instance-attribute
diameter: float = 0.476
直径 (m)
Cdx
class-attribute
instance-attribute
Cdx: float = 0.5
空气阻力系数
x
class-attribute
instance-attribute
x: float = 0.0952
x方向臂长 (m)
y
class-attribute
instance-attribute
y: float = 0.114423
y方向臂长 (m)
h
class-attribute
instance-attribute
h: float = -0.0125
重心高度 (m)
alpha
class-attribute
instance-attribute
alpha: float = radians(8.0)
y方向涵道外倾角度 (rad)
r_p
class-attribute
instance-attribute
r_p: float = 0.0775
螺旋桨半径 (m)
Ct
class-attribute
instance-attribute
Ct: float = 0.666
推力系数
Cq
class-attribute
instance-attribute
Cq: float = 0.0716
扭矩系数
theta0
class-attribute
instance-attribute
theta0: float = radians(14.6)
桨根角 (rad)
thetaTip
class-attribute
instance-attribute
thetaTip: float = radians(6.8)
桨尖角 (rad)
theta1
class-attribute
instance-attribute
theta1: float = field(init=False)
桨叶扭转角 (rad)
lock
class-attribute
instance-attribute
lock: float = 0.6051
Lock number
max_rpm
class-attribute
instance-attribute
max_rpm: float = 10000.0
最大转速
init_rpm
class-attribute
instance-attribute
init_rpm: float = nan
初始转速
rotor_rpm_rate_limit
class-attribute
instance-attribute
rotor_rpm_rate_limit: float = 50000.0
旋翼转速变化率限制 (rpm/s)
cT
class-attribute
instance-attribute
cT: float = field(init=False)
转速平方到推力增益 (N/(rpm^2))
cM
class-attribute
instance-attribute
cM: float = field(init=False)
转速平方到扭矩增益 (N*m/(rpm^2))
tau_f
class-attribute
instance-attribute
tau_f: float = 0.01
电机滤波时间常数 (s)
tau_m
class-attribute
instance-attribute
tau_m: float = 0.05
兼容保留的电机时间常数 (s)
tau_up
class-attribute
instance-attribute
tau_up: float = nan
电机升速时间常数 (s)
tau_down
class-attribute
instance-attribute
tau_down: float = nan
电机降速时间常数 (s)
r_w
class-attribute
instance-attribute
r_w: float = 0.0285
主动轮半径 (m)
n_w
class-attribute
instance-attribute
n_w: int = 4
负重轮个数
B
class-attribute
instance-attribute
B: float = 0.136
两侧履带中心距 (m)
L
class-attribute
instance-attribute
L: float = 0.23
履带节点接地部分长度 (m)
h_cg
class-attribute
instance-attribute
h_cg: float = 0.078
车体质心高度 (m)
f
class-attribute
instance-attribute
f: float = 0.01
滚动阻力系数(以干燥混凝土路面或沥青路面为例)
mu0
class-attribute
instance-attribute
mu0: float = 0.8
滑转率为1时的摩擦系数
K
class-attribute
instance-attribute
K: float = 20
依赖于土壤黏聚系数和摩擦特性的常数
track_cmd_rate_limit
class-attribute
instance-attribute
track_cmd_rate_limit: float = 100
履带主动轮指令变化率限制 (rad/s^2)
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_man_tilt_max
class-attribute
instance-attribute
mpc_man_tilt_max: float = radians(35.0)
Maximum manual tilt angle in radians (deg: 0 - 90).
mc_rollrate_max
class-attribute
instance-attribute
mc_rollrate_max: float = 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 = 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 = radians(200.0)
Maximum yaw-rate setpoint in rad/s (deg/s: 0 - 1800).
__post_init__
__post_init__()
Calculate derived parameters.
RotorDynamics
RotorDynamics(params: VehicleParams = VehicleParams(), num_envs: int = 1, device: str | device = 'cpu')
Bases: DynamicsBase
Batched rotor dynamics model.
Initialize batched rotor dynamics on the specified device.
Methods:
| Name | Description |
|---|---|
randomize |
Randomize rotor runtime parameters from nominal values. |
update |
Calculate the output thrust and torque for each motor based on the motor commands. |
reset |
Resets the rotor model to initial conditions. |
Attributes:
| Name | Type | Description |
|---|---|---|
params |
VehicleParams
|
Vehicle parameters for the dynamics model. |
params
instance-attribute
params: VehicleParams = params
Vehicle parameters for the dynamics model.
randomize
randomize(env_ids: slice | Sequence[int] | Tensor | None = None, randomization: dict[str, tuple[float, float]] | None = None) -> None
Randomize rotor runtime parameters from nominal values.
update
update(commands: Tensor) -> torch.Tensor
Calculate the output thrust and torque for each motor based on the motor commands.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Tensor
|
Command tensor for each motor. Shape: (num_envs, 4) |
required |
Returns:
| Type | Description |
|---|---|
Tensor
|
torch.Tensor: Thrust and torque tensor for each motor. Shape: (num_envs, 8) |
reset
reset(env_ids: slice | Sequence[int] | Tensor) -> None
Resets the rotor model to initial conditions.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
slice | Sequence[int] | Tensor
|
The environment ids to reset. |
required |
ControlActionManager
ControlActionManager(env: GenesisEnv, delay_step: int = 0, params: VehicleParams = VehicleParams(), gains: dict | None = None, limits: dict | None = None, mapping: FlightMappingConfig = FlightMappingConfig(), entity_attr: str = 'robot', control_mode: str = 'cmd_motor_speeds')
Bases: BaseActionManager
Base class for Genesis flight action managers.
Initialize the Genesis flight action manager.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
GenesisEnv
|
The environment that owns the controlled robot entity. |
required |
|
int
|
Number of control steps to delay incoming actions. |
0
|
|
VehicleParams
|
Vehicle physical parameters. |
VehicleParams()
|
|
dict | None
|
Optional flight-controller gain overrides. |
None
|
|
dict | None
|
Optional flight-controller command-limit overrides. |
None
|
|
FlightMappingConfig
|
Action-mapping overrides resolved against |
FlightMappingConfig()
|
|
str
|
Environment attribute name for the robot entity. |
'robot'
|
|
str
|
Flight control mode for interpreting the incoming action. |
'cmd_motor_speeds'
|
Methods:
| Name | Description |
|---|---|
step |
Handle the received actions. |
reset |
Reset environments. |
get_actions |
Get the current actions for the environments. |
Attributes:
| Name | Type | Description |
|---|---|---|
num_actions |
int
|
The total number of actions. |
action_space |
tuple[float, float]
|
If using the default action handler, the action space is [-1, 1]. |
actions |
Tensor
|
The actions for for the current step. |
raw_actions |
Tensor
|
The actions received from the policy, before being converted. |
num_actions
property
num_actions: int
The total number of actions.
action_space
property
action_space: tuple[float, float]
If using the default action handler, the action space is [-1, 1].
actions
property
actions: Tensor
The actions for for the current step.
raw_actions
property
raw_actions: Tensor
The actions received from the policy, before being converted.
step
step(actions: Tensor) -> None
Handle the received actions.
reset
reset(envs_idx: list[int] | None)
Reset environments.
get_actions
get_actions() -> torch.Tensor
Get the current actions for the environments.
PositionDebugVisualizerConfig
Bases: TypedDict
Defines the configuration for the debug visualizer.
Attributes:
| Name | Type | Description |
|---|---|---|
envs_idx |
list[int]
|
The indices of the environments to visualize. If None, all environments will be visualized. |
z_offset |
float
|
The vertical offset of the debug arrows above the robot / target. |
arrow_radius |
float
|
The radius of the arrow shaft. |
arrow_scale |
float
|
Scale factor for the position-error arrow length. |
heading_arrow_len |
float
|
Length of the heading direction arrow. |
commanded_color |
tuple[float, float, float, float]
|
The color of the commanded position arrow. |
heading_color |
tuple[float, float, float, float]
|
The color of the commanded heading arrow. |
envs_idx
instance-attribute
envs_idx: list[int]
The indices of the environments to visualize. If None, all environments will be visualized.
z_offset
instance-attribute
z_offset: float
The vertical offset of the debug arrows above the robot / target.
arrow_radius
instance-attribute
arrow_radius: float
The radius of the arrow shaft.
arrow_scale
instance-attribute
arrow_scale: float
Scale factor for the position-error arrow length.
heading_arrow_len
instance-attribute
heading_arrow_len: float
Length of the heading direction arrow.
commanded_color
instance-attribute
commanded_color: tuple[float, float, float, float]
The color of the commanded position arrow.
heading_color
instance-attribute
heading_color: tuple[float, float, float, float]
The color of the commanded heading arrow.
PositionCommandManager
PositionCommandManager(env: GenesisEnv, range: PositionCommandRange, resample_time_sec: float = 5.0, debug_visualizer: bool = False, debug_visualizer_cfg: PositionDebugVisualizerConfig = DEFAULT_VISUALIZER_CONFIG)
Bases: CommandManager
Generates a position + heading command from uniform distribution. The command comprises a 3-D position target and a heading target.
IMPORTANT: The position commands are interpreted as world-relative coordinates: - X-axis: x coordinate of the target position - Y-axis: y coordinate of the target position - Z-axis: z coordinate of the target position - Heading: target yaw angle in radians
The .command property returns a body-frame tensor of shape (num_envs, 4):
- [:, 0:3] position error rotated into yaw-only body frame
- [:, 3] heading error (target heading - current heading), wrapped to [-pi, pi]
Debug visualization:
If `debug_visualizer` is set to True, a target sphere is rendered above
the commanded position.
Visual meaning:
- GREEN: Commanded position for the robot in the world frame
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
GenesisEnv
|
The environment to control |
required |
|
PositionCommandRange
|
The ranges of position & heading |
required |
|
float
|
The time interval between changing the command |
5.0
|
|
bool
|
Enable the debug arrow visualization |
False
|
|
PositionDebugVisualizerConfig
|
The configuration for the debug visualizer |
DEFAULT_VISUALIZER_CONFIG
|
Example::
class MyEnv(GenesisEnv):
def config(self):
self.position_command = PositionCommandManager(
self,
range={
"pos_x": (-2.0, 2.0),
"pos_y": (-2.0, 2.0),
"pos_z": (0.5, 1.5),
"heading": (-3.14, 3.14),
},
)
Methods:
| Name | Description |
|---|---|
build |
Build the position command manager |
step |
Render the command arrows |
use_gamepad |
Use a connected gamepad to control the command. |
Attributes:
| Name | Type | Description |
|---|---|---|
command |
Tensor
|
The desired command in yaw-only body frame. Shape is (num_envs, 4). |
command
property
command: Tensor
The desired command in yaw-only body frame. Shape is (num_envs, 4).
Columns 0-3: [pos_x, pos_y, pos_z, heading_error] all in body frame.
build
build()
Build the position command manager
step
step()
Render the command arrows
use_gamepad
use_gamepad(gamepad: Gamepad, pos_x_axis: int = 0, pos_y_axis: int = 1, pos_z_axis: int = 2, heading_axis: int = 3)
Use a connected gamepad to control the command.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Gamepad
|
The gamepad to use. |
required |
|
int
|
Map this gamepad axis index to the position in the x-direction. |
0
|
|
int
|
Map this gamepad axis index to the position in the y-direction. |
1
|
|
int
|
Map this gamepad axis index to the position in the z-direction. |
2
|
|
int
|
Map this gamepad axis index to the heading. |
3
|
wrap_to_pi
wrap_to_pi(angles: Tensor) -> torch.Tensor
Wraps input angles (in radians) to the range :math:[-\pi, \pi].
This function wraps angles in radians to the range :math:[-\pi, \pi], such that
:math:\pi maps to :math:\pi, and :math:-\pi maps to :math:-\pi. In general,
odd positive multiples of :math:\pi are mapped to :math:\pi, and odd negative
multiples of :math:\pi are mapped to :math:-\pi.
The function behaves similar to MATLAB's wrapToPi <https://www.mathworks.com/help/map/ref/wraptopi.html>_
function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Tensor
|
Input angles of any shape. |
required |
Returns:
| Type | Description |
|---|---|
Tensor
|
torch.Tensor: Angles in the range :math: |
lin_vel_l2
lin_vel_l2(env: GenesisEnv, entity_attr: str = 'robot', entity_manager: EntityManager = None) -> torch.Tensor
Penalize base linear velocity using L2 squared kernel.
ang_vel_l2
ang_vel_l2(env: GenesisEnv, entity_attr: str = 'robot', entity_manager: EntityManager = None) -> torch.Tensor
Penalize base angular velocity using L2 squared kernel.
pos_error_l2
pos_error_l2(env: GenesisEnv, target_pose: Tensor = None, pose_command: CommandManager = None) -> torch.Tensor
Penalize asset pos from its target pos using L2 squared kernel.
pos_error_tanh
pos_error_tanh(env: GenesisEnv, target_pose: Tensor = None, std: float = 0.8, pose_command: CommandManager = None) -> torch.Tensor
Penalize asset pos from its target pos using tanh kernel.
yaw_error_l2
yaw_error_l2(env: GenesisEnv, target_pose: Tensor = None, pose_command: CommandManager = None) -> torch.Tensor
Penalize heading error from target heading using L2 squared kernel.
Expects pose_command.command[:, 3] to be the body-frame heading error (already wrapped to [-pi, pi]).
yaw_error_tanh
yaw_error_tanh(env: GenesisEnv, target_pose: Tensor = None, std: float = 0.8, pose_command: CommandManager = None) -> torch.Tensor
Penalize heading error from target heading using tanh kernel.
Expects pose_command.command[:, 3] to be the body-frame heading error (already wrapped to [-pi, pi]).