genesis.engine.materials.FEM.muscle 源代码

import taichi as ti
import genesis as gs
from .elastic import Elastic


[文档]@ti.data_oriented class Muscle(Elastic): def __init__( self, E=1e6, # Young's modulus nu=0.2, # Poisson's ratio rho=1000.0, # density (kg/m^3) model="linear", n_groups=1, # number of muscle group ): super().__init__(E, nu, rho, model) # inherit from Elastic self._update_stress_without_actuation = self.update_stress self.update_stress = self._update_stress_with_actuation self._stiffness = E # NOTE: use Young's modulus as muscle stiffness self._n_groups = n_groups @ti.func def _update_stress_with_actuation(self, mu, lam, J, F, actu, m_dir): stress = self._update_stress_without_actuation(mu, lam, J, F, actu, m_dir) l = (F @ m_dir).norm(1e-12) mmT = m_dir.outer_product(m_dir) stress += self._stiffness * (actu / l) * F @ mmT return stress @property def stiffness(self): return self._stiffness @property def n_groups(self): return self._n_groups