Skip to content

pid

Torch-based PID controllers for batched simulation.

Classes:

Name Description
PID

Vectorized PID controller for multiple environments.

FlightController

PID flight controller (batched).

TrackController

PID track controller (batched).

PID

PID(Kp: Tensor, Ki: Tensor | None = None, Kd: Tensor | None = None, dt: float = 0.01, N: float = 100.0, integral_limit: Tensor | None = None, num_envs: int = 1)

Vectorized PID controller for multiple environments.

Initialize PID gains and state tensors.

Parameters:

Name Type Description Default

Kp

Tensor

Proportional gain tensor with a leading environment dimension.

required

Ki

Tensor | None

Integral gain tensor with the same shape as Kp.

None

Kd

Tensor | None

Derivative gain tensor with the same shape as Kp.

None

dt

float

Controller time step.

0.01

N

float

First-order derivative filter coefficient.

100.0

integral_limit

Tensor | None

Optional clamp applied elementwise to the integral state.

None

num_envs

int

Number of environments.

1

Methods:

Name Description
reset

Reset PID state for selected environments.

update

Compute PID output for the given error tensor.

reset

reset(env_ids: slice | Sequence[int] | Tensor) -> None

Reset PID state for selected environments.

Parameters:

Name Type Description Default

env_ids

slice | Sequence[int] | Tensor

Indices or slice selecting which environments to reset.

required

update

update(error: Tensor) -> torch.Tensor

Compute PID output for the given error tensor.

Parameters:

Name Type Description Default

error

Tensor

Batched control error tensor compatible with the internal state shape determined from Kp.

required

Returns:

Type Description
Tensor

torch.Tensor: Combined P+I+D control output.

FlightController

FlightController(params: VehicleParams = VehicleParams(), control_mask: dict | None = None, 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.

gains_to_randomization_ranges

Convert static gains dict to domain randomization min/max ranges.

Attributes:

Name Type Description
params VehicleParams

Vehicle parameters for the controller.

params instance-attribute

params: VehicleParams = params

Vehicle parameters for the controller.

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: dict, state: dict) -> torch.Tensor

Update controller.

Parameters:

Name Type Description Default

target

dict

dict with batched tensors, keys matching mask.

required

state

dict

dict: pos(N,3), vel(N,3), att_euler(N,3), ang_vel(N,3).

required

Returns:

Name Type Description
Tensor (N, 4)

[thrust, roll_moment, pitch_moment, yaw_moment].

gains_to_randomization_ranges classmethod

gains_to_randomization_ranges(gains=None, scale=0.2)

Convert static gains dict to domain randomization min/max ranges.

Each non-zero gain is scaled by (1-scale) for min and (1+scale) for max. Defaults to cls.DEFAULT_GAINS when gains is None.

TrackController

TrackController(params: VehicleParams = VehicleParams(), control_mask: dict | None = None, gains: dict | None = None, num_envs: int = 1, device: str | device = 'cpu')

Bases: ControllerBase

PID track controller (batched).

Initialize the batched track controller.

Methods:

Name Description
randomize

Randomize configured PID gains for all or selected environments.

reset

Reset PID loops for selected environments.

update

Update controller.

Attributes:

Name Type Description
params VehicleParams

Vehicle parameters for the controller.

params instance-attribute

params: VehicleParams = params

Vehicle parameters for the controller.

randomize

randomize(env_ids=None, gains=None)

Randomize configured PID gains for all or selected environments.

reset

reset(env_ids)

Reset PID loops for selected environments.

update

update(target: dict, state: dict) -> torch.Tensor

Update controller.

Parameters:

Name Type Description Default

target

dict

dict: pos(N,3), vel_b(N,3), att_euler(N,3), ang_vel(N,3). Only pos[:,:2], vel_b[:,0], att_euler[:,2], ang_vel[:,2] are used.

required

state

dict

dict with same keys.

required

Returns:

Name Type Description
Tensor (N, 2)

left/right acceleration commands.