Skip to content

Commit 126c1ea

Browse files
committed
NEW: dynamic camera view in evaluation (alpha version)
1 parent 6340320 commit 126c1ea

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

UIB/envs/mobl_arms/models/variants/mobl_arms_muscles_v2_modified.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@
6262
<camera name="backview" pos="-1.5 0 0.8" euler="1.57 -1.57 0" />
6363
<camera name="buttonfrontview" pos="-0.3 -0.15 1" euler="1.57 -1.57 0" />
6464

65-
<!-- <body name="rightview" pos="0 -0.2 1" euler="0 -1.57 -1.57"> -->
66-
<!-- <camera name="rightview" euler="0 0.25 0" mode="fixed"/> -->
67-
<!-- </body> -->
65+
<body name="dynamicview" pos="0 0 1" euler="1.57 1.57 0">
66+
<camera name="dynamicview" pos="0 1.5 0" target="thorax" mode="targetbody"/>
67+
</body>
6868
<!-- <body name="carsceneview" pos="-0.9 -0.3 2" euler="0 -1.57 -1.57"> -->
6969
<!-- <camera name="carsceneview" euler="-0.6 0 0" mode="fixed"/> -->
7070
<!-- </body> -->

UIB/test/evaluator.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import pickle
1010
from pathlib import Path
1111

12+
from scipy.spatial.transform import Rotation
13+
1214
from UIB.utils.logger import StateLogger, ActionLogger
1315
from UIB.utils.functions import output_path
1416

@@ -18,19 +20,40 @@ def natural_sort(l):
1820
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
1921
return sorted(l, key=alphanum_key)
2022

21-
def grab_pip_image(env, ocular_img_type="inset"):
23+
def grab_pip_image(env, ocular_img_type="inset", dynamic_camera=False):
2224
# Grab an image from both 'for_testing' camera and 'oculomotor' camera, and display them 'picture-in-picture'
2325

26+
# Define camera to use for agent perception
27+
eye_camera_name = 'oculomotor'
28+
29+
# Define camera to use for visualization
30+
main_camera_name = ('dynamicview' if dynamic_camera else 'backview') if 'driving' in env.spec.id else 'for_testing' #for_testing #front #rightview #oculomotor #backview
31+
2432
# Define image size
2533
width, height = env.metadata["imagesize"]
2634

2735
# Visualise target plane
2836
if hasattr(env, "target_plane_geom_idx"):
2937
env.model.geom_rgba[env.target_plane_geom_idx][-1] = 0.1 #0 #.25 #0.1
3038

39+
# Dynamic camera mode
40+
if dynamic_camera:
41+
if not hasattr(env, "camera_angle"):
42+
env.camera_angle = -np.pi/2
43+
env.camera_angle_step = 0
44+
env.camera_pos = np.array([0, 1.75, 0])
45+
env.camera_angle_vertical = -np.pi/2
46+
env.camera_angle -= (0.02) - 0.02*(min((1, env.camera_angle_step/400))) #last term: dynamic speed change
47+
env.camera_angle_vertical += 0.005 if 200 <= env.camera_angle_step < 300 else 0 #dynamically adjust vertical camera angle
48+
env.camera_pos[1] -= 0.004 if 100 <= env.camera_angle_step < 300 else 0 #dynamically adjust camera position relative to torso
49+
env.camera_pos[2] -= 0.001 if 200 <= env.camera_angle_step < 300 else 0 #dynamically adjust camera position relative to torso
50+
env.camera_angle_step += 1
51+
env.sim.model.body_quat[env.sim.model._body_name2id[main_camera_name]][:] = Rotation.from_euler("xyz", (1.57, env.camera_angle_vertical, env.camera_angle)).as_quat()[[3, 0, 1, 2]]
52+
env.sim.model.cam_pos[env.sim.model._camera_name2id[main_camera_name]][:] = env.camera_pos
53+
3154
# Grab images
32-
img = np.flipud(env.sim.render(height=height, width=width, camera_name='backview' if 'driving' in env.spec.id else 'for_testing')) #for_testing #front #rightview #oculomotor #backview
33-
ocular_img = np.flipud(env.sim.render(height=env.ocular_image_height, width=env.ocular_image_width, camera_name='oculomotor'))
55+
img = np.flipud(env.sim.render(height=height, width=width, camera_name=main_camera_name))
56+
ocular_img = np.flipud(env.sim.render(height=env.ocular_image_height, width=env.ocular_image_width, camera_name=eye_camera_name))
3457

3558
# Disable target plane
3659
if hasattr(env, "target_plane_geom_idx"):

0 commit comments

Comments
 (0)