mbodied.types.motion package

Submodules

mbodied.types.motion.control module

class mbodied.types.motion.control.FullJointControl(datum=None, *, joints: Sequence[JointControl] | list[float] = None, names: Sequence[str] | list[float] | None = None)[source]

Bases: Motion

Full joint control.

joints: Sequence[JointControl] | list[float]
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'joints': FieldInfo(annotation=Union[Sequence[JointControl], list[float]], required=False, default_factory=list, description='List of joint values in radians. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'names': FieldInfo(annotation=Union[Sequence[str], list[float], NoneType], required=False, default=None, description='List of joint names. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

names: Sequence[str] | list[float] | None
space()[source]

Return the corresponding Gym space for the Sample instance based on its instance attributes. Omits None values.

Override this method in subclasses to customize the space generation.

class mbodied.types.motion.control.HandControl(datum=None, *, pose: Pose6D = None, grasp: JointControl = None)[source]

Bases: Motion

Action for a 7D space representing x, y, z, roll, pitch, yaw, and oppenness of the hand.

grasp: JointControl
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'grasp': FieldInfo(annotation=JointControl, required=False, default_factory=JointControl, description='Openness of the robot hand. 0 is closed, 1 is open. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'pose': FieldInfo(annotation=Pose6D, required=False, default_factory=Pose, description='Pose of the robot hand. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

pose: Pose6D
class mbodied.types.motion.control.HeadControl(datum=None, *, tilt: JointControl = None, pan: JointControl = None)[source]

Bases: Motion

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'pan': FieldInfo(annotation=JointControl, required=False, default_factory=<lambda>, description='Pan of the robot head in radians (left is negative). Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'tilt': FieldInfo(annotation=JointControl, required=False, default_factory=<lambda>, description='Tilt of the robot head in radians (down is negative). Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

pan: JointControl
tilt: JointControl
class mbodied.types.motion.control.HumanoidControl(datum=None, *, left_arm: FullJointControl | None = None, right_arm: FullJointControl | None = None, left_leg: FullJointControl | None = None, right_leg: FullJointControl | None = None, head: HeadControl | None = None)[source]

Bases: Motion

Control for a humanoid robot.

head: HeadControl | None
left_arm: FullJointControl | None
left_leg: FullJointControl | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'head': FieldInfo(annotation=Union[HeadControl, NoneType], required=False, default=None, description='Control for the robot head. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'left_arm': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the left robot arm. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'left_leg': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the left robot leg. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'right_arm': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the right robot arm. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'right_leg': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the right robot leg. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

right_arm: FullJointControl | None
right_leg: FullJointControl | None
class mbodied.types.motion.control.JointControl(datum=None, *, value: float = None)[source]

Bases: Motion

Motion for joint control.

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'value': FieldInfo(annotation=float, required=False, default_factory=<lambda>, description='Joint value in radians. Bounds: [-3.14, 3.14] Motion type: UNSPECIFIED', json_schema_extra={'bounds': [-3.14, 3.14], 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

space()[source]

Return the corresponding Gym space for the Sample instance based on its instance attributes. Omits None values.

Override this method in subclasses to customize the space generation.

value: float
class mbodied.types.motion.control.LocobotActionOrAnswer(datum=None, *, base: LocationAngle | None = None, hand: HandControl | None = None, head: HeadControl | None = None, answer: str | None = '', sleep: bool | None = False, home: bool | None = False)[source]

Bases: MobileSingleHandControl

answer: str | None
home: bool | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'answer': FieldInfo(annotation=Union[str, NoneType], required=False, default='', description='Short, one sentence answer to any question a user might have asked. 20 words max.'), 'base': FieldInfo(annotation=Union[LocationAngle, NoneType], required=False, default_factory=LocationAngle, description='Location of the robot on the ground. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'hand': FieldInfo(annotation=Union[HandControl, NoneType], required=False, default_factory=HandControl, description='Control for the robot hand. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'head': FieldInfo(annotation=Union[HeadControl, NoneType], required=False, default=None, description='Control for the robot head. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'home': FieldInfo(annotation=Union[bool, NoneType], required=False, default=False, description='Whether the robot should go to home after executing the motion.'), 'sleep': FieldInfo(annotation=Union[bool, NoneType], required=False, default=False, description='Whether the robot should go to sleep after executing the motion.')}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

sleep: bool | None
class mbodied.types.motion.control.MobileBimanualArmControl(datum=None, *, base: LocationAngle | None = None, left_arm: FullJointControl | None = None, right_arm: FullJointControl | None = None, head: HeadControl | None = None)[source]

Bases: Motion

Control for a robot that can move in 2D space with two arms.

base: LocationAngle | None
head: HeadControl | None
left_arm: FullJointControl | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'base': FieldInfo(annotation=Union[LocationAngle, NoneType], required=False, default_factory=LocationAngle, description='Location of the robot on the ground. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'head': FieldInfo(annotation=Union[HeadControl, NoneType], required=False, default=None, description='Control for the robot head. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'left_arm': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the left robot arm. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'right_arm': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the right robot arm. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

right_arm: FullJointControl | None
class mbodied.types.motion.control.MobileSingleArmControl(datum=None, *, base: LocationAngle | None = None, arm: FullJointControl | None = None, head: HeadControl | None = None)[source]

Bases: Motion

Control for a robot that can move in 2D space with a single arm.

arm: FullJointControl | None
base: LocationAngle | None
head: HeadControl | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'arm': FieldInfo(annotation=Union[FullJointControl, NoneType], required=False, default_factory=FullJointControl, description='Control for the robot arm. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'base': FieldInfo(annotation=Union[LocationAngle, NoneType], required=False, default_factory=LocationAngle, description='Location of the robot on the ground. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'head': FieldInfo(annotation=Union[HeadControl, NoneType], required=False, default=None, description='Control for the robot head. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class mbodied.types.motion.control.MobileSingleHandControl(datum=None, *, base: LocationAngle | None = None, hand: HandControl | None = None, head: HeadControl | None = None)[source]

Bases: Motion

Control for a robot that can move its base in 2D space with a 6D EEF control + grasp.

base: LocationAngle | None
hand: HandControl | None
head: HeadControl | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'base': FieldInfo(annotation=Union[LocationAngle, NoneType], required=False, default_factory=LocationAngle, description='Location of the robot on the ground. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'hand': FieldInfo(annotation=Union[HandControl, NoneType], required=False, default_factory=HandControl, description='Control for the robot hand. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None}), 'head': FieldInfo(annotation=Union[HeadControl, NoneType], required=False, default=None, description='Control for the robot head. Motion type: UNSPECIFIED', json_schema_extra={'bounds': None, 'motion_type': 'UNSPECIFIED', 'shape': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

mbodied.types.motion.motion module

This module contains the base class for a motion.

There are four basic motion types that are supported: - Absolute motion: The desired absolute coordinates of a limb or joint in the chosen reference frame. - Relative motion: The displacement from the current position of a limb or joint (frame-independent). - Velocity motion: The desired absolute velocity of a limb or joint (frame-independent). - Torque motion: The desired torque of a limb or joint (frame-independent).

The bounds is a list of two floats representing the lower and upper bounds of the motion. The shape is a tuple of integers representing the shape of the motion. The reference_frame is a string representing the reference frame for the coordinates (only applies to absolute motions).

To create a new Pydantic model for a motion, inherit from the Motion class and define pydantic fields with the MotionField, function as you would with any other Pydantic field.

Example

from mbodied_agents.motion import Motion, AbsoluteMotionField, MotionField, MotionType, VelocityMotionField from mbodied_agents.data.sample import Sample

class Twist(Motion):

x: float = VelocityMotionField(default=0.0, bounds=[-1.0, 1.0]) y: float = VelocityMotionField(default=0.0, bounds=[-1.0, 1.0]) z: float = VelocityMotionField(default=0.0, bounds=[-1.0, 1.0]) roll: float = VelocityMotionField(default=0.0, bounds=[‘-pi’, ‘pi’]) pitch: float = VelocityMotionField(default=0.0, bounds=[‘-pi’, ‘pi’]) yaw: float = VelocityMotionField(default=0.0, bounds=[‘-pi’, ‘pi’])

This automatically generates a Pydantic model with the specified fields and the additional properties of a motion. It is vectorizable, serializable, and validated according to its type. Furthermore, convience methods from the class allow for direct conversion to numpy, pytorch, and gym spaces. See the Sample class documentation for more information: https://mbodi-ai-mbodied-agents.readthedocs-hosted.com/en/latest/ See the Pydantic documentation for more information on how to define Pydantic models: https://pydantic-docs.helpmanual.io/

mbodied.types.motion.motion.AbsoluteMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for an absolute motion.

This field is used to define the shape and bounds of an absolute motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

class mbodied.types.motion.motion.Motion(datum=None)[source]

Bases: Sample

Base class for a motion.

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

mbodied.types.motion.motion.MotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, motion_type: Literal['UNSPECIFIED', 'OTHER', 'ABSOLUTE', 'RELATIVE', 'VELOCITY', 'TORQUE'] = 'UNSPECIFIED', **kwargs) Any[source]

Field for a motion.

Parameters:
  • default – Default value for the field.

  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

  • motion_type – Type of the motion. Can be “UNSPECIFIED”, “OTHER”, “ABSOLUTE”, “RELATIVE”, “VELOCITY”, “TORQUE”.

mbodied.types.motion.motion.OtherMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for an other motion.

This field is used to define the shape and bounds of an other motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.motion.RelativeMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a relative motion.

This field is used to define the shape and bounds of a relative motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.motion.TorqueMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a torque motion.

This field is used to define the shape and bounds of a torque motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.motion.VelocityMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a velocity motion.

This field is used to define the shape and bounds of a velocity motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

Module contents

mbodied.types.motion.AbsoluteMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for an absolute motion.

This field is used to define the shape and bounds of an absolute motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

class mbodied.types.motion.Motion(datum=None)[source]

Bases: Sample

Base class for a motion.

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ConfigDict = {'arbitrary_types_allowed': True, 'extra': 'forbid', 'from_attributes': True, 'use_enum_values': False, 'validate_assignment': False}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

mbodied.types.motion.MotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, motion_type: Literal['UNSPECIFIED', 'OTHER', 'ABSOLUTE', 'RELATIVE', 'VELOCITY', 'TORQUE'] = 'UNSPECIFIED', **kwargs) Any[source]

Field for a motion.

Parameters:
  • default – Default value for the field.

  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

  • motion_type – Type of the motion. Can be “UNSPECIFIED”, “OTHER”, “ABSOLUTE”, “RELATIVE”, “VELOCITY”, “TORQUE”.

mbodied.types.motion.OtherMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for an other motion.

This field is used to define the shape and bounds of an other motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.RelativeMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a relative motion.

This field is used to define the shape and bounds of a relative motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.TorqueMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a torque motion.

This field is used to define the shape and bounds of a torque motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.

mbodied.types.motion.VelocityMotionField(default: Any = PydanticUndefined, bounds: list[float] | None = None, shape: tuple[int] | None = None, description: str | None = None, **kwargs) Any[source]

Field for a velocity motion.

This field is used to define the shape and bounds of a velocity motion.

Parameters:
  • bounds – Bounds of the motion.

  • shape – Shape of the motion.

  • description – Description of the motion.