Esempio n. 1
0
 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.)
Esempio n. 2
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']))
Esempio n. 3
0
    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()
Esempio n. 4
0
 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))
Esempio n. 5
0
    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()
Esempio n. 6
0
    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()
Esempio n. 7
0
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')
Esempio n. 8
0
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)

Esempio n. 9
0
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')