|
4 | 4 | ================================================= """ |
5 | 5 |
|
6 | 6 | from robohive.envs import env_base |
| 7 | +import mujoco |
7 | 8 | import numpy as np |
8 | 9 |
|
9 | 10 | class BaseV0(env_base.MujocoEnv): |
@@ -88,15 +89,24 @@ def step(self, a, **kwargs): |
88 | 89 |
|
89 | 90 | # implement abnormalities |
90 | 91 | if self.muscle_condition == 'fatigue': |
| 92 | + actuator_moment = np.zeros((self.sim.model.nu, self.sim.model.nv)) |
| 93 | + mujoco.mju_sparse2dense( |
| 94 | + actuator_moment, |
| 95 | + self.sim.data.actuator_moment.reshape(-1), |
| 96 | + self.sim.data.moment_rownnz, |
| 97 | + self.sim.data.moment_rowadr, |
| 98 | + self.sim.data.moment_colind.reshape(-1), |
| 99 | + ) |
91 | 100 | for mus_idx in range(self.sim.model.actuator_gainprm.shape[0]): |
92 | 101 |
|
93 | | - if self.sim.data.actuator_moment.shape[1]==1: |
94 | | - self.f_load[mus_idx].append(self.sim.data.actuator_moment[mus_idx].copy()) |
| 102 | + if actuator_moment.shape[1] == 1: |
| 103 | + self.f_load[mus_idx].append(actuator_moment[mus_idx].copy()) |
95 | 104 | else: |
96 | | - self.f_load[mus_idx].append(self.sim.data.actuator_moment[mus_idx,1].copy()) |
| 105 | + self.f_load[mus_idx].append(actuator_moment[mus_idx, 1].copy()) |
97 | 106 |
|
98 | 107 | if self.MVC_rest[mus_idx] != 0: |
99 | | - f_int = np.sum(self.f_load[mus_idx]-np.max(self.f_load[mus_idx],0),0)/self.MVC_rest[mus_idx] |
| 108 | + f_load = np.asarray(self.f_load[mus_idx]) |
| 109 | + f_int = np.sum(f_load - np.max(f_load, 0), 0)/self.MVC_rest[mus_idx] |
100 | 110 | f_cem = self.MVC_rest[mus_idx]*np.exp(self.k_fatigue*f_int) |
101 | 111 | else: |
102 | 112 | f_cem = 0 |
|
0 commit comments