Beispiel #1
0
    def __init__(self, env_name='walk'):
        self.world = pydart.World(1. / 1200.,
                                  "../data/woody_with_ground_v2.xml")
        self.world.control_skel = self.world.skeletons[1]
        self.skel = self.world.skeletons[1]
        self.Kp, self.Kd = 400., 40.
        self.pdc = PDController(self.skel, self.world.time_step(), 400., 40.)

        self.env_name = env_name

        self.ref_motion = None  # type: ym.Motion

        if env_name == 'walk':
            self.ref_motion = yf.readBvhFile(
                "../data/woody_walk_normal.bvh")[40:]
        elif env_name == 'spiral_walk':
            self.ref_motion = yf.readBvhFile(
                "../data/wd2_spiral_walk_normal05.bvh")
        elif env_name == 'walk_spin':
            self.ref_motion = yf.readBvhFile(
                "../data/wd2_2foot_walk_turn2.bvh")
        elif env_name == 'jump':
            self.ref_motion = yf.readBvhFile("../data/wd2_jump0.bvh")[164:280]
        elif env_name == 'walk_fast':
            self.ref_motion = yf.readBvhFile(
                "../data/wd2_WalkForwardVFast00.bvh")

        elif env_name == 'walk_left_90':
            self.ref_motion = yf.readBvhFile("../data/walk_left_90degree.bvh")
        elif env_name == 'walk_left_45':
            self.ref_motion = yf.readBvhFile("../data/walk_left_45degree.bvh")
        elif env_name == 'walk_pick':
            self.ref_motion = yf.readBvhFile("../data/wd2_pick_walk_1.bvh")
        elif env_name == 'walk_u_turn':
            self.ref_motion = yf.readBvhFile("../data/wd2_u-turn.bvh")[25:214]
            self.ref_motion.translateByOffset([0., 0.03, 0.])

        elif env_name == 'jump_whole':
            self.ref_motion = yf.readBvhFile("../data/wd2_jump0.bvh")[315:966]
        elif env_name == 'walk_u_turn_whole':
            self.ref_motion = yf.readBvhFile("../data/wd2_u-turn.bvh")
            self.ref_motion.translateByOffset([0., 0.03, 0.])

        self.ref_world = pydart.World(1. / 1200.,
                                      "../data/woody_with_ground.xml")
        self.ref_skel = self.ref_world.skeletons[1]
        # self.step_per_frame = round((1./self.world.time_step()) / self.ref_motion.fps)
        self.step_per_frame = 40

        self.rsi = True

        self.w_p = 0.65
        self.w_v = 0.1
        self.w_e = 0.15
        self.w_c = 0.1

        self.exp_p = 2.
        self.exp_v = 0.1
        self.exp_e = 40.
        self.exp_c = 10.

        self.body_num = self.skel.num_bodynodes()
        self.idx_e = [
            self.skel.bodynode_index('LeftFoot'),
            self.skel.bodynode_index('RightFoot'),
            self.skel.bodynode_index('LeftForeArm'),
            self.skel.bodynode_index('RightForeArm')
        ]
        self.body_e = list(map(self.skel.body, self.idx_e))
        self.ref_body_e = list(map(self.ref_skel.body, self.idx_e))
        self.motion_len = len(self.ref_motion)
        self.motion_time = len(self.ref_motion) / self.ref_motion.fps

        self.time_offset = 0.

        state_num = 1 + (3 * 3 + 4) * self.body_num
        action_num = self.skel.num_dofs() - 6

        state_high = np.array([np.finfo(np.float32).max] * state_num)
        action_high = np.array([pi * 10. / 2.] * action_num)

        self.action_space = gym.spaces.Box(-action_high,
                                           action_high,
                                           dtype=np.float32)
        self.observation_space = gym.spaces.Box(-state_high,
                                                state_high,
                                                dtype=np.float32)

        self.viewer = None

        self.phase_frame = 0

        # max training time
        self.training_time = 3.

        self.evaluation = False

        self.visualize = False
        self.visualize_select_motion = 0
Beispiel #2
0
    def __init__(self, env_name='walk'):
        self.skel_file_name = '../data/cmu_with_ground.xml'
        self.world = pydart.World(1. / 1200., self.skel_file_name)
        self.world.control_skel = self.world.skeletons[1]
        self.skel = self.world.skeletons[1]
        self.Kp, self.Kd = 400., 40.
        self.pdc = PDController(self.skel, self.world.time_step(), 400., 40.)

        self.env_name = env_name

        self.ref_world = pydart.World(1. / 1200., self.skel_file_name)
        self.ref_skel = self.ref_world.skeletons[1]

        self.step_per_frame = 40

        self.rnn = RNNController(env_name)
        self.RNN_MOTION_SCALE = 0.01
        self.rnn_joint_list = [
            "Head", "Hips", "LHipJoint", "LeftArm", "LeftFoot", "LeftForeArm",
            "LeftHand", "LeftLeg", "LeftShoulder", "LeftToeBase", "LeftUpLeg",
            "LowerBack", "Neck", "Neck1", "RHipJoint", "RightArm", "RightFoot",
            "RightForeArm", "RightHand", "RightLeg", "RightShoulder",
            "RightToeBase", "RightUpLeg", "Spine", "Spine1"
        ]
        self.rnn_target_update_prob = 1. / 150.
        self.ik = DartIk(self.ref_skel)

        self.rsi = True

        self.w_g = 0.3
        self.w_p = 0.65 * .7
        self.w_v = 0.1 * .7
        self.w_e = 0.15 * .7
        self.w_c = 0.1 * .7

        self.exp_g = 2.5
        self.exp_p = 2.
        self.exp_v = 0.1
        self.exp_e = 40.
        self.exp_c = 10.

        self.body_num = self.skel.num_bodynodes()
        self.idx_e = [
            self.skel.bodynode_index('LeftFoot'),
            self.skel.bodynode_index('RightFoot'),
            self.skel.bodynode_index('LeftHand'),
            self.skel.bodynode_index('RightHand')
        ]
        self.body_e = list(map(self.skel.body, self.idx_e))
        self.ref_body_e = list(map(self.ref_skel.body, self.idx_e))

        self.time_offset = 0.
        self.step_num = 0

        # state_num = 2 + (3*3 + 4) * self.body_num
        state_num = 2 + 2 * 3 * self.body_num + 3 * (self.skel.num_dofs() - 3)
        action_num = self.skel.num_dofs() - 6

        state_high = np.array([np.finfo(np.float32).max] * state_num)
        action_high = np.array([pi * 10. / 2.] * action_num)

        self.action_space = gym.spaces.Box(-action_high,
                                           action_high,
                                           dtype=np.float32)
        self.observation_space = gym.spaces.Box(-state_high,
                                                state_high,
                                                dtype=np.float32)

        self.viewer = None

        self.phase_frame = 0
        self.goal = np.zeros(2)
        self.goal_prev = self.goal.copy()
        self.goal_in_world_frame = np.zeros(3)

        self.first = True

        self.prev_ref_q = self.ref_skel.positions()
        self.prev_ref_dq = np.zeros(self.ref_skel.num_dofs())
        self.prev_ref_p_e = np.asarray([
            body.world_transform()[:3, 3] for body in self.ref_body_e
        ]).flatten()
        self.prev_ref_com = self.ref_skel.com()
Beispiel #3
0
    def __init__(self):
        self.world = pydart.World(1./1200., "../data/woody_with_ground.xml")
        self.world.control_skel = self.world.skeletons[1]
        self.skel = self.world.skeletons[1]
        self.pdc = PDController(self.skel, self.world.time_step(), 400., 40.)
        self.Kp, self.Kd = 400., 40.

        self.ik = DartIk(self.skel)

        self.ref_motions = list()  # type: list[ym.Motion]
        self.ref_motions.append(yf.readBvhFile("../data/woody_walk_normal.bvh")[40:])
        self.ref_motions.append(yf.readBvhFile("../data/wd2_WalkForwardVFast00.bvh"))
        self.ref_motions.append(yf.readBvhFile("../data/wd2_WalkForwardSlow01.bvh"))
        self.ref_motions.append(yf.readBvhFile("../data/walk_right_45degree.bvh")[21:134])
        self.ref_motions.append(yf.readBvhFile("../data/walk_left_45degree.bvh")[26:141])
        # self.ref_motions.append(yf.readBvhFile("../data/walk_left_90degree.bvh")[21:153])
        # self.ref_motions.append(yf.readBvhFile('../data/wd2_WalkSukiko00.bvh'))
        # self.ref_motions.append(yf.readBvhFile("../data/wd2_jump0.bvh")[164:280])
        # self.ref_motions.append(yf.readBvhFile("../data/wd2_u-turn.bvh")[25:214])
        # self.ref_motions[-1].translateByOffset([0., 0.03, 0.])
        self.motion_num = len(self.ref_motions)
        self.reward_weights_by_fps = [self.ref_motions[0].fps / self.ref_motions[i].fps for i in range(self.motion_num)]

        self.ref_motion = self.ref_motions[0]

        self.ref_world = pydart.World(1./1200., "../data/woody_with_ground.xml")
        self.ref_skel = self.ref_world.skeletons[1]
        self.step_per_frame = None

        self.rsi = True

        self.specified_motion_num = 0
        self.is_motion_specified = False

        # self.w_g = 0.3
        # self.w_p = 0.65 * .7
        # self.w_v = 0.1 * .7
        # self.w_e = 0.15 * .7
        # self.w_c = 0.1 * .7

        self.w_p = 0.65
        self.w_v = 0.1
        self.w_e = 0.15
        self.w_c = 0.1

        self.exp_g = 2.5
        self.exp_p = 2.
        self.exp_v = 0.1
        self.exp_e = 40.
        self.exp_c = 10.

        self.body_num = self.skel.num_bodynodes()
        self.idx_e = [self.skel.bodynode_index('LeftFoot'), self.skel.bodynode_index('RightFoot'),
                      self.skel.bodynode_index('LeftForeArm'), self.skel.bodynode_index('RightForeArm')]
        self.body_e = list(map(self.skel.body, self.idx_e))
        self.ref_body_e = list(map(self.ref_skel.body, self.idx_e))
        self.motion_len = len(self.ref_motion)

        self.goals_in_world_frame = list()
        self.goal = np.zeros(2)

        self.goals = list()
        self.goal_window = 45

        state_num = 3*self.goal_window + (3*3 + 4) * self.body_num
        # action_num = self.skel.num_dofs() - 6
        action_num = self.skel.num_dofs()

        state_high = np.array([np.finfo(np.float32).max] * state_num)
        action_high = np.array([pi*2.] * action_num)

        self.action_space = gym.spaces.Box(-action_high, action_high, dtype=np.float32)
        self.observation_space = gym.spaces.Box(-state_high, state_high, dtype=np.float32)

        self.viewer = None

        self.phase_frame = 0

        self.prev_ref_q = np.zeros(self.ref_skel.num_dofs())
        self.prev_ref_dq = np.zeros(self.ref_skel.num_dofs())
        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()

        # setting for reward
        self.reward_joint = list()
        self.reward_joint.append('j_RightUpLeg')
        self.reward_joint.append('j_RightLeg')
        self.reward_joint.append('j_LeftUpLeg')
        self.reward_joint.append('j_LeftLeg')
        self.reward_joint.append('j_Spine')
        self.reward_joint.append('j_Spine1')
        self.reward_joint.append('j_RightArm')
        self.reward_joint.append('j_RightForeArm')
        self.reward_joint.append('j_LeftArm')
        self.reward_joint.append('j_LeftForeArm')
Beispiel #4
0
    def __init__(self, rnn_len):
        skel_file = '../data/cmu_with_ground.xml'
        self.world = pydart.World(1./1200., skel_file)
        self.world.control_skel = self.world.skeletons[1]
        self.skel = self.world.skeletons[1]
        self.Kp, self.Kd = 800., 40.
        self.pdc = PDController(self.skel, self.world.time_step(), 400., 40.)

        self.ref_motion = yf.readBvhFile("../data/cmu_tpose.bvh")[:rnn_len]
        self.ref_motion_len = rnn_len

        self.ref_world = pydart.World(1./1200., skel_file)
        self.ref_skel = self.ref_world.skeletons[1]
        self.step_per_frame = 40

        self.rsi = True

        # self.w_g = 0.3
        # self.w_p = 0.65 * .7
        # self.w_v = 0.1 * .7
        # self.w_e = 0.15 * .7
        # self.w_c = 0.1 * .7

        self.w_p = 0.65
        self.w_v = 0.1
        self.w_e = 0.15
        self.w_c = 0.1

        self.exp_g = 2.5
        self.exp_p = 2.
        self.exp_v = 0.1
        self.exp_e = 40.
        self.exp_c = 10.

        self.body_num = self.skel.num_bodynodes()
        self.idx_e = [self.skel.bodynode_index('LeftFoot'), self.skel.bodynode_index('RightFoot'),
                      self.skel.bodynode_index('LeftHand'), self.skel.bodynode_index('RightHand')]
        self.body_e = list(map(self.skel.body, self.idx_e))
        self.ref_body_e = list(map(self.ref_skel.body, self.idx_e))
        self.motion_len = len(self.ref_motion)
        self.motion_time = len(self.ref_motion) / self.ref_motion.fps

        state_num = 2 + (3*3 + 4) * self.body_num + (3 + 4) * self.body_num
        action_num = self.skel.num_dofs() - 6

        state_high = np.array([np.finfo(np.float32).max] * state_num)
        action_high = np.array([pi*10./2.] * action_num)

        self.action_space = gym.spaces.Box(-action_high, action_high, dtype=np.float32)
        self.observation_space = gym.spaces.Box(-state_high, state_high, dtype=np.float32)

        self.viewer = None

        self.phase_frame = 0

        self.goals_in_world_frame = list()
        self.goal = np.zeros(2)

        self.prev_ref_q = np.zeros(self.ref_skel.num_dofs())
        self.prev_ref_dq = np.zeros(self.ref_skel.num_dofs())
        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()
        self.prev_goal = np.zeros(2)
Beispiel #5
0
    def __init__(self, env_slaves=1):
        self.world = pydart.World(1. / 1200., "../data/woody_with_ground.xml")
        self.world.control_skel = self.world.skeletons[1]
        self.skel = self.world.skeletons[1]
        self.pdc = PDController(self.skel, self.world.time_step(), 400., 40.)
        self.Kp, self.Kd = 400., 40.

        self.ref_motions = list()  # type: list[ym.Motion]
        self.ref_motions.append(
            yf.readBvhFile("../data/woody_walk_normal.bvh")[40:])
        # self.ref_motions.append(yf.readBvhFile("../data/wd2_jump0.bvh")[164:280])
        self.ref_motions.append(yf.readBvhFile('../data/wd2_WalkSukiko00.bvh'))
        self.ref_motions.append(
            yf.readBvhFile("../data/walk_left_90degree.bvh"))
        self.ref_motions.append(
            yf.readBvhFile("../data/wd2_u-turn.bvh")[25:214])
        self.ref_motions[-1].translateByOffset([0., 0.03, 0.])
        self.ref_motions.append(
            yf.readBvhFile("../data/wd2_WalkForwardVFast00.bvh"))
        self.motion_num = len(self.ref_motions)
        self.reward_weights_by_fps = [
            self.ref_motions[0].fps / self.ref_motions[i].fps
            for i in range(self.motion_num)
        ]

        self.ref_motion = self.ref_motions[0]

        self.ref_world = pydart.World(1. / 1200.,
                                      "../data/woody_with_ground.xml")
        self.ref_skel = self.ref_world.skeletons[1]
        self.step_per_frame = None

        self.rsi = True

        self.specified_motion_num = 0
        self.is_motion_specified = False

        self.w_p = 0.65
        self.w_v = 0.1
        self.w_e = 0.15
        self.w_c = 0.1

        self.exp_p = 2.
        self.exp_v = 0.1
        self.exp_e = 40.
        self.exp_c = 10.

        self.body_num = self.skel.num_bodynodes()
        self.idx_e = [
            self.skel.bodynode_index('LeftFoot'),
            self.skel.bodynode_index('RightFoot'),
            self.skel.bodynode_index('LeftForeArm'),
            self.skel.bodynode_index('RightForeArm')
        ]
        self.body_e = list(map(self.skel.body, self.idx_e))
        self.ref_body_e = list(map(self.ref_skel.body, self.idx_e))
        self.motion_time = len(self.ref_motion) / self.ref_motion.fps

        self.time_offset = 0.

        state_num = 2 + (3 * 3 + 4) * self.body_num
        action_num = self.skel.num_dofs() - 6

        state_high = np.array([np.finfo(np.float32).max] * state_num)
        action_high = np.array([pi * 10. / 2.] * action_num)

        self.action_space = gym.spaces.Box(-action_high,
                                           action_high,
                                           dtype=np.float32)
        self.observation_space = gym.spaces.Box(-state_high,
                                                state_high,
                                                dtype=np.float32)

        self.viewer = None