|
1 | 1 | import logging |
2 | 2 | import threading |
| 3 | +import typing |
3 | 4 | from enum import IntFlag, auto |
4 | 5 | from socket import AF_INET, SOCK_DGRAM, socket |
5 | 6 | from struct import pack, unpack |
6 | 7 |
|
7 | | -import gymnasium as gym |
8 | 8 | import numpy as np |
9 | | -import rcsss |
10 | 9 | from rcsss._core.common import RPY, Pose |
11 | | -from rcsss._core.sim import CameraType |
12 | | -from rcsss.camera.sim import SimCameraConfig, SimCameraSet, SimCameraSetConfig |
13 | | -from rcsss.config import read_config_yaml |
14 | | -from rcsss.control.fr3_desk import FCI, Desk |
15 | 10 | from rcsss.envs.base import ( |
16 | | - CameraSetWrapper, |
17 | 11 | ControlMode, |
18 | | - FR3Env, |
19 | 12 | GripperDictType, |
20 | | - GripperWrapper, |
21 | 13 | LimitedTQuartRelDictType, |
22 | 14 | RelativeActionSpace, |
23 | | - RelativeTo, |
| 15 | + RobotInstance, |
| 16 | +) |
| 17 | +from rcsss.envs.factories import ( |
| 18 | + default_fr3_hw_gripper_cfg, |
| 19 | + default_fr3_hw_robot_cfg, |
| 20 | + default_fr3_sim_gripper_cfg, |
| 21 | + default_fr3_sim_robot_cfg, |
| 22 | + default_mujoco_cameraset_cfg, |
| 23 | + fr3_hw_env, |
| 24 | + fr3_sim_env, |
24 | 25 | ) |
25 | | -from rcsss.envs.hw import FR3HW |
26 | | -from rcsss.envs.sim import CollisionGuard, FR3Sim |
27 | | -from rcsss.sim import FR3, FR3Config, Sim |
28 | 26 |
|
29 | 27 | # import matplotlib.pyplot as plt |
30 | 28 |
|
|
34 | 32 | EGO_LOCK = False |
35 | 33 | VIVE_HOST = "192.168.100.1" |
36 | 34 | VIVE_PORT = 54321 |
37 | | -USE_REAL_ROBOT = True |
38 | 35 | INCLUDE_ROTATION = True |
39 | 36 | ROBOT_IP = "192.168.101.1" |
| 37 | +ROBOT_INSTANCE = RobotInstance.HARDWARE |
40 | 38 |
|
41 | 39 |
|
42 | 40 | class Button(IntFlag): |
43 | 41 | L_TRIGGER = auto() |
44 | 42 | L_SQUEEZE = auto() |
| 43 | + LT_CLICK = auto() |
45 | 44 | R_TRIGGER = auto() |
46 | 45 | R_SQUEEZE = auto() |
| 46 | + RT_CLICK = auto() |
47 | 47 |
|
48 | 48 |
|
49 | 49 | class UDPViveActionServer(threading.Thread): |
@@ -200,91 +200,38 @@ def environment_step_loop(self): |
200 | 200 | self._env.step(action) |
201 | 201 |
|
202 | 202 |
|
203 | | -def hw(): |
204 | | - |
205 | | - cfg = read_config_yaml("config.yaml") |
206 | | - d = Desk(ROBOT_IP, cfg.hw.username, cfg.hw.password) |
207 | | - with FCI(d, unlock=False, lock_when_done=False): |
208 | | - |
209 | | - robot = rcsss.hw.FR3(ROBOT_IP, str(rcsss.scenes["lab"].parent / "fr3.urdf")) |
210 | | - rcfg = rcsss.hw.FR3Config() |
211 | | - rcfg.tcp_offset = rcsss.common.Pose(rcsss.common.FrankaHandTCPOffset()) |
212 | | - rcfg.speed_factor = 0.2 |
213 | | - rcfg.controller = rcsss.hw.IKController.robotics_library |
214 | | - robot.set_parameters(rcfg) |
215 | | - |
216 | | - # env = FR3Env(robot, ControlMode.CARTESIAN_TQuart) |
217 | | - env = FR3Env(robot, ControlMode.JOINTS) |
218 | | - env_hw: gym.Env = FR3HW(env) |
219 | | - gripper_cfg = rcsss.hw.FHConfig() |
220 | | - gripper_cfg.epsilon_inner = gripper_cfg.epsilon_outer = 0.5 |
221 | | - gripper_cfg.speed = 0.1 |
222 | | - gripper_cfg.force = 30 |
223 | | - gripper = rcsss.hw.FrankaHand(ROBOT_IP, gripper_cfg) |
224 | | - # gripper.homing() |
225 | | - env_hw = GripperWrapper(env_hw, gripper, binary=True) |
226 | | - |
227 | | - # TODO: camera |
228 | | - env_hw = CollisionGuard.env_from_xml_paths( |
229 | | - env_hw, |
230 | | - str(rcsss.scenes["fr3_empty_world"]), |
231 | | - str(rcsss.scenes["lab"].parent / "fr3.urdf"), |
232 | | - gripper=True, |
233 | | - check_home_collision=False, |
234 | | - camera=True, |
| 203 | +def main(): |
| 204 | + # if ROBOT_INSTANCE == RobotInstance.HARDWARE: |
| 205 | + # user, pw = load_creds_fr3_desk() |
| 206 | + # resource_manger = FCI(Desk(ROBOT_IP, user, pw), unlock=False, lock_when_done=False) |
| 207 | + # else: |
| 208 | + # resource_manger = DummyResourceManager() |
| 209 | + |
| 210 | + # with resource_manger: |
| 211 | + |
| 212 | + if ROBOT_INSTANCE == RobotInstance.HARDWARE: |
| 213 | + env_rel = fr3_hw_env( |
| 214 | + ip=ROBOT_IP, |
| 215 | + control_mode=ControlMode.CARTESIAN_TQuart, |
| 216 | + robot_cfg=default_fr3_hw_robot_cfg(), |
| 217 | + collision_guard=False, |
| 218 | + gripper_cfg=default_fr3_hw_gripper_cfg(), |
| 219 | + max_relative_movement=0.5, |
| 220 | + ) |
| 221 | + else: |
| 222 | + env_rel = fr3_sim_env( |
235 | 223 | control_mode=ControlMode.CARTESIAN_TQuart, |
236 | | - tcp_offset=rcsss.common.Pose(rcsss.common.FrankaHandTCPOffset()), |
| 224 | + # control_mode=ControlMode.JOINTS, |
| 225 | + robot_cfg=default_fr3_sim_robot_cfg(), |
| 226 | + gripper_cfg=default_fr3_sim_gripper_cfg(), |
| 227 | + camera_set_cfg=default_mujoco_cameraset_cfg(), |
| 228 | + max_relative_movement=0.5, |
237 | 229 | ) |
238 | 230 |
|
239 | | - env_rel = RelativeActionSpace(env_hw, relative_to=RelativeTo.CONFIGURED_ORIGIN) |
240 | | - env_rel.reset() |
241 | | - with UDPViveActionServer(VIVE_HOST, VIVE_PORT, env_rel) as action_server: |
242 | | - action_server.environment_step_loop() |
243 | | - |
244 | | - |
245 | | -def sim(): |
246 | | - simulation = Sim(rcsss.scenes["fr3_empty_world"]) |
247 | | - robot = FR3(simulation, "0", str(rcsss.scenes["lab"].parent / "fr3.urdf")) |
248 | | - fr3_config = FR3Config() |
249 | | - fr3_config.realtime = False |
250 | | - # TODO: We might need a TCP offset with only translation here |
251 | | - env_sim = FR3Sim(FR3Env(robot, ControlMode.JOINTS), simulation) |
252 | | - |
253 | | - cameras = { |
254 | | - "wrist": SimCameraConfig(identifier="eye-in-hand_0", type=int(CameraType.fixed)), |
255 | | - "default_free": SimCameraConfig(identifier="", type=int(CameraType.default_free)), |
256 | | - } |
257 | | - cam_cfg = SimCameraSetConfig(cameras=cameras, resolution_width=640, resolution_height=480, frame_rate=10) |
258 | | - camera_set = SimCameraSet(simulation, cam_cfg) |
259 | | - env_cam: gym.Env = CameraSetWrapper(env_sim, camera_set) |
260 | | - |
261 | | - gripper_cfg = rcsss.sim.FHConfig() |
262 | | - gripper = rcsss.sim.FrankaHand(simulation, "0", gripper_cfg) |
263 | | - env_cam = GripperWrapper(env_cam, gripper) |
264 | | - |
265 | | - env_cam = CollisionGuard.env_from_xml_paths( |
266 | | - env_cam, |
267 | | - str(rcsss.scenes["fr3_empty_world"]), |
268 | | - str(rcsss.scenes["lab"].parent / "fr3.urdf"), |
269 | | - gripper=True, |
270 | | - camera=False, |
271 | | - check_home_collision=False, |
272 | | - control_mode=ControlMode.CARTESIAN_TQuart, |
273 | | - ) |
274 | | - env_rel = RelativeActionSpace(env_cam, relative_to=RelativeTo.CONFIGURED_ORIGIN) |
275 | 231 | env_rel.reset() |
276 | | - with UDPViveActionServer(VIVE_HOST, VIVE_PORT, env_rel) as action_server: |
277 | | - action_server.environment_step_loop() |
278 | | - |
279 | 232 |
|
280 | | -def main(): |
281 | | - if "lab" not in rcsss.scenes: |
282 | | - logger.error("This pip package was not built with the UTN lab models, aborting.") |
283 | | - return |
284 | | - if USE_REAL_ROBOT: |
285 | | - hw() |
286 | | - else: |
287 | | - sim() |
| 233 | + with UDPViveActionServer(VIVE_HOST, VIVE_PORT, typing.cast(RelativeActionSpace, env_rel)) as action_server: |
| 234 | + action_server.environment_step_loop() |
288 | 235 |
|
289 | 236 |
|
290 | 237 | if __name__ == "__main__": |
|
0 commit comments