def __init__(self, char_file, ctrl_file): # NOTICE humanoid.txt and humanoid.urdf have different scales, urdf is 4x larger self._kin_core = KinematicCore.cKinematicCore(char_file) ### all private members self.joints = None self.bodys = None self.dof = None self.expdof = None # TODO move to function self.num_joints = None self.joint_types = None self.joint_dof = None self.pos_start = None # start position in pose/vel vec self.act_start = None # start position in action vec self.joint_w = None # control configuration self.kp = None self.kd = None self.a_max = None self.a_min = None ### all private members self._calc_kin_info(char_file) self._calc_ctrl_info(ctrl_file)
def calc_reward(self): char = self._skeleton._kin_core.getCharacter() kin_energy = KinematicCore.kinematicEnergy(char, True) rwd = (kin_energy - self._low) / self._gap rwd = np.clip(rwd, 0, 1) return rwd
def calc_volume(self): try: char = self._skeleton._kin_core.getCharacter() volume = KinematicCore.jointConvexHullVolume(char, self._nodes) except: from IPython import embed embed() return volume
def get_energy_statistics(self): # get position of body parts and com l = max(len(self._frames), 120) spf = self._cycletime / (l + 1) kin_energies = [] for i in range(l): t = i * spf cnt, pose, vel = self.slerp(t) self._skeleton.set_pose(pose) self._skeleton.set_vel(vel) char = self._skeleton._kin_core.getCharacter() e_rel = KinematicCore.kinematicEnergy(char, True) kin_energies.append(e_rel) return box_param(kin_energies)
def _butterworth_filter(self, vels): # TODO butterworth filter for i in range(vels.shape[1]): vels[:, i] = KinematicCore.butterworthFilter(self._spf, 6, vels[:, i]) return vels
def get_kin_energy(self): char = self._skeleton._kin_core.getCharacter() kin_energy = KinematicCore.kinematicEnergy(char, True) return kin_energy