def offsetSliderHandler(slider, event): """ :type slider: Fl_Hor_Value_Slider | Fl_Roller :return: """ if event == FL_RELEASE: if slider.label() == 'l_rotate_x': currentFootOri['Left'] = np.dot(mm.rotX(slider.value() * 4.), currentFootOri['Left']) elif slider.label() == 'l_rotate_y': currentFootOri['Left'] = np.dot(mm.rotY(slider.value() * 4.), currentFootOri['Left']) elif slider.label() == 'l_rotate_z': currentFootOri['Left'] = np.dot(mm.rotZ(slider.value() * 4.), currentFootOri['Left']) elif slider.label() == 'r_rotate_x': currentFootOri['Right'] = np.dot(mm.rotX(slider.value() * 4.), currentFootOri['Right']) elif slider.label() == 'r_rotate_y': currentFootOri['Right'] = np.dot(mm.rotY(slider.value() * 4.), currentFootOri['Right']) elif slider.label() == 'r_rotate_z': currentFootOri['Right'] = np.dot(mm.rotZ(slider.value() * 4.), currentFootOri['Right']) slider.value(0.)
def offsetSliderCallback(slider): ''' :type slider: Fl_Hor_Value_Slider | Fl_Roller :return: ''' # trigger part # if slider.label() == 'offset_tx': # _rootpos = dartModel.getBodyPositionGlobal(0) # dartModel.translateByOffset(np.array((slider.value() - _rootpos[0], 0., 0.))) # dartMotionModel.translateByOffset(np.array((slider.value() - _rootpos[0], 0., 0.))) # motion_ori[0].translateByOffset(np.array((slider.value()- _rootpos[0], 0., 0.))) # elif slider.label() == 'offset_ty': # _rootpos = dartModel.getBodyPositionGlobal(0) # dartModel.translateByOffset(np.array((0., slider.value() - _rootpos[1], 0.))) # dartMotionModel.translateByOffset(np.array((0., slider.value() - _rootpos[1], 0.))) # motion_ori[0].translateByOffset(np.array((0., slider.value()- _rootpos[1], 0.))) # elif slider.label() == 'offset_tz': # _rootpos = dartModel.getBodyPositionGlobal(0) # dartModel.translateByOffset(np.array((0., 0., slider.value() - _rootpos[2]))) # dartMotionModel.translateByOffset(np.array((0., 0., slider.value() - _rootpos[2]))) # motion_ori[0].translateByOffset(np.array((0., 0., slider.value()- _rootpos[2]))) if slider.label() == 'l_rotate_x': motion[0].setJointOrientationGlobal( LeftAnkleIdx, np.dot(mm.rotX(slider.value() * 4.), currentFootOri['Left'])) elif slider.label() == 'l_rotate_y': motion[0].setJointOrientationGlobal( LeftAnkleIdx, np.dot(mm.rotY(slider.value() * 4.), currentFootOri['Left'])) elif slider.label() == 'l_rotate_z': motion[0].setJointOrientationGlobal( LeftAnkleIdx, np.dot(mm.rotZ(slider.value() * 4.), currentFootOri['Left'])) elif slider.label() == 'r_rotate_x': motion[0].setJointOrientationGlobal( RightAnkleIdx, np.dot(mm.rotX(slider.value() * 4.), currentFootOri['Right'])) elif slider.label() == 'r_rotate_y': motion[0].setJointOrientationGlobal( RightAnkleIdx, np.dot(mm.rotY(slider.value() * 4.), currentFootOri['Right'])) elif slider.label() == 'r_rotate_z': motion[0].setJointOrientationGlobal( RightAnkleIdx, np.dot(mm.rotZ(slider.value() * 4.), currentFootOri['Right']))
def step_model(self): contacts, points, angles, orientations, root_orientation = self.controller.step(self.get_target()) # pairs = [[0,11,3,4], # [0,8,10,2], # [0,13,6,7], # [0,9,12,5], # [0,1]] pairs = [[0,18,11,3,4], [0,14,8,10,2], [0,19,13,6,7], [0,14,9,12,5], [0,14,17,1]] self.lines = [] for pair in pairs: for i in range(len(pair)-1): self.lines.append([points[pair[i]], points[pair[i+1]]]) # print(len(orientations)) for i in range(len(angles)): self.all_angles[i].append(angles[i]) for j in range(len(self.model.joints)): if j == 0: joint = self.model.joints[j] # type: pydart.FreeJoint joint_idx = joint_list.index(joint.name) hip_angles = mm.logSO3(np.dot(root_orientation, orientations[joint_idx])) # hip_angles = mm.logSO3(root_orientation) joint.set_position(np.array([hip_angles[0], hip_angles[1], hip_angles[2], points[0][0], points[0][1], points[0][2]])) continue joint = self.model.joints[j] # type: pydart.BallJoint joint_idx = joint_list.index(joint.name) joint.set_position(angles[joint_idx*3:joint_idx*3+3]) self.ik.clean_constraints() self.ik.add_joint_pos_const('LeftForeArm', np.asarray(points[10])) self.ik.add_joint_pos_const('LeftHand', np.asarray(points[2])) self.ik.add_joint_pos_const('LeftLeg', np.asarray(points[11])) self.ik.add_joint_pos_const('LeftFoot', np.asarray(points[3])) if contacts[0] > 0.8 and False: body_transform = self.model.body('LeftFoot').transform()[:3, :3] angle = math.acos(body_transform[1, 1]) body_ori = np.dot(body_transform, mm.rotX(-angle)) self.ik.add_orientation_const('LeftFoot', body_ori) self.ik.add_joint_pos_const('RightForeArm', np.asarray(points[12])) self.ik.add_joint_pos_const('RightHand', np.asarray(points[5])) self.ik.add_joint_pos_const('RightLeg', np.asarray(points[13])) self.ik.add_joint_pos_const('RightFoot', np.asarray(points[6])) self.ik.solve() foot_joint_ori = mm.exp(self.model.joint('LeftFoot').position()) self.model.joint('LeftFoot').set_position(mm.logSO3(np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(.4))))) foot_joint_ori = mm.exp(self.model.joint('RightFoot').position()) self.model.joint('RightFoot').set_position(mm.logSO3(np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(-.4))))) left_foot = self.model.body('LeftFoot') if (left_foot.to_world([0.05, -0.045, 0.1125])[1] < 0. or left_foot.to_world([-0.05, -0.045, 0.1125])[1] < 0.) \ and (left_foot.to_world([0.05, -0.045, -0.1125])[1] < 0. or left_foot.to_world([-0.05, -0.045, -0.1125])[1] < 0.): left_toe_pos1 = left_foot.to_world([0.05, -0.045, +0.1125]) left_toe_pos1[1] = 0. left_toe_pos2 = left_foot.to_world([-0.05, -0.045, +0.1125]) left_toe_pos2[1] = 0. left_heel_pos1 = left_foot.to_world([0.05, -0.045, -0.1125]) left_heel_pos1[1] = 0. left_heel_pos2 = left_foot.to_world([-0.05, -0.045, -0.1125]) left_heel_pos2[1] = 0. self.ik.clean_constraints() self.ik.add_position_const('LeftFoot', left_toe_pos1, np.array([0.05, -0.045, +0.1125])) self.ik.add_position_const('LeftFoot', left_toe_pos2, np.array([-0.05, -0.045, +0.1125])) self.ik.add_position_const('LeftFoot', left_heel_pos1, np.array([0.05, -0.045, -0.1125])) self.ik.add_position_const('LeftFoot', left_heel_pos2, np.array([-0.05, -0.045, -0.1125])) self.ik.solve() right_foot = self.model.body('RightFoot') if (right_foot.to_world([0.05, -0.045, 0.1125])[1] < 0. or right_foot.to_world([-0.05, -0.045, 0.1125])[1] < 0.) \ and (right_foot.to_world([0.05, -0.045, -0.1125])[1] < 0. or right_foot.to_world([-0.05, -0.045, -0.1125])[1] < 0.): right_toe_pos1 = right_foot.to_world([0.05, -0.045, +0.1125]) right_toe_pos1[1] = 0. right_toe_pos2 = right_foot.to_world([-0.05, -0.045, +0.1125]) right_toe_pos2[1] = 0. right_heel_pos1 = right_foot.to_world([0.05, -0.045, -0.1125]) right_heel_pos1[1] = 0. right_heel_pos2 = right_foot.to_world([-0.05, -0.045, -0.1125]) right_heel_pos2[1] = 0. self.ik.clean_constraints() self.ik.add_position_const('RightFoot', right_toe_pos1, np.array([0.05, -0.045, +0.1125])) self.ik.add_position_const('RightFoot', right_toe_pos2, np.array([-0.05, -0.045, +0.1125])) self.ik.add_position_const('RightFoot', right_heel_pos1, np.array([0.05, -0.045, -0.1125])) self.ik.add_position_const('RightFoot', right_heel_pos2, np.array([-0.05, -0.045, -0.1125])) self.ik.solve()
def toDsSkelXmlStr(self, config): jointMotion = self.bvh.toJointMotion(1., False) # jointMotion.rotateByOffset(mm.rotX(math.pi*0.5)) return self.posture2DsSkel(jointMotion[0], config, mm.rotX(math.pi * .5))
def get_rnn_ref_pose_step(self, reset=False): if not reset: self.prev_ref_q = self.ref_skel.positions() self.prev_ref_dq = self.ref_skel.velocities() self.prev_ref_p_e_hat = np.asarray([ body.world_transform()[:3, 3] for body in self.ref_body_e ]).flatten() self.prev_ref_com = self.ref_skel.com() p = self.goal_in_world_frame target = Pose2d( [p[0] / self.RNN_MOTION_SCALE, -p[2] / self.RNN_MOTION_SCALE]) target = self.rnn.pose.relativePose(target) target = target.p t_len = v_len(target) if t_len > 80: ratio = 80 / t_len target[0] *= ratio target[1] *= ratio contacts, points, angles, orientations, root_orientation = self.rnn.step( target) for j in range(len(self.ref_skel.joints)): if j == 0: joint = self.ref_skel.joints[j] # type: pydart.FreeJoint joint_idx = self.rnn_joint_list.index(joint.name) hip_angles = mm.logSO3( np.dot(root_orientation, orientations[joint_idx])) # hip_angles = mm.logSO3(root_orientation) joint.set_position( np.array([ hip_angles[0], hip_angles[1], hip_angles[2], points[0][0], points[0][1], points[0][2] ])) continue joint = self.ref_skel.joints[j] # type: pydart.BallJoint joint_idx = self.rnn_joint_list.index(joint.name) joint.set_position(angles[joint_idx * 3:joint_idx * 3 + 3]) self.ik.clean_constraints() self.ik.add_joint_pos_const('LeftForeArm', np.asarray(points[10])) self.ik.add_joint_pos_const('LeftHand', np.asarray(points[2])) self.ik.add_joint_pos_const('LeftLeg', np.asarray(points[11])) self.ik.add_joint_pos_const('LeftFoot', np.asarray(points[3])) if contacts[0] > 0.8 and False: body_transform = self.ref_skel.body('LeftFoot').transform()[:3, :3] angle = acos(body_transform[1, 1]) body_ori = np.dot(body_transform, mm.rotX(-angle)) self.ik.add_orientation_const('LeftFoot', body_ori) self.ik.add_joint_pos_const('RightForeArm', np.asarray(points[12])) self.ik.add_joint_pos_const('RightHand', np.asarray(points[5])) self.ik.add_joint_pos_const('RightLeg', np.asarray(points[13])) self.ik.add_joint_pos_const('RightFoot', np.asarray(points[6])) self.ik.solve() foot_joint_ori = mm.exp(self.ref_skel.joint('LeftFoot').position()) self.ref_skel.joint('LeftFoot').set_position( mm.logSO3(np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(.4))))) foot_joint_ori = mm.exp(self.ref_skel.joint('RightFoot').position()) self.ref_skel.joint('RightFoot').set_position( mm.logSO3( np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(-.4))))) if not self.first: dq = 30. * self.ref_skel.position_differences( self.ref_skel.positions(), self.prev_ref_q) self.ref_skel.set_velocities(dq) if reset: self.prev_ref_q = self.ref_skel.positions() self.prev_ref_dq = self.ref_skel.velocities() self.prev_ref_p_e_hat = np.asarray([ body.world_transform()[:3, 3] for body in self.ref_body_e ]).flatten() self.prev_ref_com = self.ref_skel.com()
def get_rnn_ref_pose_step(self): p = self.goal_in_world_frame target = Pose2d( [p[0] / self.RNN_MOTION_SCALE, -p[2] / self.RNN_MOTION_SCALE]) target = self.rnn.pose.relativePose(target) target = target.p t_len = v_len(target) if t_len > 80: ratio = 80 / t_len target[0] *= ratio target[1] *= ratio contacts, points, angles, orientations, root_orientation = self.rnn.step( target) for j in range(len(self.ik_skel.joints)): if j == 0: joint = self.ik_skel.joints[j] # type: pydart.FreeJoint joint_idx = self.rnn_joint_list.index(joint.name) hip_angles = mm.logSO3( np.dot(root_orientation, orientations[joint_idx])) # hip_angles = mm.logSO3(root_orientation) joint.set_position( np.array([ hip_angles[0], hip_angles[1], hip_angles[2], points[0][0], points[0][1], points[0][2] ])) continue joint = self.ik_skel.joints[j] # type: pydart.BallJoint joint_idx = self.rnn_joint_list.index(joint.name) joint.set_position(angles[joint_idx * 3:joint_idx * 3 + 3]) self.ik.clean_constraints() self.ik.add_joint_pos_const('Hips', np.asarray(points[0])) self.ik.add_joint_pos_const('LeftForeArm', np.asarray(points[10])) self.ik.add_joint_pos_const('LeftHand', np.asarray(points[2])) self.ik.add_joint_pos_const('LeftLeg', np.asarray(points[11])) self.ik.add_joint_pos_const('LeftFoot', np.asarray(points[3])) if contacts[0] > 0.8 and False: body_transform = self.ik_skel.body('LeftFoot').transform()[:3, :3] angle = acos(body_transform[1, 1]) body_ori = np.dot(body_transform, mm.rotX(-angle)) self.ik.add_orientation_const('LeftFoot', body_ori) self.ik.add_joint_pos_const('RightForeArm', np.asarray(points[12])) self.ik.add_joint_pos_const('RightHand', np.asarray(points[5])) self.ik.add_joint_pos_const('RightLeg', np.asarray(points[13])) self.ik.add_joint_pos_const('RightFoot', np.asarray(points[6])) self.ik.add_joint_pos_const('Neck1', np.asarray(points[17])) self.ik.solve() foot_joint_ori = mm.exp(self.ik_skel.joint('LeftFoot').position()) self.ik_skel.joint('LeftFoot').set_position( mm.logSO3(np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(.4))))) foot_joint_ori = mm.exp(self.ik_skel.joint('RightFoot').position()) self.ik_skel.joint('RightFoot').set_position( mm.logSO3( np.dot(foot_joint_ori, np.dot(mm.rotX(-.6), mm.rotZ(-.4))))) left_foot = self.ik_skel.body('LeftFoot') if (left_foot.to_world([0.05, -0.045, 0.1125])[1] < 0. or left_foot.to_world([-0.05, -0.045, 0.1125])[1] < 0.) \ and (left_foot.to_world([0.05, -0.045, -0.1125])[1] < 0. or left_foot.to_world([-0.05, -0.045, -0.1125])[1] < 0.): left_toe_pos1 = left_foot.to_world([0.05, -0.045, +0.1125]) left_toe_pos1[1] = 0. left_toe_pos2 = left_foot.to_world([-0.05, -0.045, +0.1125]) left_toe_pos2[1] = 0. left_heel_pos1 = left_foot.to_world([0.05, -0.045, -0.1125]) left_heel_pos1[1] = 0. left_heel_pos2 = left_foot.to_world([-0.05, -0.045, -0.1125]) left_heel_pos2[1] = 0. self.ik.clean_constraints() self.ik.add_position_const('LeftFoot', left_toe_pos1, np.array([0.05, -0.045, +0.1125])) self.ik.add_position_const('LeftFoot', left_toe_pos2, np.array([-0.05, -0.045, +0.1125])) self.ik.add_position_const('LeftFoot', left_heel_pos1, np.array([0.05, -0.045, -0.1125])) self.ik.add_position_const('LeftFoot', left_heel_pos2, np.array([-0.05, -0.045, -0.1125])) self.ik.solve() right_foot = self.ik_skel.body('RightFoot') if (right_foot.to_world([0.05, -0.045, 0.1125])[1] < 0. or right_foot.to_world([-0.05, -0.045, 0.1125])[1] < 0.) \ and (right_foot.to_world([0.05, -0.045, -0.1125])[1] < 0. or right_foot.to_world([-0.05, -0.045, -0.1125])[1] < 0.): right_toe_pos1 = right_foot.to_world([0.05, -0.045, +0.1125]) right_toe_pos1[1] = 0. right_toe_pos2 = right_foot.to_world([-0.05, -0.045, +0.1125]) right_toe_pos2[1] = 0. right_heel_pos1 = right_foot.to_world([0.05, -0.045, -0.1125]) right_heel_pos1[1] = 0. right_heel_pos2 = right_foot.to_world([-0.05, -0.045, -0.1125]) right_heel_pos2[1] = 0. self.ik.clean_constraints() self.ik.add_position_const('RightFoot', right_toe_pos1, np.array([0.05, -0.045, +0.1125])) self.ik.add_position_const('RightFoot', right_toe_pos2, np.array([-0.05, -0.045, +0.1125])) self.ik.add_position_const('RightFoot', right_heel_pos1, np.array([0.05, -0.045, -0.1125])) self.ik.add_position_const('RightFoot', right_heel_pos2, np.array([-0.05, -0.045, -0.1125])) self.ik.solve()
def preprocess(SEGMENT_FOOT=False): tasks = [] outputDir = './ppmotion/' dir = '../Data/woody2/Motion/Physics2/' config = None if SEGMENT_FOOT: # segmented foot config = { 'repeat': True, 'footRot': mm.rotX(.07), 'yOffset': 0., 'halfFootHeight': 0.0944444444444, 'scale': .01, 'type': 'woody2' } else: # box foot config = { 'repeat': True, 'footRot': mm.rotX(-.4), 'yOffset': 0., 'halfFootHeight': 0.0444444444444, 'scale': .01, 'type': 'woody2' } paths = [] paths.append(dir + 'wd2_WalkSameSame01.bvh') paths.append(dir + 'wd2_WalkForwardSlow01.bvh') paths.append(dir + 'wd2_WalkForwardNormal00.bvh') paths.append(dir + 'wd2_WalkHandWav00.bvh') paths.append(dir + 'wd2_WalkForwardFast00.bvh') paths.append(dir + 'wd2_WalkForwardVFast00.bvh') paths.append(dir + 'wd2_WalkLean00.bvh') paths.append(dir + 'wd2_WalkAzuma01.bvh') paths.append(dir + 'wd2_WalkSoldier00.bvh') paths.append(dir + 'wd2_WalkSukiko00.bvh') # paths.append(dir+'wd2_WalkBackward00.bvh') paths.append(dir + 'wd2_WalkTongTong00.bvh') tasks.append({'config': config, 'paths': paths}) ## # dir = '../Data/woody2/Motion/Balancing/' # config = {'footRot': mm.exp(mm.v3(1,-.5,0), -.6), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01, 'type':'woody2'} # paths = [] # paths.append(dir+'wd2_2foot_walk_turn.bvh') # paths.append(dir+'wd2_2foot_walk_turn2.bvh') # paths.append(dir+'wd2_slow_2foot_hop.bvh') # paths.append(dir+'wd2_short_broad_jump.bvh') # paths.append(dir+'wd2_long_broad_jump.bvh') # paths.append(dir+'wd2_ffast_cancan_run.bvh') # paths.append(dir+'wd2_fast_cancan_run.bvh') # paths.append(dir+'wd2_fast_2foot_hop.bvh') # paths.append(dir+'wd2_1foot_contact_run.bvh') # paths.append(dir+'wd2_1foot_contact_run2.bvh') ## tasks.append({'config':config, 'paths':paths}) # ## dir = '../Data/woody2/Motion/Samsung/' ## config = {'footRot': mm.rotX(-.46), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} ## paths = [] ## paths.append(dir+'wd2_left_turn.bvh') ## paths.append(dir+'wd2_right_turn.bvh') ## paths.append(dir+'wd2_pose_inner1.bvh') ## paths.append(dir+'wd2_pose_inner2.bvh') ## tasks.append({'config':config, 'paths':paths}) # # dir = '../Data/woody2/Motion/Picking/' # config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01, 'type':'woody2'} # paths = [] # paths.append(dir+'wd2_pick_walk_1.bvh') ## tasks.append({'config':config, 'paths':paths}) # # dir = '../Data/woody2/Motion/VideoMotion/' # config = {'footRot': mm.rotX(-.48), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} ## paths = glob.glob(dir+'*.bvh') # paths = [] # paths.append(dir+'wd2_cross_walk_90d_fast_27.bvh') ## tasks.append({'config':config, 'paths':paths}) # # dir = '../Data/woody2/Motion/Walking/' # config = {'footRot': mm.rotX(-.40), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} # paths = glob.glob(dir+'*.bvh') ## tasks.append({'config':config, 'paths':paths}) # ## dir = '../Data/woody2/Motion/samsung_boxing/round/' ## config = {'footRot': mm.rotX(-.65), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} ## paths = glob.glob(dir+'*.bvh') ## tasks.append({'config':config, 'paths':paths}) # ## dir = '../Data/woody2/Motion/samsung_boxing/boxman/' ## config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} ## paths = glob.glob(dir+'*.bvh') ## tasks.append({'config':config, 'paths':paths}) # # dir = '../Data/woody2/Motion/motion_edit/' # config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'} # paths = glob.glob(dir+'*.bvh') ## tasks.append({'config':config, 'paths':paths}) # ## outputDir = './icmotion_test/' ## dir = './rawmotion/' ## config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'} ## paths = glob.glob(dir+'*.temp') ## tasks.append({'config':config, 'paths':paths}) # # outputDir = './icmotion_last/' # dir = './lastmotion/add/' ## config = {'rootRot':mm.rotZ(.05), 'footRot': mm.rotX(-.5), 'leftFootR':mm.rotZ(-.1), \ # config = {'rootRot':mm.rotZ(.0), 'footRot': np.dot(mm.rotX(-.5), mm.rotZ(.04)), 'leftFootR':mm.rotZ(-.2), \ # 'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'} # paths = glob.glob(dir+'*.temp') # tasks.append({'config':config, 'paths':paths}) # outputDir = './ppmotion_slope/' # dir = './rawmotion_slope_extracted/' # config = {'rootRot':mm.rotZ(.0), 'footRot': np.dot(mm.rotX(-.55), mm.rotZ(.04)), 'leftFootR':mm.rotZ(-.2), \ # 'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'} # paths = glob.glob(dir+'*.bvh') # tasks.append({'config':config, 'paths':paths}) VISUALIZE = False for task in tasks: config = task['config'] paths = task['paths'] for path in paths: motion = yf.readBvhFile(path) normalizeSkeleton(motion, config) adjustHeight(motion, config['halfFootHeight']) additionalEdit(motion, path) outputPath = outputDir + os.path.basename(path) if SEGMENT_FOOT: outputPath = outputDir + "segfoot_" + os.path.basename(path) yf.writeBvhFile(outputPath, motion) print(outputPath, 'done') if 'repeat' in config and config['repeat']: hRef = .1 vRef = .3 lc = yma.getElementContactStates(motion, 'LeftFoot', hRef, vRef) interval = yba.getWalkingCycle2(motion, lc) transitionLength = 20 if 'wd2_WalkAzuma01.bvh' in path else 10 motion = ymt.repeatCycle(motion, interval, 50, transitionLength) outputName = os.path.splitext( os.path.basename(path))[0] + '_REPEATED.bvh' outputPath = outputDir + outputName if SEGMENT_FOOT: outputPath = outputDir + 'segfoot_' + outputName yf.writeBvhFile(outputPath, motion) print(outputPath, 'done') if VISUALIZE: viewer = ysv.SimpleViewer() viewer.record(False) viewer.doc.addRenderer( 'motion', yr.JointMotionRenderer(motion, (0, 100, 255), yr.LINK_LINE)) viewer.doc.addObject('motion', motion) viewer.startTimer(1 / 30.) viewer.show() Fl.run() print('FINISHED')
from PyCommon.modules.Resource import ysMotionLoader as yf import PyCommon.modules.Motion.ysSkeletonEdit as yse from PyCommon.modules.Math import mmMath as mm bvh = yf.readBvhFileAsBvh('wd2_jump0.bvh') print(bvh) bvh.swap_joint('RightUpLeg', 'LeftUpLeg') print(bvh) # bvh.writeBvhFile('wd2_jump0_edited.bvh') motion = bvh.toJointMotion(scale=1., applyRootOffset=False) yse.rotateJointLocal(motion, 'LeftFoot', mm.rotX(0.4), False) yse.rotateJointLocal(motion, 'RightFoot', mm.rotX(0.4), False) yf.writeBvhFile('wd2_jump0_edited.bvh', motion)
def preprocess(SEGMENT_FOOT=False): tasks = [] outputDir = './ppmotion/' if SEGMENT_FOOT: outputDir = './ppmotion_segfoot/' dir = './ori_motion/' config = None if SEGMENT_FOOT: # segmented foot # config = {'repeat':False, 'footRot': mm.rotX(.07), 'yOffset':0., 'halfFootHeight': 0.0944444444444, 'scale':.01, 'type':'woody2'} config = { 'repeat': False, 'footRot': mm.rotX(-.07), 'yOffset': 0., 'halfFootHeight': 0.0944444444444, 'scale': .01, 'type': 'woody2' } else: # box foot config = { 'repeat': False, 'footRot': mm.rotX(-.4), 'yOffset': 0., 'halfFootHeight': 0.0444444444444, 'scale': .01, 'type': 'woody2' } paths = [] # rotX = -0.07 paths.append(dir + 'wd2_1foot_contact_run2_edit.bvh') paths.append(dir + 'wd2_fast_2foot_hop_edit.bvh') paths.append(dir + 'wd2_long_broad_jump_edit.bvh') paths.append(dir + 'wd2_n_kick_edit.bvh') paths.append(dir + 'wd2_short_broad_jump_edit.bvh') paths.append(dir + 'wd2_slow_2foot_hop_edit.bvh') # rotX = 0.07 # paths.append(dir+'wd2_boxing_round_round_girl1_edit.bvh') # paths.append(dir+'wd2_u-turn_edit.bvh') tasks.append({'config': config, 'paths': paths}) VISUALIZE = False for task in tasks: config = task['config'] paths = task['paths'] for path in paths: motion = yf.readBvhFile(path) normalizeSkeleton(motion, config) adjustHeight(motion, config['halfFootHeight']) additionalEdit(motion, path) outputPath = outputDir + os.path.basename(path) if SEGMENT_FOOT: outputPath = outputDir + "segfoot_" + os.path.basename(path) yf.writeBvhFile(outputPath, motion) print(outputPath, 'done') if 'repeat' in config and config['repeat']: hRef = .1 vRef = .3 lc = yma.getElementContactStates(motion, 'LeftFoot', hRef, vRef) interval = yba.getWalkingCycle2(motion, lc) transitionLength = 20 if 'wd2_WalkAzuma01.bvh' in path else 10 motion = ymt.repeatCycle(motion, interval, 50, transitionLength) outputName = os.path.splitext( os.path.basename(path))[0] + '_REPEATED.bvh' outputPath = outputDir + outputName if SEGMENT_FOOT: outputPath = outputDir + 'segfoot_' + outputName yf.writeBvhFile(outputPath, motion) print(outputPath, 'done') if VISUALIZE: viewer = ysv.SimpleViewer() viewer.record(False) viewer.doc.addRenderer( 'motion', yr.JointMotionRenderer(motion, (0, 100, 255), yr.LINK_LINE)) viewer.doc.addObject('motion', motion) viewer.startTimer(1 / 30.) viewer.show() Fl.run() print('FINISHED')