112550099NYCU commited on
Commit
1e97dcd
·
verified ·
1 Parent(s): aaceb7c

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -68,3 +68,15 @@ exp_lift_fix/videos/ep_09_failed.mp4 filter=lfs diff=lfs merge=lfs -text
68
  exp_lift_fix/videos/ep_10_failed.mp4 filter=lfs diff=lfs merge=lfs -text
69
  exp_lift_fix/all_failed.mp4 filter=lfs diff=lfs merge=lfs -text
70
  exp_lift_fix/all_success.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  exp_lift_fix/videos/ep_10_failed.mp4 filter=lfs diff=lfs merge=lfs -text
69
  exp_lift_fix/all_failed.mp4 filter=lfs diff=lfs merge=lfs -text
70
  exp_lift_fix/all_success.mp4 filter=lfs diff=lfs merge=lfs -text
71
+ exp_lift_v2/all_failed.mp4 filter=lfs diff=lfs merge=lfs -text
72
+ exp_lift_v2/all_success.mp4 filter=lfs diff=lfs merge=lfs -text
73
+ exp_lift_v2/videos/ep_01_success.mp4 filter=lfs diff=lfs merge=lfs -text
74
+ exp_lift_v2/videos/ep_02_success.mp4 filter=lfs diff=lfs merge=lfs -text
75
+ exp_lift_v2/videos/ep_03_success.mp4 filter=lfs diff=lfs merge=lfs -text
76
+ exp_lift_v2/videos/ep_04_success.mp4 filter=lfs diff=lfs merge=lfs -text
77
+ exp_lift_v2/videos/ep_05_success.mp4 filter=lfs diff=lfs merge=lfs -text
78
+ exp_lift_v2/videos/ep_06_success.mp4 filter=lfs diff=lfs merge=lfs -text
79
+ exp_lift_v2/videos/ep_07_failed.mp4 filter=lfs diff=lfs merge=lfs -text
80
+ exp_lift_v2/videos/ep_08_failed.mp4 filter=lfs diff=lfs merge=lfs -text
81
+ exp_lift_v2/videos/ep_09_failed.mp4 filter=lfs diff=lfs merge=lfs -text
82
+ exp_lift_v2/videos/ep_10_failed.mp4 filter=lfs diff=lfs merge=lfs -text
exp_lift_v2/CHANGES.md ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # exp_lift_v2 — fixes the "extends outward then comes back" bug
2
+
3
+ Builds on `exp_lift_fix` (which already fixed unbounded vertical chase and the
4
+ premature gripper-open). Two new fixes here:
5
+
6
+ ## 1. Phase 3 (lift) — eliminate xy drift
7
+
8
+ **Bug:** After grasp, the held object's xy has a fixed +offset (≈ 2.5 cm in the
9
+ away-from-robot direction) relative to the gripper, because the grasp anchor was
10
+ pulled inward via `_retreat_xy_toward(obj, robot, 0.025)`. The previous lift
11
+ code targeted `obj.xy`, which always sat at `gripper.xy + offset`. Each step the
12
+ IK moved the gripper ~1.8 cm toward that target — but the object (and thus the
13
+ target) moved with the gripper. The chase never converged: the arm drifted
14
+ continuously *away from the robot*, which is usually also *away from the plate*.
15
+ That's the wasted 1-2 seconds of "extends outward, then comes back" before
16
+ phase 4 starts pulling the arm toward the plate.
17
+
18
+ **Fix:** Capture the EE xy at the FIRST step of phase 3 and use that fixed xy
19
+ as the target throughout the phase. The arm now lifts straight up from the grasp
20
+ point. New state field `_lift_start_ee_xy_w`, reset on object boundary and at
21
+ `reset()`.
22
+
23
+ ## 2. `_LIFT_Z_OFFSET` raised back from 0.15 → 0.20
24
+
25
+ The 0.15 m clearance was too tight — the lifted cutlery and the arm itself were
26
+ brushing/clipping the *other* cutlery on the table. Back to the original 0.20 m
27
+ (1.33× the previous value).
28
+
29
+ ## Carried over from `exp_lift_fix`
30
+
31
+ - Phase 3 uses absolute target z = `plate.z + LIFT_Z_OFFSET` (not relative to
32
+ the held object's chasing z).
33
+ - Phase 6 (retreat) keeps gripper CLOSED until EE is within
34
+ `_RELEASE_TOL_M = 0.015` of the release altitude.
35
+
36
+ ## Unchanged (per request)
37
+
38
+ - `_MAX_CARTESIAN_DELTA = 0.018` — no speed changes.
39
+ - `_PHASE_DURATIONS_PER_OBJECT = (180, 130, 20, 160, 170, 15, 30)` — original
40
+ timing; we'll re-tune phase durations once correctness is locked in.
41
+
42
+ ## Compared to earlier experiments
43
+
44
+ | Experiment | Success / Failure | Key change |
45
+ |---|---|---|
46
+ | `exp_all_changes` | 0 / 10 | Aggressive everything |
47
+ | `exp_heights_only` | 4 / 6 | Heights only |
48
+ | `exp_lift_fix` | 5 / 5 | + fixed-z lift + release-z check |
49
+ | `exp_lift_v2` (this) | **?** / **?** | + fixed-xy lift + raised LIFT to 0.20 |
exp_lift_v2/SUMMARY.md ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # FSM Experiment: exp_lift_v2
2
+
3
+ - Date: Mon May 25 06:16:42 PM PST 2026
4
+ - Poses: `data/umi/test_fsm_v3/object_poses_10_shared.json`
5
+ - Successes: **6** / Failures: **4**
6
+
7
+ ```python
8
+ _MAX_CARTESIAN_DELTA = 0.018 # original; per-step IK clamp not changed in this version
9
+ _HOVER_Z_OFFSET = 0.15
10
+ _GRASP_Z_OFFSET = 0.08
11
+ _LIFT_Z_OFFSET = 0.20 # raised back to 0.20 (0.15 was too low — held cutlery and arm clipped neighbouring objects)
12
+ _RELEASE_Z_OFFSET = 0.06 # was 0.09; 0.04 was too low (gripper fingers hit plate/table)
13
+ _RELEASE_TOL_M = 0.015 # phase 6 keeps gripper CLOSED until EE is within this band of release_z
14
+ _PHASE_DURATIONS_PER_OBJECT = (180, 130, 20, 160, 170, 15, 30) # original durations; correctness fix first, re-time later
15
+ _PHASES_PER_OBJECT = len(_PHASE_DURATIONS_PER_OBJECT)
16
+ def _clamp_delta(delta: torch.Tensor, max_norm: float = _MAX_CARTESIAN_DELTA) -> torch.Tensor:
17
+ MAX_STEPS: int = len(_PICK_ORDER) * sum(_PHASE_DURATIONS_PER_OBJECT) + 100
18
+ self._events_dt: list[int] = list(_PHASE_DURATIONS_PER_OBJECT) * len(_PICK_ORDER)
19
+ target[:, 2] += _HOVER_Z_OFFSET
20
+ target[:, 2] += _GRASP_Z_OFFSET
21
+ target[:, 2] += _GRASP_Z_OFFSET
22
+ target[:, 2] = plate_pos_w[:, 2] + _LIFT_Z_OFFSET
23
+ target[:, 2] += _LIFT_Z_OFFSET
24
+ target[:, 2] += _RELEASE_Z_OFFSET
25
+ # Only once the EE is within `_RELEASE_TOL_M` of the release altitude do
26
+ release_z = place_pos_w[:, 2] + _RELEASE_Z_OFFSET
27
+ descent_complete = bool((ee_z <= release_z + _RELEASE_TOL_M).all().item())
28
+ target[:, 2] += _RELEASE_Z_OFFSET
29
+ target[:, 2] += _LIFT_Z_OFFSET
30
+ ```
31
+
32
+ See `CHANGES.md` for the changes in this version vs the previous `exp_lift_fix`.
exp_lift_v2/all_failed.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bc775815e007da8459134c85a94e0ff737bc7d4b69b7b4db07b3fc3b61a36f74
3
+ size 7595151
exp_lift_v2/all_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ef34915dd9ae9ea1eef9f8e51c6f2795a50cc1e0b4c6dab099f19c6bcd51cd6a
3
+ size 12682425
exp_lift_v2/cutlery_arrangement.py ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """State machine for the Franka cutlery-arrangement task."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import math
6
+
7
+ import torch
8
+ from isaaclab.utils.math import (
9
+ axis_angle_from_quat,
10
+ matrix_from_quat,
11
+ quat_apply,
12
+ quat_from_euler_xyz,
13
+ quat_inv,
14
+ quat_mul,
15
+ )
16
+
17
+ from leisaac.datagen.state_machine.base import StateMachineBase
18
+
19
+ # ---------------------------------------------------------------------------
20
+ # Module-level constants
21
+ # ---------------------------------------------------------------------------
22
+ _FORK_NAME = "fork"
23
+ _KNIFE_NAME = "knife"
24
+ _PLATE_NAME = "plate"
25
+ _EE_BODY_NAME = "panda_hand"
26
+ _FRANKA_ARM_JOINT_NAMES = (
27
+ "panda_joint1",
28
+ "panda_joint2",
29
+ "panda_joint3",
30
+ "panda_joint4",
31
+ "panda_joint5",
32
+ "panda_joint6",
33
+ "panda_joint7",
34
+ )
35
+
36
+ _GRIPPER_OPEN = 1.0
37
+ _GRIPPER_CLOSE = -1.0
38
+
39
+ _MAX_CARTESIAN_DELTA = 0.018 # original; per-step IK clamp not changed in this version
40
+ _MAX_ROT_DELTA = 0.08
41
+ _IK_DLS_LAMBDA = 0.01
42
+
43
+ _HOVER_Z_OFFSET = 0.15
44
+ _GRASP_Z_OFFSET = 0.08
45
+ _LIFT_Z_OFFSET = 0.20 # raised back to 0.20 (0.15 was too low — held cutlery and arm clipped neighbouring objects)
46
+ _RELEASE_Z_OFFSET = 0.06 # was 0.09; 0.04 was too low (gripper fingers hit plate/table)
47
+ _RELEASE_TOL_M = 0.015 # phase 6 keeps gripper CLOSED until EE is within this band of release_z
48
+ _GRIPPER_DOWN_ROLL_W = math.pi
49
+ _GRIPPER_DOWN_PITCH_W = 0.0
50
+ _GRIPPER_DOWN_YAW_OFFSET_RANGE = (-0.15, 0.15)
51
+ # Grasp yaw bias (rad) on top of the object's world yaw, before the random
52
+ # jitter. Cutlery items are elongated, so π/2 closes the fingers across the
53
+ # short axis. Per-USD orientation correction lives in env_cfg's
54
+ # ``per_object_yaw_offset``.
55
+ _GRASP_YAW_OFFSET: float = math.pi / 2.0
56
+ # Horizontal retreat (m) toward the robot base applied to approach + grasp
57
+ # targets. Per-object so each cutlery item can be tuned independently
58
+ # (e.g. knife may grab better with no retreat than fork).
59
+ _GRASP_RETREAT_PER_OBJECT: dict[str, float] = {
60
+ "fork": 0.025,
61
+ "knife": 0.025,
62
+ }
63
+
64
+ _PLACE_OFFSET = 0.10
65
+
66
+ _SUCCESS_MAX_DIST_XY = 0.15
67
+
68
+ _FRANKA_REST_JOINT_POS = {
69
+ "panda_joint1": 0.0,
70
+ "panda_joint2": -math.pi / 4.0,
71
+ "panda_joint3": 0.0,
72
+ "panda_joint4": -3.0 * math.pi / 4.0,
73
+ "panda_joint5": 0.0,
74
+ "panda_joint6": math.pi / 2.0,
75
+ "panda_joint7": math.pi / 4.0,
76
+ "panda_finger_joint1": 0.04,
77
+ "panda_finger_joint2": 0.04,
78
+ }
79
+
80
+ # Pick order: fork first (place on +y / left of plate), then knife (place on -y / right)
81
+ _PICK_ORDER = (_KNIFE_NAME, _FORK_NAME)
82
+ _PLACE_X_SIGNS = (-1.0, +1.0) # knife → -x of plate, fork → +x of plate
83
+
84
+ _PHASE_DURATIONS_PER_OBJECT = (180, 130, 20, 160, 170, 15, 30) # original durations; correctness fix first, re-time later
85
+ _PHASES_PER_OBJECT = len(_PHASE_DURATIONS_PER_OBJECT)
86
+
87
+
88
+ def _constant_gripper(num_envs: int, device: torch.device, value: float) -> torch.Tensor:
89
+ return torch.full((num_envs, 1), value, device=device)
90
+
91
+
92
+ def _clamp_delta(delta: torch.Tensor, max_norm: float = _MAX_CARTESIAN_DELTA) -> torch.Tensor:
93
+ norm = torch.linalg.norm(delta, dim=-1, keepdim=True).clamp_min(1e-6)
94
+ scale = torch.clamp(max_norm / norm, max=1.0)
95
+ return delta * scale
96
+
97
+
98
+ def _shortest_quat(quat: torch.Tensor) -> torch.Tensor:
99
+ return torch.where(quat[:, 0:1] < 0.0, -quat, quat)
100
+
101
+
102
+ def _retreat_xy_toward(
103
+ target_pos_w: torch.Tensor,
104
+ anchor_pos_w: torch.Tensor,
105
+ distance: float,
106
+ ) -> torch.Tensor:
107
+ """Pull ``target_pos_w`` xy toward ``anchor_pos_w`` by ``distance`` metres."""
108
+ out = target_pos_w.clone()
109
+ delta_xy = out[:, :2] - anchor_pos_w[:, :2]
110
+ norm = torch.linalg.norm(delta_xy, dim=-1, keepdim=True).clamp_min(1e-6)
111
+ out[:, :2] -= distance * (delta_xy / norm)
112
+ return out
113
+
114
+
115
+ def _yaw_from_quat_wxyz(quat_wxyz: torch.Tensor) -> torch.Tensor:
116
+ """Yaw (rotation about world z) from a (w, x, y, z) quaternion."""
117
+ w, x, y, z = quat_wxyz[:, 0], quat_wxyz[:, 1], quat_wxyz[:, 2], quat_wxyz[:, 3]
118
+ siny_cosp = 2.0 * (w * z + x * y)
119
+ cosy_cosp = 1.0 - 2.0 * (y * y + z * z)
120
+ return torch.atan2(siny_cosp, cosy_cosp)
121
+
122
+
123
+ def _find_body_index(robot, body_name: str) -> int:
124
+ if hasattr(robot, "find_bodies"):
125
+ body_ids, _ = robot.find_bodies(body_name)
126
+ if len(body_ids) > 0:
127
+ return int(body_ids[0])
128
+
129
+ body_names = getattr(robot.data, "body_names", None)
130
+ if body_names is not None and body_name in body_names:
131
+ return body_names.index(body_name)
132
+
133
+ return -1
134
+
135
+
136
+ # ---------------------------------------------------------------------------
137
+ # State machine
138
+ # ---------------------------------------------------------------------------
139
+
140
+
141
+ class CutleryArrangementStateMachine(StateMachineBase):
142
+ """Scripted Franka policy for arranging cutlery around a plate.
143
+
144
+ Picks up the fork and places it on the +y (left) side of the plate,
145
+ then picks up the knife and places it on the -y (right) side.
146
+
147
+ Each object goes through 7 phases:
148
+
149
+ 0. Move above object
150
+ 1. Approach down to object
151
+ 2. Close gripper to grasp
152
+ 3. Lift object upward
153
+ 4. Move above target position (beside plate)
154
+ 5. Lower and release
155
+ 6. Retreat upward
156
+
157
+ The action vector is ``[panda_joint1, ..., panda_joint7, gripper]``.
158
+ """
159
+
160
+ MAX_STEPS: int = len(_PICK_ORDER) * sum(_PHASE_DURATIONS_PER_OBJECT) + 100
161
+
162
+ def __init__(self) -> None:
163
+ self._step_count: int = 0
164
+ self._episode_done: bool = False
165
+ self._ee_body_idx: int = -1
166
+ self._jacobi_body_idx: int = -1
167
+ self._arm_joint_ids: list[int] = []
168
+ self._jacobi_joint_ids: list[int] = []
169
+ self._rest_joint_pos: torch.Tensor | None = None
170
+ self._rest_ee_pos_w: torch.Tensor | None = None
171
+ self._initial_ee_pos_w: torch.Tensor | None = None
172
+ self._gripper_down_yaw_w: torch.Tensor | None = None
173
+ self._gripper_down_yaw_offset_w: torch.Tensor | None = None
174
+ self._current_object_idx: int = 0
175
+ self._event: int = 0
176
+ self._events_dt: list[int] = list(_PHASE_DURATIONS_PER_OBJECT) * len(_PICK_ORDER)
177
+ # Captured EE xy at start of phase 3 (lift). Prevents target drift caused
178
+ # by tracking the held object's moving position.
179
+ self._lift_start_ee_xy_w: torch.Tensor | None = None
180
+
181
+ # ------------------------------------------------------------------
182
+ # StateMachineBase interface
183
+ # ------------------------------------------------------------------
184
+
185
+ def setup(self, env) -> None:
186
+ robot = env.scene["robot"]
187
+ self._ee_body_idx = _find_body_index(robot, _EE_BODY_NAME)
188
+ joint_names = list(robot.data.joint_names)
189
+ missing = [j for j in _FRANKA_ARM_JOINT_NAMES if j not in joint_names]
190
+ if missing:
191
+ raise ValueError(f"Missing Franka joints {missing} in {joint_names}")
192
+ self._arm_joint_ids = [joint_names.index(j) for j in _FRANKA_ARM_JOINT_NAMES]
193
+
194
+ if self._ee_body_idx < 0:
195
+ raise ValueError(f"Could not find body '{_EE_BODY_NAME}' in Franka.")
196
+ if robot.is_fixed_base:
197
+ self._jacobi_body_idx = self._ee_body_idx - 1
198
+ self._jacobi_joint_ids = self._arm_joint_ids
199
+ else:
200
+ self._jacobi_body_idx = self._ee_body_idx
201
+ self._jacobi_joint_ids = [jid + 6 for jid in self._arm_joint_ids]
202
+
203
+ self._rest_joint_pos = torch.zeros(env.num_envs, len(joint_names), device=env.device)
204
+ for idx, name in enumerate(joint_names):
205
+ if name in _FRANKA_REST_JOINT_POS:
206
+ self._rest_joint_pos[:, idx] = _FRANKA_REST_JOINT_POS[name]
207
+
208
+ robot.write_joint_state_to_sim(
209
+ position=self._rest_joint_pos,
210
+ velocity=torch.zeros_like(self._rest_joint_pos),
211
+ )
212
+ env.sim.step(render=False)
213
+ env.scene.update(dt=env.physics_dt)
214
+ self._rest_ee_pos_w = self._ee_pos_w(robot).clone()
215
+
216
+ def check_success(self, env) -> bool:
217
+ plate_pos = env.scene[_PLATE_NAME].data.root_pos_w - env.scene.env_origins
218
+ fork_pos = env.scene[_FORK_NAME].data.root_pos_w - env.scene.env_origins
219
+ knife_pos = env.scene[_KNIFE_NAME].data.root_pos_w - env.scene.env_origins
220
+
221
+ done = torch.ones(env.num_envs, dtype=torch.bool, device=env.device)
222
+
223
+ fork_dist_xy = torch.norm(fork_pos[:, :2] - plate_pos[:, :2], dim=1)
224
+ knife_dist_xy = torch.norm(knife_pos[:, :2] - plate_pos[:, :2], dim=1)
225
+
226
+ done = torch.logical_and(done, fork_dist_xy <= _SUCCESS_MAX_DIST_XY)
227
+ done = torch.logical_and(done, knife_dist_xy <= _SUCCESS_MAX_DIST_XY)
228
+ done = torch.logical_and(done, fork_pos[:, 0] > plate_pos[:, 0]) # fork on +x
229
+ done = torch.logical_and(done, knife_pos[:, 0] < plate_pos[:, 0]) # knife on -x
230
+
231
+ return bool(done.all().item())
232
+
233
+ def pre_step(self, env) -> None:
234
+ pass
235
+
236
+ def get_action(self, env) -> torch.Tensor:
237
+ robot = env.scene["robot"]
238
+ robot.write_joint_damping_to_sim(damping=10.0)
239
+
240
+ device = env.device
241
+ num_envs = env.num_envs
242
+
243
+ obj_name = _PICK_ORDER[self._current_object_idx]
244
+ x_sign = _PLACE_X_SIGNS[self._current_object_idx]
245
+ obj_pos_w = env.scene[obj_name].data.root_pos_w.clone()
246
+ obj_quat_w = env.scene[obj_name].data.root_quat_w.clone()
247
+ plate_pos_w = env.scene[_PLATE_NAME].data.root_pos_w.clone()
248
+ robot_root_pos_w = robot.data.root_pos_w.clone()
249
+
250
+ place_target_w = plate_pos_w.clone()
251
+ place_target_w[:, 0] += x_sign * _PLACE_OFFSET
252
+
253
+ if self._step_count == 0 and self._event == 0:
254
+ self._initial_ee_pos_w = self._ee_pos_w(robot).clone()
255
+
256
+ phase_in_cycle = self._event % _PHASES_PER_OBJECT
257
+
258
+ target_quat_w = self._gripper_down_quat_w(
259
+ obj_quat_w,
260
+ obj_name,
261
+ num_envs,
262
+ device,
263
+ obj_quat_w.dtype,
264
+ yaw_offset=_GRASP_YAW_OFFSET,
265
+ )
266
+
267
+ grasp_anchor_w = _retreat_xy_toward(
268
+ obj_pos_w,
269
+ robot_root_pos_w,
270
+ _GRASP_RETREAT_PER_OBJECT.get(obj_name, 0.0),
271
+ )
272
+
273
+ if phase_in_cycle == 0:
274
+ target_pos_w, gripper_cmd = self._phase_move_above_object(obj_pos_w, num_envs, device)
275
+ elif phase_in_cycle == 1:
276
+ target_pos_w, gripper_cmd = self._phase_approach_object(grasp_anchor_w, num_envs, device)
277
+ elif phase_in_cycle == 2:
278
+ target_pos_w, gripper_cmd = self._phase_grasp(grasp_anchor_w, num_envs, device)
279
+ elif phase_in_cycle == 3:
280
+ # Lift: capture EE xy on first call so the target stays fixed (avoids
281
+ # drifting with the held object's xy). Target z is plate.z + LIFT_Z.
282
+ ee_pos_now_w = self._ee_pos_w(robot)
283
+ target_pos_w, gripper_cmd = self._phase_lift(ee_pos_now_w, plate_pos_w, num_envs, device)
284
+ elif phase_in_cycle == 4:
285
+ target_pos_w, gripper_cmd = self._phase_move_above_place(place_target_w, num_envs, device)
286
+ elif phase_in_cycle == 5:
287
+ target_pos_w, gripper_cmd = self._phase_lower_to_release(place_target_w, num_envs, device)
288
+ else:
289
+ # Phase 6: only open gripper once descent is verified complete.
290
+ target_pos_w, gripper_cmd = self._phase_retreat(
291
+ place_target_w, num_envs, device, robot=robot
292
+ )
293
+
294
+ return self._joint_position_franka_action(env, target_pos_w, target_quat_w, gripper_cmd)
295
+
296
+ # ------------------------------------------------------------------
297
+ # Phase helpers
298
+ # ------------------------------------------------------------------
299
+
300
+ def _phase_move_above_object(self, obj_pos_w, num_envs, device):
301
+ target = obj_pos_w.clone()
302
+ target[:, 2] += _HOVER_Z_OFFSET
303
+ if self._initial_ee_pos_w is not None:
304
+ denom = max(self._events_dt[self._event] - 1, 1)
305
+ alpha = min(self._step_count / denom, 1.0)
306
+ target = (1.0 - alpha) * self._initial_ee_pos_w + alpha * target
307
+ return target, _constant_gripper(num_envs, device, _GRIPPER_OPEN)
308
+
309
+ def _phase_approach_object(self, obj_pos_w, num_envs, device):
310
+ target = obj_pos_w.clone()
311
+ target[:, 2] += _GRASP_Z_OFFSET
312
+ return target, _constant_gripper(num_envs, device, _GRIPPER_OPEN)
313
+
314
+ def _phase_grasp(self, obj_pos_w, num_envs, device):
315
+ # Hold the same height as the approach phase so the EE doesn't keep
316
+ # descending while the fingers are closing — that timing race causes
317
+ # empty grasps.
318
+ target = obj_pos_w.clone()
319
+ target[:, 2] += _GRASP_Z_OFFSET
320
+ return target, _constant_gripper(num_envs, device, _GRIPPER_CLOSE)
321
+
322
+ def _phase_lift(self, ee_pos_w, plate_pos_w, num_envs, device):
323
+ # Capture EE xy on the FIRST step of this phase so the target stays fixed.
324
+ # If we used obj.xy (or refreshed ee.xy every step), the target would drift
325
+ # with the held object's offset relative to the gripper — causing the arm
326
+ # to extend outward instead of just lifting straight up.
327
+ if self._step_count == 0 or self._lift_start_ee_xy_w is None:
328
+ self._lift_start_ee_xy_w = ee_pos_w[:, :2].clone()
329
+ target = ee_pos_w.clone()
330
+ target[:, :2] = self._lift_start_ee_xy_w
331
+ # Fixed altitude: plate.z + LIFT_Z_OFFSET (no unbounded chase upward).
332
+ target[:, 2] = plate_pos_w[:, 2] + _LIFT_Z_OFFSET
333
+ return target, _constant_gripper(num_envs, device, _GRIPPER_CLOSE)
334
+
335
+ def _phase_move_above_place(self, place_pos_w, num_envs, device):
336
+ target = place_pos_w.clone()
337
+ target[:, 2] += _LIFT_Z_OFFSET
338
+ return target, _constant_gripper(num_envs, device, _GRIPPER_CLOSE)
339
+
340
+ def _phase_lower_to_release(self, place_pos_w, num_envs, device):
341
+ target = place_pos_w.clone()
342
+ target[:, 2] += _RELEASE_Z_OFFSET
343
+ return target, _constant_gripper(num_envs, device, _GRIPPER_CLOSE)
344
+
345
+ def _phase_retreat(self, place_pos_w, num_envs, device, robot=None):
346
+ # EXPLICIT DESCENT-COMPLETE CHECK: if the EE has not actually reached the
347
+ # release altitude yet (because phase 5 ran out of steps or IK was slow),
348
+ # we keep gripper CLOSED and continue targeting the release point.
349
+ # Only once the EE is within `_RELEASE_TOL_M` of the release altitude do
350
+ # we transition to the actual retreat (gripper open + target up).
351
+ if robot is not None and self._ee_body_idx >= 0:
352
+ ee_z = robot.data.body_pos_w[:, self._ee_body_idx, 2]
353
+ release_z = place_pos_w[:, 2] + _RELEASE_Z_OFFSET
354
+ descent_complete = bool((ee_z <= release_z + _RELEASE_TOL_M).all().item())
355
+ else:
356
+ descent_complete = True
357
+
358
+ if not descent_complete:
359
+ # Still descending — hold release-point target, keep gripper closed.
360
+ target = place_pos_w.clone()
361
+ target[:, 2] += _RELEASE_Z_OFFSET
362
+ return target, _constant_gripper(num_envs, device, _GRIPPER_CLOSE)
363
+
364
+ target = place_pos_w.clone()
365
+ target[:, 2] += _LIFT_Z_OFFSET
366
+ return target, _constant_gripper(num_envs, device, _GRIPPER_OPEN)
367
+
368
+ # ------------------------------------------------------------------
369
+ # Timeline
370
+ # ------------------------------------------------------------------
371
+
372
+ def advance(self) -> None:
373
+ if self._episode_done:
374
+ return
375
+
376
+ self._step_count += 1
377
+ if self._step_count < self._events_dt[self._event]:
378
+ return
379
+
380
+ self._event += 1
381
+ self._step_count = 0
382
+
383
+ if self._event >= len(self._events_dt):
384
+ self._episode_done = True
385
+ return
386
+
387
+ new_obj_idx = self._event // _PHASES_PER_OBJECT
388
+ if new_obj_idx != self._current_object_idx:
389
+ self._current_object_idx = new_obj_idx
390
+ self._initial_ee_pos_w = None
391
+ self._gripper_down_yaw_w = None
392
+ self._gripper_down_yaw_offset_w = None
393
+ self._lift_start_ee_xy_w = None
394
+
395
+ def reset(self) -> None:
396
+ self._step_count = 0
397
+ self._episode_done = False
398
+ self._event = 0
399
+ self._current_object_idx = 0
400
+ self._initial_ee_pos_w = None
401
+ self._gripper_down_yaw_w = None
402
+ self._gripper_down_yaw_offset_w = None
403
+ self._lift_start_ee_xy_w = None
404
+
405
+ # ------------------------------------------------------------------
406
+ # IK / control helpers (same as CupStackingStateMachine)
407
+ # ------------------------------------------------------------------
408
+
409
+ def _ee_pos_w(self, robot) -> torch.Tensor:
410
+ body_idx = self._ee_body_idx if self._ee_body_idx >= 0 else -1
411
+ return robot.data.body_pos_w[:, body_idx, :]
412
+
413
+ def _ee_quat_w(self, robot) -> torch.Tensor:
414
+ body_idx = self._ee_body_idx if self._ee_body_idx >= 0 else -1
415
+ return robot.data.body_quat_w[:, body_idx, :]
416
+
417
+ def _joint_position_franka_action(
418
+ self,
419
+ env,
420
+ target_pos_w: torch.Tensor,
421
+ target_quat_w: torch.Tensor,
422
+ gripper_cmd: torch.Tensor,
423
+ ) -> torch.Tensor:
424
+ robot = env.scene["robot"]
425
+ root_pos_w = robot.data.root_pos_w
426
+ root_quat_w = robot.data.root_quat_w
427
+ root_quat_inv = quat_inv(root_quat_w)
428
+
429
+ target_pos_root = quat_apply(root_quat_inv, target_pos_w - root_pos_w)
430
+ ee_pos_root = quat_apply(root_quat_inv, self._ee_pos_w(robot) - root_pos_w)
431
+ delta_pos_root = _clamp_delta(target_pos_root - ee_pos_root)
432
+
433
+ delta_quat_w = _shortest_quat(quat_mul(target_quat_w, quat_inv(self._ee_quat_w(robot))))
434
+ delta_rot_w = axis_angle_from_quat(delta_quat_w)
435
+ delta_rot_root = _clamp_delta(quat_apply(root_quat_inv, delta_rot_w), _MAX_ROT_DELTA)
436
+
437
+ pose_delta_root = torch.cat([delta_pos_root, delta_rot_root], dim=-1)
438
+ joint_pos_target = self._arm_joint_pos(robot) + self._compute_delta_joint_pos(
439
+ pose_delta_root, self._ee_jacobian_root(robot)
440
+ )
441
+ joint_pos_target = self._clamp_arm_joint_pos(robot, joint_pos_target)
442
+ return torch.cat([joint_pos_target, gripper_cmd], dim=-1)
443
+
444
+ def _arm_joint_pos(self, robot) -> torch.Tensor:
445
+ if not self._arm_joint_ids:
446
+ raise RuntimeError("setup() must run before requesting actions.")
447
+ return robot.data.joint_pos[:, self._arm_joint_ids]
448
+
449
+ def _ee_jacobian_root(self, robot) -> torch.Tensor:
450
+ if self._jacobi_body_idx < 0 or not self._jacobi_joint_ids:
451
+ raise RuntimeError("setup() must run before requesting actions.")
452
+
453
+ jacobian = robot.root_physx_view.get_jacobians()[
454
+ :, self._jacobi_body_idx, :, self._jacobi_joint_ids
455
+ ].clone()
456
+ root_rot_matrix = matrix_from_quat(quat_inv(robot.data.root_quat_w))
457
+ jacobian[:, :3, :] = torch.bmm(root_rot_matrix, jacobian[:, :3, :])
458
+ jacobian[:, 3:, :] = torch.bmm(root_rot_matrix, jacobian[:, 3:, :])
459
+ return jacobian
460
+
461
+ def _compute_delta_joint_pos(self, pose_delta: torch.Tensor, jacobian: torch.Tensor) -> torch.Tensor:
462
+ jacobian_t = torch.transpose(jacobian, dim0=1, dim1=2)
463
+ lambda_matrix = (_IK_DLS_LAMBDA**2) * torch.eye(
464
+ jacobian.shape[1], device=jacobian.device, dtype=jacobian.dtype
465
+ )
466
+ delta_joint_pos = (
467
+ jacobian_t @ torch.inverse(jacobian @ jacobian_t + lambda_matrix) @ pose_delta.unsqueeze(-1)
468
+ )
469
+ return delta_joint_pos.squeeze(-1)
470
+
471
+ def _clamp_arm_joint_pos(self, robot, joint_pos: torch.Tensor) -> torch.Tensor:
472
+ joint_pos_limits = getattr(robot.data, "soft_joint_pos_limits", None)
473
+ if joint_pos_limits is None:
474
+ joint_pos_limits = getattr(robot.data, "joint_pos_limits", None)
475
+ if joint_pos_limits is None:
476
+ return joint_pos
477
+ arm_joint_pos_limits = joint_pos_limits[:, self._arm_joint_ids, :]
478
+ return torch.clamp(joint_pos, arm_joint_pos_limits[..., 0], arm_joint_pos_limits[..., 1])
479
+
480
+ def _gripper_down_quat_w(
481
+ self,
482
+ obj_quat_w: torch.Tensor,
483
+ obj_name: str,
484
+ num_envs: int,
485
+ device: torch.device,
486
+ dtype: torch.dtype,
487
+ yaw_offset: float = 0.0,
488
+ ) -> torch.Tensor:
489
+ if self._gripper_down_yaw_w is None or self._gripper_down_yaw_w.shape[0] != num_envs:
490
+ base_yaw = _yaw_from_quat_wxyz(obj_quat_w).to(device=device, dtype=dtype) # gripper aligned with the orientation of the object
491
+ self._gripper_down_yaw_offset_w = torch.empty(num_envs, device=device, dtype=dtype).uniform_(
492
+ _GRIPPER_DOWN_YAW_OFFSET_RANGE[0],
493
+ _GRIPPER_DOWN_YAW_OFFSET_RANGE[1],
494
+ )
495
+ if obj_name == _KNIFE_NAME:
496
+ base_yaw = torch.zeros_like(base_yaw) # fixed direction
497
+ self._gripper_down_yaw_w = (
498
+ base_yaw + yaw_offset + self._gripper_down_yaw_offset_w
499
+ ).clone()
500
+
501
+ roll = torch.full((num_envs,), _GRIPPER_DOWN_ROLL_W, device=device, dtype=dtype)
502
+ pitch = torch.full((num_envs,), _GRIPPER_DOWN_PITCH_W, device=device, dtype=dtype)
503
+ yaw = self._gripper_down_yaw_w.to(device=device, dtype=dtype)
504
+ return quat_from_euler_xyz(roll, pitch, yaw)
505
+
506
+ # ------------------------------------------------------------------
507
+ # Properties
508
+ # ------------------------------------------------------------------
509
+
510
+ @property
511
+ def is_episode_done(self) -> bool:
512
+ return self._episode_done
513
+
514
+ @property
515
+ def step_count(self) -> int:
516
+ return self._step_count
517
+
518
+ @property
519
+ def task_object_names(self) -> tuple[str, ...]:
520
+ return (_FORK_NAME, _KNIFE_NAME, _PLATE_NAME)
exp_lift_v2/datagen.log ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Running exp_lift_v2 ===
2
+ Mon May 25 05:55:59 PM PST 2026
3
+
4
+ ==========
5
+ == CUDA ==
6
+ ==========
7
+
8
+ CUDA Version 12.8.1
9
+
10
+ Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
11
+
12
+ This container image and its contents are governed by the NVIDIA Deep Learning Container License.
13
+ By pulling and using the container, you accept the terms and conditions of this license:
14
+ https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
15
+
16
+ A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
17
+
18
+ debconf: delaying package configuration, since apt-utils is not installed
19
+ [INFO][AppLauncher]: Using device: cuda
20
+ [INFO][AppLauncher]: Loading experience file: /workspace/aicapstone/dependencies/IsaacLab/apps/isaaclab.python.headless.rendering.kit
21
+ [Info] [carb] Logging to file: /usr/local/lib/python3.11/dist-packages/isaacsim/kit/logs/Kit/Isaac-Sim/5.1/kit_20260525_095730.log
22
+ 2026-05-25T09:57:30Z [176ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
23
+ 2026-05-25T09:57:30Z [176ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
24
+ 2026-05-25T09:57:30Z [186ms] [Warning] [omni.platforminfo.plugin] failed to open the default display. Can't verify X Server version.
25
+
26
+ |---------------------------------------------------------------------------------------------|
27
+ | Driver Version: 580.159.03 | Graphics API: Vulkan
28
+ |=============================================================================================|
29
+ | GPU | Name | Active | LDA | GPU Memory | Vendor-ID | LUID |
30
+ | | | | | | Device-ID | UUID |
31
+ | | | | | | Bus-ID | |
32
+ |---------------------------------------------------------------------------------------------|
33
+ | 0 | NVIDIA GeForce RTX 3060 | Yes: 0 | | 12534 MB | 10de | 0 |
34
+ | | | | | | 2504 | 032c9579.. |
35
+ | | | | | | 1 | |
36
+ |=============================================================================================|
37
+ | OS: 22.04.5 LTS (Jammy Jellyfish) ubuntu, Version: 22.04.5, Kernel: 6.17.0-29-generic
38
+ | Processor: Intel(R) Core(TM) i5-10500 CPU @ 3.10GHz
39
+ | Cores: 6 | Logical Cores: 12
40
+ |---------------------------------------------------------------------------------------------|
41
+ | Total Memory (MB): 31934 | Free Memory: 29391
42
+ | Total Page/Swap (MB): 4095 | Free Page/Swap: 0
43
+ |---------------------------------------------------------------------------------------------|
44
+ 2026-05-25T09:57:31Z [894ms] [Warning] [gpu.foundation.plugin] CPU performance profile is set to powersave. This profile sets the CPU to the lowest frequency reducing performance.
45
+ 2026-05-25T09:57:31Z [1,494ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
46
+ 2026-05-25T09:57:31Z [1,494ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
47
+ 2026-05-25T09:57:31Z [1,621ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
48
+ 2026-05-25T09:57:31Z [1,621ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
49
+ 2026-05-25T09:57:31Z [1,629ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
50
+ 2026-05-25T09:57:31Z [1,629ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
51
+ 2026-05-25T09:57:31Z [1,637ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
52
+ 2026-05-25T09:57:31Z [1,637ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
53
+ 2026-05-25T09:57:31Z [1,639ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
54
+ 2026-05-25T09:57:31Z [1,639ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
55
+ 2026-05-25T09:57:31Z [1,640ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
56
+ 2026-05-25T09:57:31Z [1,640ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
57
+ 2026-05-25T09:57:31Z [1,833ms] [Warning] [omni.log] Source: omni.hydra was already registered.
58
+ 2026-05-25T09:57:32Z [2,148ms] [Warning] [carb] Acquiring non optional plugin interface which is not listed as dependency: [omni::physx::IPhysxBenchmarks v1.0] (plugin: <default plugin>), by client: omni.physics.physx.plugin. Add it to CARB_PLUGIN_IMPL_DEPS() macro of a client.
59
+ 2026-05-25T09:57:32Z [2,159ms] [Warning] [omni.isaac.dynamic_control] omni.isaac.dynamic_control is deprecated as of Isaac Sim 4.5. No action is needed from end-users.
60
+ 2026-05-25T09:57:34Z [4,561ms] [Warning] [pxr.Semantics] pxr.Semantics is deprecated - please use Semantics instead
61
+ 2026-05-25T09:57:34Z [4,727ms] [Warning] [omni.graph.core.plugin] Found duplicate of category 'Replicator' - was 'Annotators', adding 'Fabric Reader'
62
+ 2026-05-25T09:57:34Z [4,727ms] [Warning] [omni.graph.core.plugin] Category 'Replicator' not accepted on node type 'omni.replicator.core.FabricReader' in extension 'omni.replicator.core'
63
+ 2026-05-25T09:57:34Z [4,728ms] [Warning] [omni.replicator.core.scripts.extension] No material configuration file, adding configuration to material settings directly.
64
+ 2026-05-25T09:58:24Z [54,019ms] [Warning] [omni.fabric.plugin] Warning: attribute viewPickingId not found for bucket id 7
65
+
66
+ [INFO]: Parsing configuration from: simulator.tasks.cutlery_arrangement.cutlery_arrangement_env_cfg:CutleryArrangementEnvCfg
67
+ Loaded 10 replay episodes from data/umi/test_fsm_v3/object_poses_10_shared.json
68
+
69
+ ======================================================================================
70
+ [INFO][IsaacLab]: Logging to file: /tmp/isaaclab/logs/isaaclab_2026-05-25_10-00-09.log
71
+ ======================================================================================
72
+
73
+ 10:00:10 [simulation_context.py] WARNING: The `enable_external_forces_every_iteration` parameter in the PhysxCfg is set to False. If you are experiencing noisy velocities, consider enabling this flag. You may need to slightly increase the number of velocity iterations (setting it to 1 or 2 rather than 0), together with this flag, to improve the accuracy of velocity updates.
74
+ [INFO]: Base environment:
75
+ Environment device : cuda:0
76
+ Environment seed : 1779703209
77
+ Physics step-size : 0.016666666666666666
78
+ Rendering step-size : 0.016666666666666666
79
+ Environment step-size : 0.016666666666666666
80
+ 10:00:11 [prims.py] WARNING: Could not perform 'modify_mass_properties' on any prims under: '/World/envs/env_0/Scene/plate'. This might be because of the following reasons:
81
+ (1) The desired attribute does not exist on any of the prims.
82
+ (2) The desired attribute exists on an instanced prim.
83
+ Discovered list of instanced prim paths: []
84
+ 10:00:12 [prims.py] WARNING: Could not perform 'modify_mass_properties' on any prims under: '/World/envs/env_0/Scene/knife'. This might be because of the following reasons:
85
+ (1) The desired attribute does not exist on any of the prims.
86
+ (2) The desired attribute exists on an instanced prim.
87
+ Discovered list of instanced prim paths: []
88
+ 10:00:12 [prims.py] WARNING: Could not perform 'modify_mass_properties' on any prims under: '/World/envs/env_0/Scene/fork'. This might be because of the following reasons:
89
+ (1) The desired attribute does not exist on any of the prims.
90
+ (2) The desired attribute exists on an instanced prim.
91
+ Discovered list of instanced prim paths: []
92
+ [INFO]: Time taken for scene creation : 1.481702 seconds
93
+ [INFO]: Scene manager: <class InteractiveScene>
94
+ Number of environments: 1
95
+ Environment spacing : 8.0
96
+ Source prim name : /World/envs/env_0
97
+ Global prim paths : []
98
+ Replicate physics : True
99
+ [INFO]: Starting the simulation. This may take a few seconds. Please wait...
100
+ 2026-05-25T10:00:18Z [167,953ms] [Warning] [rtx.postprocessing.plugin] DLSS increasing input dimensions: Render resolution of (371, 278) is below minimal input resolution of 300.
101
+ [INFO]: Time taken for simulation start : 6.297369 seconds
102
+ [INFO] Command Manager: <CommandManager> contains 0 active terms.
103
+ +------------------------+
104
+ | Active Command Terms |
105
+ +--------+-------+-------+
106
+ | Index | Name | Type |
107
+ +--------+-------+-------+
108
+ +--------+-------+-------+
109
+
110
+ [INFO] Event Manager: <EventManager> contains 1 active terms.
111
+ +---------------------------------+
112
+ | Active Event Terms in Mode: 'reset' |
113
+ +------------+--------------------+
114
+ | Index | Name |
115
+ +------------+--------------------+
116
+ | 0 | reset_all |
117
+ +------------+--------------------+
118
+
119
+ [INFO] Recorder Manager: <RecorderManager> contains 5 active terms.
120
+ +--------------------------------------------------+
121
+ | Active Recorder Terms |
122
+ +-------+------------------------------------------+
123
+ | Index | Name |
124
+ +-------+------------------------------------------+
125
+ | 0 | record_initial_state |
126
+ | 1 | record_post_step_states |
127
+ | 2 | record_pre_step_actions |
128
+ | 3 | record_pre_step_flat_policy_observations |
129
+ | 4 | record_post_step_processed_actions |
130
+ +-------+------------------------------------------+
131
+
132
+ [INFO] Action Manager: <ActionManager> contains 2 active terms.
133
+ +------------------------------------+
134
+ | Active Action Terms (shape: 8) |
135
+ +-------+----------------+-----------+
136
+ | Index | Name | Dimension |
137
+ +-------+----------------+-----------+
138
+ | 0 | arm_action | 7 |
139
+ | 1 | gripper_action | 1 |
140
+ +-------+----------------+-----------+
141
+
142
+ [INFO] Observation Manager: <ObservationManager> contains 1 groups.
143
+ +-----------------------------------------------+
144
+ | Active Observation Terms in Group: 'policy' |
145
+ +--------+--------------------+-----------------+
146
+ | Index | Name | Shape |
147
+ +--------+--------------------+-----------------+
148
+ | 0 | joint_pos | (9,) |
149
+ | 1 | joint_vel | (9,) |
150
+ | 2 | joint_pos_rel | (9,) |
151
+ | 3 | joint_vel_rel | (9,) |
152
+ | 4 | actions | (8,) |
153
+ | 5 | wrist | (480, 640, 3) |
154
+ | 6 | front | (480, 640, 3) |
155
+ | 7 | joint_pos_target | (9,) |
156
+ +--------+--------------------+-----------------+
157
+
158
+ [INFO] Termination Manager: <TerminationManager> contains 1 active terms.
159
+ +----------------------------+
160
+ | Active Termination Terms |
161
+ +-------+---------+----------+
162
+ | Index | Name | Time Out |
163
+ +-------+---------+----------+
164
+ | 0 | success | False |
165
+ +-------+---------+----------+
166
+
167
+ [INFO] Reward Manager: <RewardManager> contains 0 active terms.
168
+ +-----------------------+
169
+ | Active Reward Terms |
170
+ +-------+------+--------+
171
+ | Index | Name | Weight |
172
+ +-------+------+--------+
173
+ +-------+------+--------+
174
+
175
+ [INFO] Curriculum Manager: <CurriculumManager> contains 0 active terms.
176
+ +----------------------+
177
+ | Active Curriculum Terms |
178
+ +-----------+----------+
179
+ | Index | Name |
180
+ +-----------+----------+
181
+ +-----------+----------+
182
+
183
+ [INFO]: Completed setting up the environment...
184
+ [pose] fork: pos=(0.599, -0.172, 0.050) yaw= -0.0°
185
+ [pose] knife: pos=(0.503, -0.261, 0.050) yaw=+180.0°
186
+ Start Recording!!!
187
+ 2026-05-25T10:00:22Z [172,299ms] [Warning] [carb] Client gpu.foundation.plugin has acquired [gpu::unstable::IMemoryBudgetManagerFactory v0.1] 100 times. Consider accessing this interface with carb::getCachedInterface() (Performance warning)
188
+ Episode success!
189
+ Stop Recording!!!
190
+
191
+ Svt[info]: -------------------------------------------
192
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
193
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
194
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
195
+ Svt[info]: -------------------------------------------
196
+ Svt[warn]: Preset M12 is mapped to M10.
197
+ Svt[info]: Level of Parallelism: 5
198
+ Svt[info]: Number of PPCS 76
199
+ Svt[info]: [asm level on system : up to avx2]
200
+ Svt[info]: [asm level selected : up to avx2]
201
+ Svt[info]: -------------------------------------------
202
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
203
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
204
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
205
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
206
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
207
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
208
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
209
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
210
+ Svt[info]: Svt[info]: -------------------------------------------
211
+ Svt[warn]: Failed to set thread priority: Invalid argument
212
+ Svt[info]: -------------------------------------------
213
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
214
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
215
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
216
+ Svt[info]: -------------------------------------------
217
+ Svt[warn]: Preset M12 is mapped to M10.
218
+ Svt[info]: Level of Parallelism: 5
219
+ Svt[info]: Number of PPCS 76
220
+ Svt[info]: [asm level on system : up to avx2]
221
+ Svt[info]: [asm level selected : up to avx2]
222
+ Svt[info]: -------------------------------------------
223
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
224
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
225
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
226
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
227
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
228
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
229
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
230
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
231
+ Svt[info]: Svt[info]: -------------------------------------------
232
+ [pose] fork: pos=(0.348, -0.264, 0.050) yaw= -0.0°
233
+ [pose] knife: pos=(0.475, -0.230, 0.050) yaw=+180.0°
234
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_01_success.mp4 (235 frames)
235
+ [Data Usage]1/10 success.
236
+ Start Recording!!!
237
+ Episode success!
238
+ Stop Recording!!!
239
+
240
+ Svt[info]: -------------------------------------------
241
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
242
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
243
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
244
+ Svt[info]: -------------------------------------------
245
+ Svt[warn]: Preset M12 is mapped to M10.
246
+ Svt[info]: Level of Parallelism: 5
247
+ Svt[info]: Number of PPCS 76
248
+ Svt[info]: [asm level on system : up to avx2]
249
+ Svt[info]: [asm level selected : up to avx2]
250
+ Svt[info]: -------------------------------------------
251
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
252
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
253
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
254
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
255
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
256
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
257
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
258
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
259
+ Svt[info]: Svt[info]: -------------------------------------------
260
+ [mp4 @ 0x7c6357008580] Starting second pass: moving the moov atom to the beginning of the file
261
+ Svt[info]: -------------------------------------------
262
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
263
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
264
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
265
+ Svt[info]: -------------------------------------------
266
+ Svt[warn]: Preset M12 is mapped to M10.
267
+ Svt[info]: Level of Parallelism: 5
268
+ Svt[info]: Number of PPCS 76
269
+ Svt[info]: [asm level on system : up to avx2]
270
+ Svt[info]: [asm level selected : up to avx2]
271
+ Svt[info]: -------------------------------------------
272
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
273
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
274
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
275
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
276
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
277
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
278
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
279
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
280
+ Svt[info]: Svt[info]: -------------------------------------------
281
+ [mp4 @ 0x7c639add8d40] Starting second pass: moving the moov atom to the beginning of the file
282
+ [pose] fork: pos=(0.408, -0.010, 0.050) yaw= -0.0°
283
+ [pose] knife: pos=(0.626, -0.034, 0.050) yaw=+180.0°
284
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_02_success.mp4 (235 frames)
285
+ [Data Usage]2/10 success.
286
+ Start Recording!!!
287
+ Episode success!
288
+ Stop Recording!!!
289
+
290
+ Svt[info]: -------------------------------------------
291
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
292
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
293
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
294
+ Svt[info]: -------------------------------------------
295
+ Svt[warn]: Preset M12 is mapped to M10.
296
+ Svt[info]: Level of Parallelism: 5
297
+ Svt[info]: Number of PPCS 76
298
+ Svt[info]: [asm level on system : up to avx2]
299
+ Svt[info]: [asm level selected : up to avx2]
300
+ Svt[info]: -------------------------------------------
301
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
302
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
303
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
304
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
305
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
306
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
307
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
308
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
309
+ Svt[info]: Svt[info]: -------------------------------------------
310
+ [mp4 @ 0x7c639b90dd40] Starting second pass: moving the moov atom to the beginning of the file
311
+ Svt[info]: -------------------------------------------
312
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
313
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
314
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
315
+ Svt[info]: -------------------------------------------
316
+ Svt[warn]: Preset M12 is mapped to M10.
317
+ Svt[info]: Level of Parallelism: 5
318
+ Svt[info]: Number of PPCS 76
319
+ Svt[info]: [asm level on system : up to avx2]
320
+ Svt[info]: [asm level selected : up to avx2]
321
+ Svt[info]: -------------------------------------------
322
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
323
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
324
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
325
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
326
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
327
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
328
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
329
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
330
+ Svt[info]: Svt[info]: -------------------------------------------
331
+ [mp4 @ 0x7c639b408d40] Starting second pass: moving the moov atom to the beginning of the file
332
+ [pose] knife: pos=(0.136, -0.188, 0.050) yaw=+180.0°
333
+ [pose] fork: pos=(0.310, -0.261, 0.050) yaw= -0.0°
334
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_03_success.mp4 (235 frames)
335
+ [Data Usage]3/10 success.
336
+ Start Recording!!!
337
+ Episode success!
338
+ Stop Recording!!!
339
+
340
+ Svt[info]: -------------------------------------------
341
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
342
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
343
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
344
+ Svt[info]: -------------------------------------------
345
+ Svt[warn]: Preset M12 is mapped to M10.
346
+ Svt[info]: Level of Parallelism: 5
347
+ Svt[info]: Number of PPCS 76
348
+ Svt[info]: [asm level on system : up to avx2]
349
+ Svt[info]: [asm level selected : up to avx2]
350
+ Svt[info]: -------------------------------------------
351
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
352
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
353
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
354
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
355
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
356
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
357
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
358
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
359
+ Svt[info]: Svt[info]: -------------------------------------------
360
+ [mp4 @ 0x7c639b408d40] Starting second pass: moving the moov atom to the beginning of the file
361
+ Svt[info]: -------------------------------------------
362
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
363
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
364
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
365
+ Svt[info]: -------------------------------------------
366
+ Svt[warn]: Preset M12 is mapped to M10.
367
+ Svt[info]: Level of Parallelism: 5
368
+ Svt[info]: Number of PPCS 76
369
+ Svt[info]: [asm level on system : up to avx2]
370
+ Svt[info]: [asm level selected : up to avx2]
371
+ Svt[info]: -------------------------------------------
372
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
373
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
374
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
375
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
376
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
377
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
378
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
379
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
380
+ Svt[info]: Svt[info]: -------------------------------------------
381
+ [mp4 @ 0x7c639b90dd40] Starting second pass: moving the moov atom to the beginning of the file
382
+ [pose] knife: pos=(0.138, -0.101, 0.050) yaw=+180.0°
383
+ [pose] fork: pos=(0.273, -0.355, 0.050) yaw= -0.0°
384
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_04_success.mp4 (235 frames)
385
+ [Data Usage]4/10 success.
386
+ Start Recording!!!
387
+ Episode success!
388
+ Stop Recording!!!
389
+
390
+ Svt[info]: -------------------------------------------
391
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
392
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
393
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
394
+ Svt[info]: -------------------------------------------
395
+ Svt[warn]: Preset M12 is mapped to M10.
396
+ Svt[info]: Level of Parallelism: 5
397
+ Svt[info]: Number of PPCS 76
398
+ Svt[info]: [asm level on system : up to avx2]
399
+ Svt[info]: [asm level selected : up to avx2]
400
+ Svt[info]: -------------------------------------------
401
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
402
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
403
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
404
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
405
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
406
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
407
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
408
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
409
+ Svt[info]: Svt[info]: -------------------------------------------
410
+ [mp4 @ 0x7c639b58ad40] Starting second pass: moving the moov atom to the beginning of the file
411
+ Svt[info]: -------------------------------------------
412
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
413
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
414
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
415
+ Svt[info]: -------------------------------------------
416
+ Svt[warn]: Preset M12 is mapped to M10.
417
+ Svt[info]: Level of Parallelism: 5
418
+ Svt[info]: Number of PPCS 76
419
+ Svt[info]: [asm level on system : up to avx2]
420
+ Svt[info]: [asm level selected : up to avx2]
421
+ Svt[info]: -------------------------------------------
422
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
423
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
424
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
425
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
426
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
427
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
428
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
429
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
430
+ Svt[info]: Svt[info]: -------------------------------------------
431
+ [mp4 @ 0x7c639add8d40] Starting second pass: moving the moov atom to the beginning of the file
432
+ [pose] knife: pos=(0.113, -0.284, 0.050) yaw=+180.0°
433
+ [pose] fork: pos=(0.137, -0.081, 0.050) yaw= -0.0°
434
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_05_success.mp4 (235 frames)
435
+ [Data Usage]5/10 success.
436
+ Start Recording!!!
437
+ Episode success!
438
+ Stop Recording!!!
439
+
440
+ Svt[info]: -------------------------------------------
441
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
442
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
443
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
444
+ Svt[info]: -------------------------------------------
445
+ Svt[warn]: Preset M12 is mapped to M10.
446
+ Svt[info]: Level of Parallelism: 5
447
+ Svt[info]: Number of PPCS 76
448
+ Svt[info]: [asm level on system : up to avx2]
449
+ Svt[info]: [asm level selected : up to avx2]
450
+ Svt[info]: -------------------------------------------
451
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
452
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
453
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
454
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
455
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
456
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
457
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
458
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
459
+ Svt[info]: Svt[info]: -------------------------------------------
460
+ [mp4 @ 0x7c639b58ad40] Starting second pass: moving the moov atom to the beginning of the file
461
+ Svt[info]: -------------------------------------------
462
+ Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v3.0.0
463
+ Svt[info]: SVT [build] : GCC 14.2.1 20250110 (Red Hat 14.2.1-7) 64 bit
464
+ Svt[info]: LIB Build date: Jul 3 2025 03:14:07
465
+ Svt[info]: -------------------------------------------
466
+ Svt[warn]: Preset M12 is mapped to M10.
467
+ Svt[info]: Level of Parallelism: 5
468
+ Svt[info]: Number of PPCS 76
469
+ Svt[info]: [asm level on system : up to avx2]
470
+ Svt[info]: [asm level selected : up to avx2]
471
+ Svt[info]: -------------------------------------------
472
+ Svt[info]: SVT [config]: main profile tier (auto) level (auto)
473
+ Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 640 / 480 / 30 / 1
474
+ Svt[info]: SVT [config]: bit-depth / color format : 8 / YUV420
475
+ Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
476
+ Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 2 / 16 / key frame
477
+ Svt[info]: SVT [config]: BRC mode / rate factor : CRF / 30
478
+ Svt[info]: SVT [config]: AQ mode / variance boost : 2 / 0
479
+ Svt[info]: SVT [config]: sharpness / luminance-based QP bias : 0 / 0
480
+ Svt[info]: Svt[info]: -------------------------------------------
481
+ [mp4 @ 0x7c639ae40d40] Starting second pass: moving the moov atom to the beginning of the file
482
+ [pose] fork: pos=(0.171, -0.498, 0.050) yaw= -0.0°
483
+ [pose] knife: pos=(0.452, -0.561, 0.050) yaw=+180.0°
484
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_06_success.mp4 (235 frames)
485
+ [Data Usage]6/10 success.
486
+ Start Recording!!!
487
+ Episode failed!
488
+ Stop Recording!!!
489
+ [pose] fork: pos=(0.385, -0.486, 0.050) yaw= -0.0°
490
+ [pose] knife: pos=(0.314, -0.241, 0.050) yaw=+180.0°
491
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_07_failed.mp4 (235 frames)
492
+ [Data Usage]7/10 fail.
493
+ Start Recording!!!
494
+ Episode failed!
495
+ Stop Recording!!!
496
+ [pose] fork: pos=(0.133, -0.028, 0.050) yaw= -0.0°
497
+ [pose] knife: pos=(0.130, -0.237, 0.050) yaw=+180.0°
498
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_08_failed.mp4 (235 frames)
499
+ [Data Usage]7/10 fail.
500
+ Start Recording!!!
501
+ Episode failed!
502
+ Stop Recording!!!
503
+ [pose] knife: pos=(0.350, -0.499, 0.050) yaw=+180.0°
504
+ [pose] fork: pos=(0.383, -0.364, 0.050) yaw= -0.0°
505
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_09_failed.mp4 (235 frames)
506
+ [Data Usage]7/10 fail.
507
+ Start Recording!!!
508
+ Episode failed!
509
+ Stop Recording!!!
510
+ Replayed all 10 episodes. Exiting the app.
511
+ [video] saved /workspace/aicapstone/fsm_experiments/exp_lift_v2/videos/ep_10_failed.mp4 (235 frames)
512
+ [Data Usage]7/10 fail.
513
+ /usr/lib/python3.11/multiprocessing/resource_tracker.py:254: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown
514
+ warnings.warn('resource_tracker: There appear to be %d '
515
+ Processing /home/threedavatar/Fran/ai-capstone26/aicapstone/fsm_experiments/exp_lift_v2/videos/...
516
+ concatenating 6 success videos → /home/threedavatar/Fran/ai-capstone26/aicapstone/fsm_experiments/exp_lift_v2/all_success.mp4
517
+ ✓ wrote /home/threedavatar/Fran/ai-capstone26/aicapstone/fsm_experiments/exp_lift_v2/all_success.mp4 (13M)
518
+ concatenating 4 failed videos → /home/threedavatar/Fran/ai-capstone26/aicapstone/fsm_experiments/exp_lift_v2/all_failed.mp4
519
+ ✓ wrote /home/threedavatar/Fran/ai-capstone26/aicapstone/fsm_experiments/exp_lift_v2/all_failed.mp4 (7.3M)
520
+ Done.
exp_lift_v2/videos/ep_01_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e903ff410cab8931be85d104db27fa5c3bbccba9cb3130a19123ae84b8f0f5c
3
+ size 2179080
exp_lift_v2/videos/ep_02_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:85a270aebc8a808cf2b9df3fee754c77412c72deffe755b67e0cea8b7ce117f0
3
+ size 2019042
exp_lift_v2/videos/ep_03_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e281dc15b1c7f430d7aa3cdaa746a6f494808a7f14197a4cde0c5ff503eb675c
3
+ size 2259098
exp_lift_v2/videos/ep_04_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed4d1ff6b014579185b05daddf0b524a1561229b21bee8cb985d5f6c780472da
3
+ size 2043375
exp_lift_v2/videos/ep_05_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ba9d883d288ecd7f8cd570bf2368d1ca71a514f84210b4e602fbb30f0edce23f
3
+ size 2074018
exp_lift_v2/videos/ep_06_success.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:515220817bc5312588d83165fa471e42dffc917dc6d91b7d40765e639f498387
3
+ size 2111710
exp_lift_v2/videos/ep_07_failed.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aa0a3ae1141c424cc33c8a34aa5e80742b5765371e65767d5c1b547819aa7d23
3
+ size 1729375
exp_lift_v2/videos/ep_08_failed.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:99fa8750eacd686e2fbfa1f5f0f92a9bde70426e8b19fa75f6ba967bb6fe598c
3
+ size 1971039
exp_lift_v2/videos/ep_09_failed.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f74b9824f97bd524a1cbac2add78eb78267af32913f01a91386779677f36693
3
+ size 2122893
exp_lift_v2/videos/ep_10_failed.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9006dcb4968bab8f6321b70cc448a9cebd7c1f715f44666e6def3d266ee57c3e
3
+ size 1774190