-
Notifications
You must be signed in to change notification settings - Fork 9
/
vis_record.py
62 lines (53 loc) · 1.81 KB
/
vis_record.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import numpy as np
import sys, os
from utils.humanoid_kin import HumanoidSkeleton
from utils.humanoid_mocap import HumanoidMocap
from utils.motion_recorder import MotionRecorder
from ur import UnityRenderer
from sim import engine_builder, Plane, Character
from env.jumper.block import Block
from env.jumper.wall import Wall
from presets import preset
preset.load_default()
preset.experiment.env = "deepmimic"
char_file = "data/characters/humanoid3d.txt"
ctrl_file = "data/controllers/humanoid3d_ctrl.txt"
skeleton = HumanoidSkeleton(char_file, ctrl_file)
engine = engine_builder("pybullet", 1/600.0)
plane = Plane()
character = Character(skeleton, True)
engine.add_object(plane)
engine.add_object(character)
obj_map = {'character': character}
recorder = MotionRecorder(input_file=sys.argv[1])
if recorder.get('block'):
obj_map['block'] = Block()
if recorder.get('wall'):
obj_map['wall'] = Wall()
ur_renderer = UnityRenderer(1.0/600)
ur_renderer.register_object("character", character)
while True:
i = 0
while True:
has_data = False
for obj_name in obj_map:
frames = recorder.get(obj_name)
if len(frames) > i:
has_data = True
frame = np.array(frames[i])
if obj_name == 'character':
character.set_pose(frame, np.array([0]*43))
else:
obj = obj_map[obj_name]
engine._pybullet_client.resetBasePositionAndOrientation(
bodyUniqueId=obj.object_id,
posObj=frame[0:3].tolist(),
ornObj=frame[3:7].tolist()
)
ur_renderer.tick()
if has_data:
i += 1
else:
for k in range(1200):
ur_renderer.tick()
break