Skip to content

Commit e6adc8f

Browse files
committed
fix(teleop): remove double sleep for framerate in sim case
1 parent a396ca6 commit e6adc8f

3 files changed

Lines changed: 16 additions & 7 deletions

File tree

examples/teleop/franka.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@
5050
DIGIT_DICT = None
5151

5252

53-
DATASET_PATH = "test_iris"
54-
INSTRUCTION = "pick up cube"
53+
RECORD_FPS = 30
5554

5655
robot2world = {
5756
"right": rcs.common.Pose(
@@ -123,12 +122,15 @@ def get_env():
123122

124123
scene = EmptyWorldFR3Duo()
125124
sim_cfg_data = scene.config()
126-
sim_cfg_data.sim_cfg = SimConfig(async_control=True, realtime=True, frequency=30, max_convergence_steps=500)
125+
sim_cfg_data.sim_cfg = SimConfig(
126+
async_control=True, realtime=True, frequency=RECORD_FPS, max_convergence_steps=500
127+
)
127128
sim_cfg_data.relative_to = RelativeTo.CONFIGURED_ORIGIN
128129
if sim_cfg_data.root_frame_objects is None:
129130
sim_cfg_data.root_frame_objects = {}
130131
# cfg.root_frame_objects["green_cube"] = (rcs.OBJECT_PATHS["green_cube"], Pose(translation=[0.5, 0, 0.5], quaternion=[0, 0, 0, 1]))
131-
sim_cfg_data.task_cfg = PickTaskConfig(robot_name="left")
132+
# sim_cfg_data.task_cfg = PickTaskConfig(robot_name="left")
133+
sim_cfg_data.task_cfg = ParallelPickTaskConfig()
132134

133135
env_rel = scene.create_env(sim_cfg_data)
134136
env_rel = StorageWrapper(
@@ -144,7 +146,7 @@ def get_env():
144146
def main():
145147
env_rel, operator = get_env()
146148
env_rel.reset()
147-
tele = TeleopLoop(env_rel, operator)
149+
tele = TeleopLoop(env_rel, operator, env_frequency=RECORD_FPS, robot_platform=ROBOT_INSTANCE)
148150
with env_rel, tele: # type: ignore
149151
tele.environment_step_loop()
150152

python/rcs/operator/interface.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from time import sleep
88

99
import gymnasium as gym
10+
from rcs._core.common import RobotPlatform
1011
from rcs.envs.base import ArmWithGripper, ControlMode, RelativeTo
1112
from rcs.sim.sim import Sim
1213
from rcs.utils import SimpleFrameRate
@@ -71,12 +72,14 @@ def __init__(
7172
env: gym.Env,
7273
operator: BaseOperator,
7374
env_frequency: int = 30,
75+
robot_platform: RobotPlatform = RobotPlatform.HARDWARE,
7476
key_translation: dict[str, str] | None = None,
7577
):
7678
super().__init__()
7779
self.env = env
7880
self.operator = operator
7981
self._exit_requested = False
82+
self.robot_platform = robot_platform
8083
self.env_frequency = env_frequency
8184
if key_translation is None:
8285
# controller to robot translation
@@ -114,7 +117,9 @@ def _translate_keys(self, actions):
114117
return translated
115118

116119
def environment_step_loop(self):
117-
rate_limiter = SimpleFrameRate(self.env_frequency, "env loop")
120+
rate_limiter = SimpleFrameRate(
121+
self.env_frequency if self.robot_platform == RobotPlatform.HARDWARE else None, "env loop"
122+
)
118123

119124
# 0. Initial Reset to get current positions for untracked robots
120125
self._last_obs, _ = self.env.reset()

python/rcs/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
class SimpleFrameRate:
9-
def __init__(self, frame_rate: float, loop_name: str = "SimpleFrameRate"):
9+
def __init__(self, frame_rate: float | None, loop_name: str = "SimpleFrameRate"):
1010
"""SimpleFrameRate is a utility class to manage frame rates in a simple way.
1111
It allows you to call it in a loop, and it will sleep the necessary time to maintain the desired frame rate.
1212
@@ -22,6 +22,8 @@ def reset(self):
2222
self.t = None
2323

2424
def __call__(self):
25+
if self.frame_rate is None:
26+
return
2527
if self.t is None:
2628
self.t = perf_counter()
2729
self._last_print = self.t

0 commit comments

Comments
 (0)