@@ -18,13 +18,9 @@ class Mujoco(Interface):
18
18
such as: number of joints, number of links, mass information etc.
19
19
dt: float, optional (Default: 0.001)
20
20
simulation time step in seconds
21
- display_frequency: int, optional (Default: 1)
22
- How often to render the frame to display on screen.
23
- EX:
24
- a value of 1 displays every sim frame
25
- a value of 5 displays every 5th frame
26
- a value of 0 runs the simulation offscreen
27
- render_params : dict, optional (Default: None)
21
+ visualize: boolean, optional (Default: True)
22
+ turns visualization on or off
23
+ offscreen_render_params : dict, optional (Default: None)
28
24
'cameras' : list
29
25
camera ids, the order the camera output is appended in
30
26
'resolution' : list
@@ -38,32 +34,32 @@ def __init__(
38
34
self ,
39
35
robot_config ,
40
36
dt = 0.001 ,
41
- display_frequency = 1 ,
42
- render_params = None
37
+ visualize = True ,
38
+ offscreen_render_params = None
43
39
):
44
40
super ().__init__ (robot_config )
45
41
46
42
self .robot_config = robot_config
47
43
self .dt = dt # time step
48
- self .display_frequency = display_frequency
49
- self .render_params = render_params
44
+ self .visualize = visualize
45
+ self .offscreen_render_params = offscreen_render_params
50
46
self .count = 0 # keep track of how many times send forces is called
51
47
self .timestep = 0
52
48
53
49
self .camera_feedback = np .array ([])
54
- if self .render_params :
50
+ if self .offscreen_render_params :
55
51
# if not empty, create array for storing rendered camera feedback
56
52
self .camera_feedback = np .zeros (
57
53
(
58
- self .render_params ["resolution" ][0 ],
59
- self .render_params ["resolution" ][1 ]
60
- * len (self .render_params ["cameras" ]),
54
+ self .offscreen_render_params ["resolution" ][0 ],
55
+ self .offscreen_render_params ["resolution" ][1 ]
56
+ * len (self .offscreen_render_params ["cameras" ]),
61
57
3 ,
62
58
)
63
59
)
64
60
self .subpixels = np .product (self .camera_feedback .shape )
65
- if "frequency" not in self .render_params .keys ():
66
- self .render_params ["frequency" ] = 1
61
+ if "frequency" not in self .offscreen_render_params .keys ():
62
+ self .offscreen_render_params ["frequency" ] = 1
67
63
68
64
69
65
@@ -126,7 +122,7 @@ def connect(self, joint_names=None, camera_id=-1):
126
122
)
127
123
128
124
# create the visualizer
129
- if self .display_frequency > 0 :
125
+ if self .visualize :
130
126
self .viewer = mujoco_viewer .MujocoViewer (self .model , self .data )
131
127
# set the default display to skip frames to speed things up
132
128
self .viewer ._render_every_frame = False
@@ -135,12 +131,12 @@ def connect(self, joint_names=None, camera_id=-1):
135
131
self .viewer .cam .fixedcamid = camera_id
136
132
self .viewer .cam .type = mujoco .mjtCamera .mjCAMERA_FIXED
137
133
138
- if self .render_params is not None :
134
+ if self .offscreen_render_params is not None :
139
135
self .offscreen = mujoco_viewer .MujocoViewer (
140
136
self .model ,
141
137
self .data ,
142
- height = self .render_params ["resolution" ][1 ],
143
- width = self .render_params ["resolution" ][0 ],
138
+ height = self .offscreen_render_params ["resolution" ][1 ],
139
+ width = self .offscreen_render_params ["resolution" ][0 ],
144
140
mode = "offscreen" ,
145
141
)
146
142
# set the default display to skip frames to speed things up
@@ -151,7 +147,7 @@ def connect(self, joint_names=None, camera_id=-1):
151
147
152
148
def disconnect (self ):
153
149
"""Stop and reset the simulation"""
154
- if self .display_frequency > 0 :
150
+ if self .visualize :
155
151
self .viewer .close ()
156
152
157
153
print ("MuJoCO session closed..." )
@@ -187,8 +183,6 @@ def send_forces(self, u, update_display=True, use_joint_dyn_addrs=True):
187
183
----------
188
184
u: np.array
189
185
the torques to apply to the robot [Nm]
190
- update_display: boolean, Optional (Default:True)
191
- toggle for updating display
192
186
use_joint_dyn_addrs: boolean
193
187
set false to update the control signal for all actuators
194
188
"""
@@ -204,9 +198,7 @@ def send_forces(self, u, update_display=True, use_joint_dyn_addrs=True):
204
198
self .count += self .dt
205
199
self .timestep = int (self .count / self .dt )
206
200
207
- freq_display = not self .timestep % self .display_frequency
208
-
209
- if freq_display and update_display :
201
+ if self .visualize and update_display :
210
202
self .viewer .render ()
211
203
212
204
def set_external_force (self , name , u_ext ):
@@ -257,10 +249,10 @@ def get_feedback(self):
257
249
self .q = np .copy (self .data .qpos [self .joint_pos_addrs ])
258
250
self .dq = np .copy (self .data .qvel [self .joint_vel_addrs ])
259
251
260
- if self .render_params :
261
- res = self .render_params ['resolution' ]
262
- if self .timestep % self .render_params ["frequency" ] == 0 :
263
- for ii , jj in enumerate (self .render_params ["cameras" ]):
252
+ if self .offscreen_render_params :
253
+ res = self .offscreen_render_params ['resolution' ]
254
+ if self .timestep % self .offscreen_render_params ["frequency" ] == 0 :
255
+ for ii , jj in enumerate (self .offscreen_render_params ["cameras" ]):
264
256
glfw .make_context_current (self .offscreen .window )
265
257
self .camera_feedback [
266
258
:, ii * res [1 ] : (ii + 1 ) * res [1 ]
0 commit comments