Source code for genesis.engine.entities.avatar_entity.avatar_entity

import numpy as np
import numpy.typing as npt

import gstaichi as ti

from ..rigid_entity import RigidEntity
from .avatar_joint import AvatarJoint
from .avatar_link import AvatarLink


[docs]@ti.data_oriented class AvatarEntity(RigidEntity):
[docs] def add_joint( self, name: str, n_qs: int, n_dofs: int, type: str, pos, quat, dofs_motion_ang, dofs_motion_vel, dofs_limit, dofs_invweight, dofs_stiffness, dofs_damping, dofs_armature, dofs_kp, dofs_kv, dofs_force_range, init_q, ) -> AvatarJoint: """ Add a new joint (AvatarJoint) to the entity. Parameters ---------- name : str Name of the joint. n_qs : int Number of configuration variables (generalized coordinates). n_dofs : int Number of degrees of freedom for the joint. type : str Type of the joint (e.g., "revolute", "prismatic"). pos : array-like Position of the joint frame. quat : array-like Orientation (quaternion) of the joint frame. dofs_motion_ang : array-like Angular motions allowed for each DOF. dofs_motion_vel : array-like Velocity directions for each DOF. dofs_limit : array-like Limits for each DOF (e.g., min/max). dofs_invweight : array-like Inverse weight for each DOF. dofs_stiffness : array-like Stiffness values for each DOF. dofs_damping : array-like Damping values for each DOF. dofs_armature : array-like Armature inertia values. dofs_kp : array-like Proportional gains for control. dofs_kv : array-like Derivative gains for control. dofs_force_range : array-like Allowed force/torque range for each DOF. init_q : array-like Initial configuration (position/orientation) for the joint. Returns ------- joint : AvatarJoint The created AvatarJoint instance. """ joint = AvatarJoint( entity=self, name=name, idx=self.n_joints + self._joint_start, q_start=self.n_qs + self._q_start, dof_start=self.n_dofs + self._dof_start, n_qs=n_qs, n_dofs=n_dofs, type=type, pos=pos, quat=quat, dofs_motion_ang=dofs_motion_ang, dofs_motion_vel=dofs_motion_vel, dofs_limit=dofs_limit, dofs_invweight=dofs_invweight, dofs_stiffness=dofs_stiffness, dofs_damping=dofs_damping, dofs_armature=dofs_armature, dofs_kp=dofs_kp, dofs_kv=dofs_kv, dofs_force_range=dofs_force_range, init_q=init_q, ) self._joints.append(joint) return joint
[docs] def init_jac_and_IK(self) -> None: # TODO: Avatar should also support IK pass