71 lines
2.4 KiB
ReStructuredText
71 lines
2.4 KiB
ReStructuredText
.. _terminations:
|
|||
|
|
|
||
|
|
Terminations
|
||
|
|
============
|
||
|
|
|
||
|
|
Termination terms define when an episode ends. Each term is a function
|
||
|
|
that returns a boolean per-environment tensor every step. The
|
||
|
|
termination manager aggregates all terms and reports the result to the
|
||
|
|
training framework as either a terminal failure or a truncation.
|
||
|
|
|
||
|
|
Each term is registered by name with a ``TerminationTermCfg``. Setting
|
||
|
|
``time_out=True`` marks the condition as a truncation rather than a
|
||
|
|
terminal failure. Truncations map to the ``truncated`` signal in the
|
||
|
|
Gym interface; failures map to ``terminated``. This distinction matters
|
||
|
|
for value bootstrapping: the agent should estimate future value beyond
|
||
|
|
a truncation but not beyond a failure.
|
||
|
|
|
||
|
|
.. code-block:: python
|
||
|
|
|
||
|
|
from mjlab.envs.mdp import terminations
|
||
|
|
from mjlab.managers.termination_manager import TerminationTermCfg
|
||
|
|
|
||
|
|
terminations_cfg = {
|
||
|
|
"time_out": TerminationTermCfg(
|
||
|
|
func=terminations.time_out, time_out=True,
|
||
|
|
),
|
||
|
|
"fallen": TerminationTermCfg(
|
||
|
|
func=terminations.bad_orientation,
|
||
|
|
params={"limit_angle": 1.0},
|
||
|
|
),
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Built-in termination functions
|
||
|
|
-------------------------------
|
||
|
|
|
||
|
|
The functions below are available in ``mjlab.envs.mdp.terminations`` and
|
||
|
|
are shared across tasks. Individual tasks may define additional
|
||
|
|
termination functions specific to their objective. All termination
|
||
|
|
functions return a boolean tensor of shape ``[num_envs]``.
|
||
|
|
|
||
|
|
.. list-table::
|
||
|
|
:header-rows: 1
|
||
|
|
:widths: 28 72
|
||
|
|
|
||
|
|
* - Function
|
||
|
|
- Description
|
||
|
|
* - ``time_out``
|
||
|
|
- Returns ``True`` when the episode length reaches
|
||
|
|
``env.max_episode_length``. Register with ``time_out=True`` so
|
||
|
|
the manager treats it as a truncation.
|
||
|
|
* - ``bad_orientation``
|
||
|
|
- Returns ``True`` when the angle between the asset's up axis and
|
||
|
|
world up exceeds ``limit_angle`` (radians).
|
||
|
|
* - ``root_height_below_minimum``
|
||
|
|
- Returns ``True`` when the asset's root link height is below
|
||
|
|
``minimum_height`` (meters).
|
||
|
|
* - ``nan_detection``
|
||
|
|
- Returns ``True`` when NaN or Inf values appear anywhere in the
|
||
|
|
physics state. A safety net to terminate diverged simulations
|
||
|
|
cleanly.
|
||
|
|
|
||
|
|
|
||
|
|
Writing custom termination functions
|
||
|
|
-------------------------------------
|
||
|
|
|
||
|
|
Custom termination functions follow the same patterns as reward
|
||
|
|
functions. A plain function accepts ``env`` and returns a boolean
|
||
|
|
``[num_envs]`` tensor. See :ref:`env-config-term-pattern` for the
|
||
|
|
general pattern.
|