Skip to content

Commit cc35737

Browse files
committed
Remove display_frequency, back to visualize
- display_frequency may be a more elegant approach overall, but it's redundant with the generate function parameter 'update_display', which everything in the repo uses and is common between different interfaces. - so, reverting for now. could be changed back to display_frequency in a more complete PR - also the new check for passing invalid joint_names into the interface caught a bug in the rover_vision.py example, it is fixed now
1 parent 9a46713 commit cc35737

File tree

2 files changed

+25
-33
lines changed

2 files changed

+25
-33
lines changed

abr_control/interfaces/mujoco.py

+23-31
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,9 @@ class Mujoco(Interface):
1818
such as: number of joints, number of links, mass information etc.
1919
dt: float, optional (Default: 0.001)
2020
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)
2824
'cameras' : list
2925
camera ids, the order the camera output is appended in
3026
'resolution' : list
@@ -38,32 +34,32 @@ def __init__(
3834
self,
3935
robot_config,
4036
dt=0.001,
41-
display_frequency=1,
42-
render_params=None
37+
visualize=True,
38+
offscreen_render_params=None
4339
):
4440
super().__init__(robot_config)
4541

4642
self.robot_config = robot_config
4743
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
5046
self.count = 0 # keep track of how many times send forces is called
5147
self.timestep = 0
5248

5349
self.camera_feedback = np.array([])
54-
if self.render_params:
50+
if self.offscreen_render_params:
5551
# if not empty, create array for storing rendered camera feedback
5652
self.camera_feedback = np.zeros(
5753
(
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"]),
6157
3,
6258
)
6359
)
6460
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
6763

6864

6965

@@ -126,7 +122,7 @@ def connect(self, joint_names=None, camera_id=-1):
126122
)
127123

128124
# create the visualizer
129-
if self.display_frequency > 0:
125+
if self.visualize:
130126
self.viewer = mujoco_viewer.MujocoViewer(self.model, self.data)
131127
# set the default display to skip frames to speed things up
132128
self.viewer._render_every_frame = False
@@ -135,12 +131,12 @@ def connect(self, joint_names=None, camera_id=-1):
135131
self.viewer.cam.fixedcamid = camera_id
136132
self.viewer.cam.type = mujoco.mjtCamera.mjCAMERA_FIXED
137133

138-
if self.render_params is not None:
134+
if self.offscreen_render_params is not None:
139135
self.offscreen = mujoco_viewer.MujocoViewer(
140136
self.model,
141137
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],
144140
mode="offscreen",
145141
)
146142
# set the default display to skip frames to speed things up
@@ -151,7 +147,7 @@ def connect(self, joint_names=None, camera_id=-1):
151147

152148
def disconnect(self):
153149
"""Stop and reset the simulation"""
154-
if self.display_frequency > 0:
150+
if self.visualize:
155151
self.viewer.close()
156152

157153
print("MuJoCO session closed...")
@@ -187,8 +183,6 @@ def send_forces(self, u, update_display=True, use_joint_dyn_addrs=True):
187183
----------
188184
u: np.array
189185
the torques to apply to the robot [Nm]
190-
update_display: boolean, Optional (Default:True)
191-
toggle for updating display
192186
use_joint_dyn_addrs: boolean
193187
set false to update the control signal for all actuators
194188
"""
@@ -204,9 +198,7 @@ def send_forces(self, u, update_display=True, use_joint_dyn_addrs=True):
204198
self.count += self.dt
205199
self.timestep = int(self.count / self.dt)
206200

207-
freq_display = not self.timestep % self.display_frequency
208-
209-
if freq_display and update_display:
201+
if self.visualize and update_display:
210202
self.viewer.render()
211203

212204
def set_external_force(self, name, u_ext):
@@ -257,10 +249,10 @@ def get_feedback(self):
257249
self.q = np.copy(self.data.qpos[self.joint_pos_addrs])
258250
self.dq = np.copy(self.data.qvel[self.joint_vel_addrs])
259251

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"]):
264256
glfw.make_context_current(self.offscreen.window)
265257
self.camera_feedback[
266258
:, ii * res[1] : (ii + 1) * res[1]

examples/Mujoco/rover_vision.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ class ExitSim(Exception):
4848
interface = Mujoco(
4949
robot_config=rover,
5050
dt=dt,
51-
render_params={
51+
offscreen_render_params={
5252
"cameras": [4, 1, 3, 2], # camera ids and order to render
5353
"resolution": [32, 32],
5454
"frequency": 1, # render images from cameras every time step
5555
},
5656
)
57-
interface.connect(joint_names=["steering_wheel", "rear_differential"])
57+
interface.connect(joint_names=["steering_wheel", "RR_joint"])
5858

5959
# set up the target position
6060
target = np.array([-0.0, 0.0, 0.2])

0 commit comments

Comments
 (0)