:class:`Config` -- Configuration Variables
.. currentmodule:: trep
param system: | An instance of :class:`System` to add the variable to. |
---|---|
param name: | A string that uniquely identifies the configuration variable. |
param kinematic: | True to define a kinematic configuration variable. |
An :class:`Config` instance represents a configuration variable in the generalized coordinates, q, of a mechanical system. Configuration variables primarily parameterize rigid-body transformations between coordinate frames in the system, though sometimes special configuration variables are used only by constraints.
Configuration variables are created automatically by :class:`Frame` and :class:`Constraint` when needed, so you do not need to create them directly unless defining a new constraint type.
If a name is provided, it can be used to identify and retrieve configuration variables.
The current values and their derivatives of a configuration variable can be accessed directly (:attr:`q`, :attr:`dq`, :attr:`ddq`) for an individual variable, or through :class:`System` to access all configuration variables at once (:attr:`System.q`, :attr:`System.dq`, :attr:`System.ddq`)
Warning
Currently :mod:`trep` does not enforce unique names for configuration variables. It is recommended to provide a unique name for every :class:`Config` so they can be unambiguously retrieved by :meth:`System.get_config`.
A configuration variable can be dynamic or kinematic. Dynamic configuration variables, q_d, are traditional configuration variables. Their trajectory is determined by the system dynamics (\ddot{q_d} = f(q(t), \dot{q}(t), u(t))). Dynamic configuration variables must parameterize a rigid-body transformation, and there must be a coordinate frame with non-zero mass that depends on the dynamic variable (directly or indirectly).
Kinematic configuration variables, q_k, are considered perfectly controllable. Their second derivative is specified directly as an additional input to the system (\ddot{q_k} = u_k(t)). Kinematic configuration variables can parameterize any rigid body transformation in a system, regardless of whether or not a frame with non-zero mass depends directly or indirectly on the variable. Additionally, kinematic configuration variables that do not parameterize a transformation can be defined by constraint functions. For example, the :class:`Distance` constraint uses a kinematic configuration variable to maintain a time-varying distance between two coordinate frames.
.. attribute:: Config.q The current value of the configuration variable.
.. attribute:: Config.dq The 1st time derivative (velocity) of the configuration variable (i.e, :math:`\dot{q}`).
.. attribute:: Config.ddq The 2nd time derivative (acceleration) of the configuration variable (i.e, :math:`\ddot{q}`).
.. attribute:: Config.kinematic Boolean indicating if this configuration variable is dynamic or kinematic. *(read only)*
.. attribute:: Config.system The :class:`System` that this configuration variable belongs to. *(read only)*
.. attribute:: Config.frame The :class:`Frame` that depends on this configuration variable for its transformation, or :data:`None` if it is not used by a coordinate frame (e.g, a kinematic configuration variable in a constraint). *(read only)*
.. attribute:: Config.name The name of this configuration variable or :data:`None`.
.. attribute:: Config.index Index of the configuration variable in :attr:`System.configs`. For dynamic configuration variables, this is also the index of the variable in :attr:`System.dyn_configs`. *(read only)*
.. attribute:: Config.k_index For kinematic configuration variables, this is the index of this variable in :attr:`System.kin_configs`. *(read-only)*
.. attribute:: Config.masses A tuple of all :class:`coordinate frames <Frame>` with non-zero masses that depend (directly or indirectly) on this configuration variable. *(read-only)*