Skip to content

Commit f530fdc

Browse files
committed
cleanup examples
1 parent 0a14941 commit f530fdc

File tree

6 files changed

+97
-164
lines changed

6 files changed

+97
-164
lines changed

examples/IPC_Solver/ipc_arm_cloth.py

Lines changed: 23 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -183,71 +183,36 @@ def reset_scene():
183183
# entities["cube"].set_pos((random.uniform(0.2, 0.4), random.uniform(-0.2, 0.2), 0.05))
184184
# entities["cube"].set_quat(R.from_euler("z", random.uniform(0, np.pi * 2)).as_quat(scalar_first=True))
185185

186-
# Define movement callbacks
187-
def move_forward():
188-
target_pos[0][0] -= dpos
189-
190-
def move_backward():
191-
target_pos[0][0] += dpos
192-
193-
def move_left():
194-
target_pos[0][1] -= dpos
195-
196-
def move_right():
197-
target_pos[0][1] += dpos
198-
199-
def move_up():
200-
target_pos[0][2] += dpos
201-
202-
def move_down():
203-
target_pos[0][2] -= dpos
204-
205-
def yaw_left():
206-
target_R[0] = R.from_euler("z", drot) * target_R[0]
207-
208-
def yaw_right():
209-
target_R[0] = R.from_euler("z", -drot) * target_R[0]
210-
211-
def pitch_up():
212-
target_R[0] = R.from_euler("y", drot) * target_R[0]
213-
214-
def pitch_down():
215-
target_R[0] = R.from_euler("y", -drot) * target_R[0]
216-
217-
def roll_left():
218-
target_R[0] = R.from_euler("x", drot) * target_R[0]
186+
# Register keybindings (only for interactive and record modes)
187+
if mode in ["interactive", "record"]:
219188

220-
def roll_right():
221-
target_R[0] = R.from_euler("x", -drot) * target_R[0]
189+
def move(dpos_delta: tuple[float, float, float]):
190+
target_pos[0] += np.array(dpos_delta, dtype=gs.np_float)
222191

223-
def close_gripper():
224-
gripper_closed[0] = True
192+
def rotate(axis: str, angle: float):
193+
target_R[0] = R.from_euler(axis, angle) * target_R[0]
225194

226-
def open_gripper():
227-
gripper_closed[0] = False
195+
def toggle_gripper(close: bool = True):
196+
gripper_closed[0] = close
228197

229-
# Register keybindings (only for interactive and record modes)
230-
if mode in ["interactive", "record"]:
231198
from pyglet.window import key
232199

233200
scene.viewer.register_keybinds(
234-
(
235-
Keybind(key_code=key.UP, key_action=KeyAction.HOLD, name="move_forward", callback=move_forward),
236-
Keybind(key_code=key.DOWN, key_action=KeyAction.HOLD, name="move_backward", callback=move_backward),
237-
Keybind(key_code=key.LEFT, key_action=KeyAction.HOLD, name="move_left", callback=move_left),
238-
Keybind(key_code=key.RIGHT, key_action=KeyAction.HOLD, name="move_right", callback=move_right),
239-
Keybind(key_code=key.N, key_action=KeyAction.HOLD, name="move_up", callback=move_up),
240-
Keybind(key_code=key.M, key_action=KeyAction.HOLD, name="move_down", callback=move_down),
241-
Keybind(key_code=key.J, key_action=KeyAction.HOLD, name="yaw_left", callback=yaw_left),
242-
Keybind(key_code=key.K, key_action=KeyAction.HOLD, name="yaw_right", callback=yaw_right),
243-
Keybind(key_code=key.I, key_action=KeyAction.HOLD, name="pitch_up", callback=pitch_up),
244-
Keybind(key_code=key.O, key_action=KeyAction.HOLD, name="pitch_down", callback=pitch_down),
245-
Keybind(key_code=key.L, key_action=KeyAction.HOLD, name="roll_left", callback=roll_left),
246-
Keybind(key_code=key.SEMICOLON, key_action=KeyAction.HOLD, name="roll_right", callback=roll_right),
247-
Keybind(key_code=key.U, key_action=KeyAction.HOLD, name="reset_scene", callback=reset_scene),
248-
Keybind(key_code=key.SPACE, key_action=KeyAction.PRESS, name="close_gripper", callback=close_gripper),
249-
Keybind(key_code=key.SPACE, key_action=KeyAction.RELEASE, name="open_gripper", callback=open_gripper),
250-
)
201+
Keybind(key.UP, KeyAction.HOLD, name="move_forward", callback=move, args=((-dpos, 0, 0),)),
202+
Keybind(key.DOWN, KeyAction.HOLD, name="move_backward", callback=move, args=((dpos, 0, 0),)),
203+
Keybind(key.LEFT, KeyAction.HOLD, name="move_left", callback=move, args=((0, -dpos, 0),)),
204+
Keybind(key.RIGHT, KeyAction.HOLD, name="move_right", callback=move, args=((0, dpos, 0),)),
205+
Keybind(key.N, KeyAction.HOLD, name="move_up", callback=move, args=((0, 0, dpos),)),
206+
Keybind(key.M, KeyAction.HOLD, name="move_down", callback=move, args=((0, 0, -dpos),)),
207+
Keybind(key.J, KeyAction.HOLD, name="yaw_left", callback=rotate, args=("z", drot)),
208+
Keybind(key.K, KeyAction.HOLD, name="yaw_right", callback=rotate, args=("z", -drot)),
209+
Keybind(key.I, KeyAction.HOLD, name="pitch_up", callback=rotate, args=("y", drot)),
210+
Keybind(key.O, KeyAction.HOLD, name="pitch_down", callback=rotate, args=("y", -drot)),
211+
Keybind(key.L, KeyAction.HOLD, name="roll_left", callback=rotate, args=("x", drot)),
212+
Keybind(key.SEMICOLON, KeyAction.HOLD, name="roll_right", callback=rotate, args=("x", -drot)),
213+
Keybind(key.U, KeyAction.HOLD, name="reset_scene", callback=reset_scene),
214+
Keybind(key.SPACE, KeyAction.PRESS, name="close_gripper", callback=toggle_gripper, args=(True,)),
215+
Keybind(key.SPACE, KeyAction.RELEASE, name="open_gripper", callback=toggle_gripper, args=(False,)),
251216
)
252217

253218
# Load trajectory if in playback mode

examples/drone/interactive_drone.py

Lines changed: 40 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -11,45 +11,19 @@ def __init__(self):
1111
self.thrust = 14475.8 # Base hover RPM - constant hover
1212
self.rotation_delta = 200.0 # Differential RPM for rotation
1313
self.thrust_delta = 10.0 # Amount to change thrust by when accelerating/decelerating
14-
self.rpms = [self.thrust] * 4
15-
16-
def update_thrust(self):
17-
# Reset RPMs to hover thrust
18-
self.rpms = [self.thrust] * 4
19-
return self.rpms
20-
21-
def move_forward(self):
22-
"""Front rotors spin faster"""
23-
self.rpms[0] += self.rotation_delta # Front left
24-
self.rpms[1] += self.rotation_delta # Front right
25-
self.rpms[2] -= self.rotation_delta # Back left
26-
self.rpms[3] -= self.rotation_delta # Back right
27-
self.rpms = np.clip(self.rpms, 0, 25000)
28-
29-
def move_backward(self):
30-
"""Back rotors spin faster"""
31-
self.rpms[0] -= self.rotation_delta # Front left
32-
self.rpms[1] -= self.rotation_delta # Front right
33-
self.rpms[2] += self.rotation_delta # Back left
34-
self.rpms[3] += self.rotation_delta # Back right
35-
self.rpms = np.clip(self.rpms, 0, 25000)
14+
self.rpms = np.array([self.thrust] * 4) # front left, front right, back left, back right
15+
self.cur_dir = np.array([0.0, 0.0, 0.0, 0.0]) # rotor directions
3616

37-
def move_left(self):
38-
"""Left rotors spin faster"""
39-
self.rpms[0] -= self.rotation_delta # Front left
40-
self.rpms[2] -= self.rotation_delta # Back left
41-
self.rpms[1] += self.rotation_delta # Front right
42-
self.rpms[3] += self.rotation_delta # Back right
17+
def update_rpms(self):
18+
"""Update RPMs based on current direction and thrust"""
19+
clipped_dir = np.clip(self.cur_dir, -1.0, 1.0)
20+
self.rpms = self.thrust + clipped_dir * self.rotation_delta
4321
self.rpms = np.clip(self.rpms, 0, 25000)
22+
return self.rpms
4423

45-
def move_right(self):
46-
"""Right rotors spin faster"""
47-
print("move right")
48-
self.rpms[0] += self.rotation_delta # Front left
49-
self.rpms[2] += self.rotation_delta # Back left
50-
self.rpms[1] -= self.rotation_delta # Front right
51-
self.rpms[3] -= self.rotation_delta # Back right
52-
self.rpms = np.clip(self.rpms, 0, 25000)
24+
def add_direction(self, direction: np.ndarray):
25+
"""Add direction vector (on key press)"""
26+
self.cur_dir += direction
5327

5428
def accelerate(self):
5529
"""All rotors spin faster"""
@@ -84,6 +58,7 @@ def main():
8458
show_world_frame=False,
8559
),
8660
show_viewer=True,
61+
show_FPS=False,
8762
)
8863

8964
# Add entities
@@ -106,20 +81,33 @@ def main():
10681
# Register keybindings
10782
from pyglet.window import key
10883

109-
scene.viewer.register_keybinds(
110-
(
111-
Keybind(key_code=key.UP, key_action=KeyAction.HOLD, name="move_forward", callback=controller.move_forward),
84+
def direction_keybinds(key_code, name: str, direction: tuple[float, float, float, float]):
85+
"""Helper to create press/release keybinds for a direction"""
86+
dir_arr = np.array(direction)
87+
return [
11288
Keybind(
113-
key_code=key.DOWN,
114-
key_action=KeyAction.HOLD,
115-
name="move_backward",
116-
callback=controller.move_backward,
89+
key_code=key_code,
90+
key_action=KeyAction.PRESS,
91+
name=f"{name}_press",
92+
callback=controller.add_direction,
93+
args=(dir_arr,),
11794
),
118-
Keybind(key_code=key.LEFT, key_action=KeyAction.HOLD, name="move_left", callback=controller.move_left),
119-
Keybind(key_code=key.RIGHT, key_action=KeyAction.HOLD, name="move_right", callback=controller.move_right),
120-
Keybind(key_code=key.SPACE, key_action=KeyAction.HOLD, name="accelerate", callback=controller.accelerate),
121-
Keybind(key_code=key.LSHIFT, key_action=KeyAction.HOLD, name="decelerate", callback=controller.decelerate),
122-
)
95+
Keybind(
96+
key_code=key_code,
97+
key_action=KeyAction.RELEASE,
98+
name=f"{name}_release",
99+
callback=controller.add_direction,
100+
args=(-dir_arr,),
101+
),
102+
]
103+
104+
scene.viewer.register_keybinds(
105+
*direction_keybinds(key.UP, "move_forward", (1.0, 1.0, -1.0, -1.0)),
106+
*direction_keybinds(key.DOWN, "move_backward", (-1.0, -1.0, 1.0, 1.0)),
107+
*direction_keybinds(key.LEFT, "move_left", (-1.0, 1.0, -1.0, 1.0)),
108+
*direction_keybinds(key.RIGHT, "move_right", (1.0, -1.0, 1.0, -1.0)),
109+
Keybind(key.SPACE, KeyAction.HOLD, name="accelerate", callback=controller.accelerate),
110+
Keybind(key.LSHIFT, KeyAction.HOLD, name="decelerate", callback=controller.decelerate),
123111
)
124112

125113
# Print control instructions
@@ -136,11 +124,12 @@ def main():
136124
# Run simulation
137125
try:
138126
while True:
139-
# Update drone with current RPMs
140-
rpms = controller.update_thrust()
127+
# Update and apply RPMs based on current direction
128+
rpms = controller.update_rpms()
129+
print("Current RPMs:", rpms)
141130
drone.set_propellels_rpm(rpms)
142131

143-
# Update physics
132+
# Step simulation
144133
scene.step()
145134

146135
if "PYTEST_VERSION" in os.environ:

examples/keyboard_teleop.py

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -120,51 +120,32 @@ def reset_robot():
120120
reset_robot()
121121

122122
# Robot teleoperation callback functions
123-
def move_forward():
124-
target_pos[0] -= dpos
123+
def move(dpos: tuple[float, float, float]):
124+
global target_pos
125+
target_pos += np.array(dpos, dtype=gs.np_float)
125126

126-
def move_backward():
127-
target_pos[0] += dpos
128-
129-
def move_left():
130-
target_pos[1] -= dpos
131-
132-
def move_right():
133-
target_pos[1] += dpos
134-
135-
def move_up():
136-
target_pos[2] += dpos
137-
138-
def move_down():
139-
target_pos[2] -= dpos
140-
141-
def rotate_ccw():
127+
def rotate(drot: float):
142128
target_R[0] = R.from_euler("z", drot) * target_R[0]
143129

144-
def rotate_cw():
145-
target_R[0] = R.from_euler("z", -drot) * target_R[0]
146-
147-
def close_gripper():
148-
robot.control_dofs_force(np.array([-1.0, -1.0]), fingers_dof)
149-
150-
def open_gripper():
151-
robot.control_dofs_force(np.array([1.0, 1.0]), fingers_dof)
130+
def toggle_gripper(close: bool = True):
131+
pos = -1.0 if close else 1.0
132+
robot.control_dofs_force(np.array([pos, pos]), fingers_dof)
152133

153134
# Register robot teleoperation keybindings
154135
from pyglet.window import key
155136

156137
scene.viewer.register_keybinds(
157-
Keybind(key_code=key.UP, key_action=KeyAction.HOLD, name="move_forward", callback=move_forward),
158-
Keybind(key_code=key.DOWN, key_action=KeyAction.HOLD, name="move_backward", callback=move_backward),
159-
Keybind(key_code=key.LEFT, key_action=KeyAction.HOLD, name="move_left", callback=move_left),
160-
Keybind(key_code=key.RIGHT, key_action=KeyAction.HOLD, name="move_right", callback=move_right),
161-
Keybind(key_code=key.N, key_action=KeyAction.HOLD, name="move_up", callback=move_up),
162-
Keybind(key_code=key.M, key_action=KeyAction.HOLD, name="move_down", callback=move_down),
163-
Keybind(key_code=key.J, key_action=KeyAction.HOLD, name="rotate_ccw", callback=rotate_ccw),
164-
Keybind(key_code=key.K, key_action=KeyAction.HOLD, name="rotate_cw", callback=rotate_cw),
165-
Keybind(key_code=key.U, key_action=KeyAction.HOLD, name="reset_scene", callback=reset_robot),
166-
Keybind(key_code=key.SPACE, key_action=KeyAction.PRESS, name="close_gripper", callback=close_gripper),
167-
Keybind(key_code=key.SPACE, key_action=KeyAction.RELEASE, name="open_gripper", callback=open_gripper),
138+
Keybind(key.UP, KeyAction.HOLD, name="move_forward", callback=move, args=((-dpos, 0, 0),)),
139+
Keybind(key.DOWN, KeyAction.HOLD, name="move_back", callback=move, args=((dpos, 0, 0),)),
140+
Keybind(key.LEFT, KeyAction.HOLD, name="move_left", callback=move, args=((0, -dpos, 0),)),
141+
Keybind(key.RIGHT, KeyAction.HOLD, name="move_right", callback=move, args=((0, dpos, 0),)),
142+
Keybind(key.N, KeyAction.HOLD, name="move_up", callback=move, args=((0, 0, dpos),)),
143+
Keybind(key.M, KeyAction.HOLD, name="move_down", callback=move, args=((0, 0, -dpos),)),
144+
Keybind(key.J, KeyAction.HOLD, name="rotate_ccw", callback=rotate, args=(drot,)),
145+
Keybind(key.K, KeyAction.HOLD, name="rotate_cw", callback=rotate, args=(-drot,)),
146+
Keybind(key.U, KeyAction.HOLD, name="reset_scene", callback=reset_robot),
147+
Keybind(key.SPACE, KeyAction.PRESS, name="close_gripper", callback=toggle_gripper, args=(True,)),
148+
Keybind(key.SPACE, KeyAction.RELEASE, name="open_gripper", callback=toggle_gripper, args=(False,)),
168149
)
169150

170151
########################## run simulation ##########################

examples/sensors/lidar_teleop.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -181,21 +181,19 @@ def yaw_cw():
181181
from pyglet.window import key
182182

183183
scene.viewer.register_keybinds(
184-
(
185-
Keybind(key_code=key.UP, key_action=KeyAction.HOLD, name="move_forward", callback=move_forward),
186-
Keybind(key_code=key.DOWN, key_action=KeyAction.HOLD, name="move_backward", callback=move_backward),
187-
Keybind(key_code=key.RIGHT, key_action=KeyAction.HOLD, name="move_right", callback=move_right),
188-
Keybind(key_code=key.LEFT, key_action=KeyAction.HOLD, name="move_left", callback=move_left),
189-
Keybind(key_code=key.J, key_action=KeyAction.HOLD, name="move_down", callback=move_down),
190-
Keybind(key_code=key.K, key_action=KeyAction.HOLD, name="move_up", callback=move_up),
191-
Keybind(key_code=key.N, key_action=KeyAction.HOLD, name="roll_ccw", callback=roll_ccw),
192-
Keybind(key_code=key.M, key_action=KeyAction.HOLD, name="roll_cw", callback=roll_cw),
193-
Keybind(key_code=key.COMMA, key_action=KeyAction.HOLD, name="pitch_up", callback=pitch_up),
194-
Keybind(key_code=key.PERIOD, key_action=KeyAction.HOLD, name="pitch_down", callback=pitch_down),
195-
Keybind(key_code=key.O, key_action=KeyAction.HOLD, name="yaw_ccw", callback=yaw_ccw),
196-
Keybind(key_code=key.P, key_action=KeyAction.HOLD, name="yaw_cw", callback=yaw_cw),
197-
Keybind(key_code=key.BACKSLASH, key_action=KeyAction.HOLD, name="reset", callback=reset_pose),
198-
)
184+
Keybind(key_code=key.UP, key_action=KeyAction.HOLD, name="move_forward", callback=move_forward),
185+
Keybind(key_code=key.DOWN, key_action=KeyAction.HOLD, name="move_backward", callback=move_backward),
186+
Keybind(key_code=key.RIGHT, key_action=KeyAction.HOLD, name="move_right", callback=move_right),
187+
Keybind(key_code=key.LEFT, key_action=KeyAction.HOLD, name="move_left", callback=move_left),
188+
Keybind(key_code=key.J, key_action=KeyAction.HOLD, name="move_down", callback=move_down),
189+
Keybind(key_code=key.K, key_action=KeyAction.HOLD, name="move_up", callback=move_up),
190+
Keybind(key_code=key.N, key_action=KeyAction.HOLD, name="roll_ccw", callback=roll_ccw),
191+
Keybind(key_code=key.M, key_action=KeyAction.HOLD, name="roll_cw", callback=roll_cw),
192+
Keybind(key_code=key.COMMA, key_action=KeyAction.HOLD, name="pitch_up", callback=pitch_up),
193+
Keybind(key_code=key.PERIOD, key_action=KeyAction.HOLD, name="pitch_down", callback=pitch_down),
194+
Keybind(key_code=key.O, key_action=KeyAction.HOLD, name="yaw_ccw", callback=yaw_ccw),
195+
Keybind(key_code=key.P, key_action=KeyAction.HOLD, name="yaw_cw", callback=yaw_cw),
196+
Keybind(key_code=key.BACKSLASH, key_action=KeyAction.HOLD, name="reset", callback=reset_pose),
199197
)
200198

201199
# Print controls

genesis/ext/pyrender/interaction/keybindings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def get_keycode_string(key_code: int) -> str:
5151

5252
class Keybind(NamedTuple):
5353
key_code: int
54-
name: str = ""
5554
key_action: KeyAction = KeyAction.PRESS
55+
name: str = ""
5656
callback: Callable[[], None] | None = None
5757
modifiers: int | None = None
5858
args: tuple = ()

genesis/ext/pyrender/interaction/plugins/help_text.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from genesis.options.viewer_plugins import HelpTextPlugin as HelpTextPluginOptions
88

99
from ...constants import TEXT_PADDING, TextAlign
10-
from ..keybindings import Keybind, get_keycode_string
10+
from ..keybindings import KeyAction, Keybind, get_keycode_string
1111
from ..viewer_plugin import ViewerPlugin, register_viewer_plugin
1212

1313
if TYPE_CHECKING:
@@ -50,7 +50,7 @@ def _update_instr_texts(self):
5050
kb_texts = [
5151
f"{'[' + get_keycode_string(kb.key_code):>{7}}]: " + kb.name.replace("_", " ")
5252
for kb in self.viewer._keybindings.keybinds
53-
if kb.name != INSTR_KEYBIND_NAME
53+
if kb.name != INSTR_KEYBIND_NAME and kb.key_action != KeyAction.RELEASE
5454
]
5555
self._instr_texts = (
5656
[f"> [{self.instr_key_str}]: show keyboard instructions"],

0 commit comments

Comments
 (0)