Workspace Memory
ATEC2026 L0 Task E
-
Scope:
- Current priority is L0 Task E tabletop manipulation in
$PROJECT_ROOT; do not switch to L1 unless the user asks. - 2026-06-07 Official website file upload submission records: XSA-ACT uploaded and online score achieved
6.00, build numberBUILD2001385_2038204482147323904_20260607142442_bae481, task “desk organization / Piper”, taking about00:11:22.62time. Theget_action_spec not foundwarning is not the reason for deduction; it has been eliminated withget_action_spec(self): return Noneindemo/solution_act.pyandsubmissions/task_e_xsa_act_20260607_upload/solution.py. The updatedsolution.pySHA256 isa08790e7512c914e5b78132303e1c6098c8aba3b01a373933e6ddc617fa3a485. - 2026-06-07 PCA/GraspGen-style submit branch re-test:
ATEC_PCA_OBJECTS=3,2,1, seed11,demo/solution_pca.pycompleted 5200 steps and achieved0.00, loglogs/pca_submit_eval/pca_submit_seed11_20260607.log, videologs/videos/task_e_pca_submit_eval/pca_submit_seed11_20260607.mp4. Failure phenomenon: RGB-D/PCA center estimation can be generated, but the actual position of submit-side IK/finger never catches up with the desired finger center, and object3/object2/object1 are not scored. Currently,solution_pca.pyshould not be considered for the ranking submission. - 2026-06-07/08 Two ACT seed2 checkpoint packages were prepared for online trial ranking; both have been slimmed down to inference checkpoints (about 64MB) and initialized via
AlgSolution():submissions/task_e_act_seed2_45000_20260607_upload, zip SHA2564b5d1178db3060883db4400f24eaa04b11b259a5179a220a7a622d7347ea2895,policy_act.ptSHA256d9badbf17b0f29000c4fb21c3a2a89f66f7450e3ec1cb7362e733f4a4a7a0cb2. Historical local seed11 achieved18, seed12 achieved0, online user results are12.00submissions/task_e_act_seed2_50000_20260607_upload, zip SHA2561d777cfa95ee40d92afafd70f5e3cbfd3ee6477f0b036ed9d459c94237858118,policy_act.ptSHA2568ac243e8427c54704a0445fa8f0321450618fa6c2d2d7296db027c9c5fe1e2c9. Historical local seed11 achieved15, seed12 achieved6, online user results are6.00. Both packages use the updatedsolution.pySHAa08790e...andIPython’sact/detr/transformer.pySHAfa290d.... Conclusion: seed2 checkpoint has high variance and cannot be considered a stable 18-point solution. - 2026-06-08 Preparation of the old ACT seed1 best “drawing candidate” submission package:
submissions/task_e_act_seed1_best_20260608_upload, zipsubmissions/task_e_act_seed1_best_20260608_upload.zip, zip SHA256e265ebe77b989a968cf4607ea70d4f3adc2322902538828b37fe84877f5b1391,policy_act.ptSHA256282614de9673dc01e229557448e380b6a02c196b5c3953cec77b2aebd2305a8e,solution.pySHA256a08790e7512c914e5b78132303e1c6098c8aba3b01a373933e6ddc617fa3a485. The source is the old seed1 best (original backup SHA76bbef2c81c85fc6cc60448476ff09075ec8bc97217c2d2fb70a3253fd3e307d), which has been slimmed down to onlynorm_stats,model_args,ema_agentand initialized viaAlgSolution(). Historical local independent run1 achieved18, run2/run3 achieved6, not yet submitted online; if users can try the ranking multiple times, this is the most valuable package among the currently packaged candidates for the next submission.
- Current priority is L0 Task E tabletop manipulation in
-
2026-07-19 Post-match open source archive: The model repository is
https://huggingface.co/Datawhale/atec2026-task-e-act-seed1-best, andpolicy_act.ptalong with the complete submission zip have been uploaded; the data/logging repository ishttps://huggingface.co/datasets/Datawhale/atec2026-task-e-reproducibility. The training data for reproduction uses filtered HDF5:datasets/atec_task_e_obj321_servo_100demos/trajectory_filtered.hdf5, approximately 33GiB in size, with SHA256 value4b85980e72b8e76261ad037bfba97b4795210e3f77cdb5b71479846b9230ac02; on HF, it is split intodata/final_100demos_filtered_split_100m/trajectory_filtered.hdf5.part-0000..0336with a size of 100MiB, along withRESTORE_FILTERED_DATASET.sh,SHA256_FILTERED_ORIGINAL.txt, andSHA256SUMS_FILTERED_SPLIT.txt. Uploading is performed using a temporary storage directory$DATA_ROOT/ATEC2026/hf_task_e_filtered_100mand the user serviceatec-task-e-hf-filtered-100m-upload.service, with an entry point$DATA_ROOT/ATEC2026/upload_task_e_filtered_100m_large_folder.py, and settingsHF_HUB_DISABLE_XET=1andupload_large_folder(num_workers=8)for breakpoint resume. On 2026-07-19, remote verification was completed: 337/337 fragments are complete,README.md,RESTORE_FILTERED_DATASET.sh, two SHA256 lists, andlogs/task_e_logs_20260520_20260609.tar.zstexist; the temporary storage directory can be cleared, but the originaltrajectory_filtered.hdf5remains intact unless confirmed by the user. -
2026-06-08 The user submitted
task_e_act_seed1_best_20260608_upload/policy_act.ptto the official website, resulting in an online submission15.00; due to limited opportunities for submissions/submissions on that day, the user stated that there is only one more submission opportunity. This result is better than XSA online6, seed2_45000 online12, and seed2_50000 online6, and currently represents the best online outcome. The last submission must have clear evidence of local performance exceeding 15; otherwise, do not use it. -
Risk assessment for the final attempt, 2026-06-08: Historical logs show that XSA final and seed2_50000 usually result in object_1 failing while object_2/object_3 are successful; seed2_45000 locally with seed11 results in all object_1/2/3 being successful but seed12 failing completely. Online
12indicates that the hidden evaluation still loses at least one object. For the PCA/GraspGen-style submit branch, current seed11 is0, and a complete GraspNet/AnyGrasp does not meet the short-term single-file stable submission criteria. Do not use the PCA/GraspNet approach with failed local submissions for the last attempt. -
Last attempt hybrid test, 2026-06-08: A solution
submissions/task_e_act_seed1_hybrid_obj1_pca_20260608_uploadwas developed. The idea is to first perform ACT seed1/XSA on the first two objects, then apply the object_1-only geometry remedy fromsolution_pca.py. Initialization fixes include copyingsolution_pca.pyand Piper URDFthird_party/Agilex-College/piper/handpose_det/models/modified_piper_without_camera.urdfinto the submission directory, and changing thesolution_pca.pyURDF search to prioritize the current submission directory. The result was failed: seed1-best hybrid seed11score=6.00, with only object_3 inside, as shown in videologs/videos/task_e_hybrid_eval/hybrid_obj1_pca_seed11_20260608.mp4; for XSA final hybrid, fixed ACT step 1320 followed by PCA resulted in seed11score=3.00, with object_1/2/3 not inside, as shown in videologs/videos/task_e_hybrid_eval/hybrid_xsa_fixed1320_obj1_pca_seed11_20260608.mp4.DO_NOT_SUBMIT.mdhas been added to the directory; do not use this hybrid package for the last online submission. -
On 2026-06-08 afternoon, continued efforts to achieve a negative score: new experimental files
demo/solution_hybrid_obj1_pca.py(only cut object_1 PCA aftercurrent_score>=15) anddemo/solution_dual_act.py(two sets of ACT synchronized observations, cut secondary policy after score threshold) have not yet been submitted as a proposal.logs/eval_task_e_hybrid_xsa_score15_obj1_pca_seed11_20260608.loggets0.00;logs/eval_task_e_hybrid_seed1best_score15_obj1_pca_seed12_20260608.loggets0.00;logs/eval_task_e_hybrid_seed1_95000_score15_obj1_pca_seed11_20260608.loggets0.00, with videologs/videos/task_e_hybrid_eval/hybrid_seed1_95000_score15_obj1_pca_seed11_20260608.mp4. For dual ACT:logs/eval_task_e_dualact_seed1best_seed2_45000_switch12_seed11_20260608.loggets0.00;logs/eval_task_e_dualact_seed1_95000_seed2_45000_switch12_seed11_20260608.logcuts the secondary policy inscore=15with primary_steps=900, but ultimately remains15.00, outside object_1 and inside object_2/3. Conclusion: The PCA/double ACT sequence after score=15 failed to include object_1 in the basket, so the last submission opportunity cannot be used. -
On 2026-06-08, continued efforts toward reaching 18 with hybrid policies:
runs/.../seed1/checkpoints/95000.pttrace seed11 shows step 300score=6, step 600score=12. Object_2/object_3 have been scored, while object_1 remains on the desktop; loglogs/trace_task_e_seed1_95000_seed11_20260608.log. Based on this, testedscore=12 + min_act_policy_steps=600cutting object_1 PCA:logs/eval_task_e_hybrid_seed1_95000_score12_step600_obj1_pca_seed11_20260608.logstill remains15.00, with object_1 finally outside(0.988,0.336,0.872), inside object_2/3; the old object_1 rescuelogs/eval_task_e_hybrid_seed1_95000_score12_step600_obj1_pca_rescue_seed11_20260608.logis returned to12.00and no hybrid switch occurs. ExplicitATEC_HYBRID_FORCE_ENV_STEPScounting and reasons for switching have been added todemo/solution_hybrid_obj1_pca.pyto avoid relying solely on ACT internal_ts/score callbacks; an experiment entry(ATEC_PCA_OBJ1_DIRECT_RESCUE=1) has been added todemo/solution_pca.py, and the obvious bug in_build_object1_drag_rescue()has been fixed: the old versionstart_y=TABLE_CENTER_Y+0.085missed from the front of the square when object_1 is aty≈0.26..0.34, now it dynamically generates lanes from the center y-side of the current square, with lane x also centered around the current detection center. Due to heavy machine GPU/Isaac concurrency from 16:15–16:45 on 2026-06-08, multiple force-env eval processes fail to progress to valid steps after Isaac starts, so they have been manually stopped; these new direct-rescue patches have not yet produced >15 local evidence and cannot be submitted. -
On 2026-06-08, seed1 checkpoint sweep: rough screening of seed11 for
runs/act-task-e-rgb-obj321-servo-100demos-seed1/checkpoints. Results:35000=0,45000=12,50000=0,55000=6,65000=0,70000=0,75000=6,80000=6,90000=9,95000=15,best_loss=0, corresponding logs:logs/eval_task_e_seed1_*_20260608_sweep*.log. Extended testing for95000.pt: seed126, seed136, thus 95000 is not a more stable alternative to the online seed1-best 15. The current best remains the onlinetask_e_act_seed1_best_20260608_uploadwith15.00, and neither 95000 nor dual/hybrid should be submitted. -
On 2026-06-04, Chinese handover documentation has been organized:
docs/ATEC2026_TaskE_规则物理配置与提交说明_20260604.md; official README snapshots have been downloaded todocs/sources/ATEC2026_Simulation_Challenge_official_readme_20260604.md. Documentation conclusion: Currently, the officialATEC-TaskE-Piper/ Isaac Lab v2.3.2 environment is used, with Piper solver, object mass, and friction/contact parameters sourced from local official source code; the banana sliding issue resembles problems with the two-finger gripper contact and submit-side primitive, and cannot be submitted by modifying the judge physics; physical enhancements are only suitable for diagnosis. -
2026-06-04 fresh clone official repository pushed to
/tmp/ATEC2026_Simulation_Challenge_official_check, HEAD isdbe7c251f680b02f357a6db67430b18d3ba45ea1. Verification results:piper.py,object.py, Task Eterrain.py,rewards.py, andterminations.pymatch the local SHA exactly;task_e/env_cfg.pyonly differs in the action group field name, while the logic for objects/cages/cameras/Y-band/physics material remains consistent. The latest official version addsdemo/server.py’s/get_action_specand custom action examples, which are optional customizations to the action interface but do not allow modification of the judge physics. -
2026-06-04 again pushed the official repository to
git fetch origin, whileorigin/mainremains atdbe7c25with no new commits. Checking GitHub issues/PRs: no public issue mentions Task E/Piper/grasp/physics/friction/banana falling;Pipertargets PR #2 eye-in-hand camera for B2Piper/B2WPiper/G1, not Task E Piper; PR #5 is a participant action spec, and PR #8 is Tron2A joint configuration. A unique low-risk compatibility fix has been synchronized: adding the official/get_action_specendpoint to the localdemo/server.py; if the solution lacks this method,{}is returned, maintaining the default action config. -
The official Task E robot is
ATEC-TaskE-Piper; the newerTron2AWheel/Tron2ALeggedmodels are not relevant for this tabletop task. -
Debugging review summary, 2026-05-30:
- Current conclusion: the deployable baseline is still XSA-ACT’s
demo/policy_act.pt, SHA256 isc3eacae3f1b0ec8ccde9fdc05d680fff119cc2ca70e1f79e4ddd5610c4bbfa93. It is not a perfect stable solution, but local evidence remains stronger than seed2 ACT, GraspNet/SAM3 direct control, and pi0.5/OpenPI branch. Do not use the current checkpoint of pi0.5 to overridedemo/policy_act.pt. - Robot/task identity: Task E uses
ATEC-TaskE-Piper, local env registration is insource/atec_rl_lab/atec_rl_lab/tasks/task_e/__init__.py, Piper configuration comes fromTaskEEnvPiperCfg/PIPER_CFG. PiPER is part of the AgileX/Songling robotic arm series; this task is a desktop-level fixed Piper, not a L1 Tron/Unitree wheeled/foot robot. - Data generation mainline: the official/initial scripted oracle is relatively available for object_3, but object_1/object_2 fail. The root cause is not the camera, but rather mismatches in USD/root geometry center, Piper gripper TCP, actual contact geometry of the gripper, and transport/placement primitives. Finally, three object
3 2 1success data were generated using per-object calibrated primitives and closed loop servos. The core data directory isdatasets/atec_task_e_obj321_servo_100demos, and after filtering, HDF5 isdatasets/atec_task_e_obj321_servo_100demos/trajectory_filtered.hdf5. - ACT seed1 mainline: after training ordinary ACT with the above 100 demos, the first evaluation failure was
demo/solution_act.pydue to misunderstanding of the home action: Task E action is(joint_target - default_joint_pos) / 0.5, not speed/PD delta. After fixing the home action, ordinary ACT can achieve partial success, butbest_loss.pt/final.ptare unstable, and training loss has little relation to task success rate. The old seed1 best has been backed up asdemo/policy_act.seed1_best_backup_20260522_012719.pt. - XSA-ACT mainline: the user-provided
xsa_update_20260520/lerobot_policy_act_xsa.zipis the LeRobotact_xsaplugin, and the original example cannot be directly run with ATEC 8D Piper.source/atec_rl_lab/atec_rl_lab/train/act/act/detr/transformer.pyanddemo/act/detr/transformer.pyhave added--use_xsaadaptation;scripts/act/train_task_e.pysavesmodel_args, anddemo/solution_act.pycan automatically loaduse_xsabased on checkpoint. XSA final directly independent evaluation of seeds11/12/13once achieved15/15/15, with logslogs/eval_task_e_xsa_final_seed11_recheck.log,logs/eval_task_e_xsa_final_seed12_recheck.log, andlogs/eval_task_e_xsa_final_seed13_recheck.log; however, post-deployment review revealed contact/non-deterministic fluctuations in seed119and seed120. It remains the strongest deployable baseline currently.
- Current conclusion: the deployable baseline is still XSA-ACT’s
-
ACT gripper/resume main line: seed2 is trained from scratch with resume support. Related changes are in
scripts/act/train_task_e.pyandscripts/act/run_task_e_pipeline.sh. It supports--resume_checkpoint/--resume_iter,RESUME_CHECKPOINT/RESUME_ITER, and preserves optimizer/scheduler/EMA. During seed2 training, there are local snapshots that appear to yield high scores, such as45000.ptwith seed1118, but0with seed12; ultimatelyfinal.ptwith seed110, andbest_loss.ptwith seed119. Conclusion: seed2 should not be deployed, and high scores from a single seed should not be regarded as reliable evidence. -
GraspNet/TunTunClaw main line: The OpenClaw/Datawhale TunTunClaw reference provided by users has been received in
third_party/tuntunclaw/. The GraspNet checkpoint isthird_party/tuntunclaw/temp/logs/log_rs/checkpoint-rs.tar; the bridging scripts arescripts/graspnet_task_e/tuntun_adapter.pyandscripts/graspnet_task_e/run_graspnet_pick.py. Dependencies are connected under$HOME/envs/genmanip-isaac5-py311/bin/python, includingopen3d==0.19.0, localgraspnetAPI,transforms3d==0.4.2, and thepointnet2CUDA extension for BlackwellTORCH_CUDA_ARCH_LIST=12.0. GraspNet can provide candidates, but raw candidates cannot directly solve real Isaac interactions; object_3 can succeed through SAM3/GraspNet+ real finger/staged transport, while object_1/object_2 still slip/overstep during transportation and cannot serve as the final controller. -
SAM3 main line: The SAM3 checkpoint is located in
$HOME/Documents/01Proj/sam3d_gs/submodule/Prompt-Inpaint/checkpoints/sam3.pt, and independent Python is in$HOME/Documents/01Proj/sam3d_gs/.venv/bin/python. Do not install it into the Isaac environment. Newscripts/graspnet_task_e/sam3_segment_image.pyis added for RGB prompt segmentation;run_graspnet_pick.pysupports--mask_provider sam3,--sam3_prompt, and--basket_center_release. Important conclusion: SAM3 segmentation is not the main bottleneck; masks for object_1/2/3 can all be generated correctly; early failures were due to incorrect selection of multiple candidates’ masks, which was later fixed by world-band/RGB-D point filtering. The real bottleneck is Piper gripper slipping during contact and transportation. -
GraspNet/SAM3 placement rules: The user’s suggestion of “above the target center point, stabilize before releasing the gripper” is correct. Parameters such as transport-end logging, short stabilization hold,
--release_z,--basket_xy_tol,--basket_hold_steps,--basket_stable_steps,--basket_recovery_steps,--staged_transport, and--transport_servo_fractionhave been added. Experience: Do not hold for a long time at high altitude, as the object will slip/bounce; short stabilization hold is better for object_3. Object_1/object_2 are still unstable, and simply adjusting the gripper release timing is insufficient; the grasp/contact primitive needs to be redesigned. -
pi0.5/OpenPI main line: The OpenPI repo is
$HOME/src/openpi-ebench-clean, the environment is$HOME/envs/openpi-pi05, and the general checkpoint is$HOME/projects/robotics_shared/checkpoints/openpi/pi05-ebench-generalist/pi05_generalist/params.HF_LEROBOT_HOME=$HOME/projects/robotics_shared/datasets/lerobot,HF_HOME=$HOME/projects/robotics_shared/hf_cache, andPYTHONPATH=$HOME/src/openpi-ebench-clean/src:$HOME/src/openpi-ebench-clean/packages/openpi-client/srcmust be set. Do not useuv runin the OpenPI repo, as it will create a huge.venvand cause redundant downloads. -
pi0.5 data conversion:
scripts/pi05/convert_task_e_hdf5_to_lerobot.pymaps the 8D qpos/action from ATEC HDF5 to the OpenPI fixed-base 16D padded format:state/action.joints[:6]corresponds to Piper’s 6 arm joints,state/action.gripper[:2]corresponds to two gripper joints, and zeros are filled for the rest; the three-channel cameraoverlook/left/rightis temporarily written as a single 224x224 RGB image. The official dataset is$HOME/projects/robotics_shared/datasets/lerobot/atec/task_e_obj321_servo_100demos_s5_224, approximately 4.7G in size, with stride=5 and fps=10. -
pi0.5 key action constraints: The
actionsin ATEC HDF5 is already the environment action(joint_target - default_joint_pos) / 0.5, not the absolute qpos. Therefore, all ATEC OpenPI configurations must beextra_delta_transform=False. If the OpenPI default delta transform is used, the state will be reduced again, causing misalignment in training objectives.- pi0.5 training results: 20-demo fast branch
pi05_atec_task_e_20demos_s5_2242k step in seeds11/12/13Full0, the checkpoint has been deleted, only the content is retainedlogs/pi05_eval_20260522074137And the videologs/videos/task_e_pi05_eval/pi05_pi05_atec_task_e_20demos_s5_224_seed11_20260522074137.mp4. 100-demo official branchpi05_atec_task_e_s5_224Train 29999 steps, checkpoint.../pi05_atec_task_e_s5_224/atec_task_e_pi05_s5_224_30k_20260522065716/29999Approximately 42G, evaluationlogs/pi05_eval_20260522112701:seed110,seed120,seed136,mean2.0, videologs/videos/task_e_pi05_eval/pi05_pi05_atec_task_e_s5_224_seed11_20260522112701.mp4. Conclusion: The pi0.5 current branch is not deployed. - Analysis of pi0.5 failure reasons: This is not direct evidence that the “pi0.5 model is weak”, but rather that the adaptation layer is likely incorrect. The current bridge forces the ATEC Piper 8D action into OpenPI EBench fixed-base 16D, uses the same image for all three cameras, employs coarse-grained prompts, the data follows a scripted oracle style, and the evaluation parameters max_steps=1500/action_repeat=5 are not fully equivalent to ACT 1800-step trajectories. Another strong suspect is the OpenPI loader log
discrete_state_input=True, and the public experience of Piper pi0.5 posttrain is mentioneddiscrete_state_input=FalseAvoids state token saturation under z-score norm. If pi0.5 is continued, prioritize using native Piper/OpenPI config, check q01/q99/norm stats, and trydiscrete_state_input=False, and consider trying pi0 instead of pi0.5 first.
- pi0.5 training results: 20-demo fast branch
-
Addition of verification for the old branch pi0.5, 2026-06-08: Already reviewed
scripts/pi05/convert_task_e_hdf5_to_lerobot.py、demo/solution_pi05.py、OpenPIconfig.pyAndlogs/pi05_train_task_e_s5_224_20260522065716.log. The old converter converts the 8D Piper pad into EBench fixed-base12 joints + 4 gripper, where the real arm is in0:6, real gripper in12:14The remaining 8 valid EBench dimensions are all 0; thenPadStatesAndActions(model_action_dim=32)Pad to 32D again. Confirm the training log.TokenizePrompt(... discrete_state_input=True), and three-channel imageshead/hand_left/hand_rightIt is all the same 224 RGB image. The HDF5 raw data has no NaN/Inf values, and the action is indeed the environment action, not absolute qpos;extra_delta_transform=FalseCorrect. Evaluationlogs/pi05_eval_20260522112701The seed11/12 three objects basically remain on the original y-axis surface of the table. For seed13, only object_1 is scored into the basket. The main issues appear to be in the embodiment/action-time bridge and input distribution problems, rather than simply “grasping and sliding”. Recommended restart: keep pi0.5 generalist.action_dim=32To be compatible with pre-trained weights, but adding ATEC-native transform. The real 8D state/action is placed in the first 8 dimensions and only the first 8 dimensions are output; setPi0Config(pi05=True, action_horizon=50, discrete_state_input=False); Use a single camera real mask or multiple real cameras, do not use fake three paths; first set stride=1 or action_repeat=1/2, save 1k/2k/5k/10k/15k multiple checkpoints for fixed-seed eval, then decide whether to perform long training. -
pi0.5 native8 restart branch, 2026-06-08: new additions
scripts/pi05/convert_task_e_hdf5_to_lerobot_native8.py、demo/solution_pi05_native8.py、OpenPI transform$HOME/src/openpi-ebench-clean/src/openpi/policies/atec_piper_policy.py, as well as configspi05_atec_task_e_native8_20demos_s1_224/pi05_atec_task_e_native8_100demos_s1_224. Design intention: Input real 8D qpos, output real 8D env action. The model still pads to 32D internally to be compatible with pi0.5 weights; only usevideo.base_camera_viewReal images throughout; zero images are used for left/right wrists, andimage_mask=False;discrete_state_input=False;stride=1/action_repeat=1, to avoid damaging the grasping timing caused by the old stride=5. Script path:scripts/pi05/run_pi05_native8_20demos_smoke.sh、scripts/pi05/run_pi05_native8_100demos_prepare.sh、scripts/pi05/run_pi05_native8_eval_checkpoint.sh。Due to the root disk/Only about 68G remains. The LeRobot data and OpenPI assets/checkpoints for native8 must be written down.$DATA4_ROOT/01Proj/13atec/...; Do not write the new 42G checkpoint again$HOME/projects/...。 -
pi0.5 native8 is currently running, 2026-06-08 22:30 CST: The old
atec-pi05-native8-20demo-smoke-20260608222155.servicewas actively stopped due to slow image synchronization;atec-pi05-native8-20demo-smoke-20260608222519.servicewas also stopped because the stride=1 conversion takes approximately 1.5–2 hours, making it unsuitable for the adapter inspection. The converter has been defaulted toimage_writer_processes=5,image_writer_threads=10. Currently, the fast gating user unitatec-pi05-native8-20demo-s2-smoke-20260608223030.serviceis being started, executing 20-demo native8 stride=2 smoke (conversion -> norm stats -> 3k training -> automatic evaluation of seeds 11/12/13), with log prefixeslogs/pi05_native8_convert_20demos_s2_224_*,logs/pi05_native8_norm_20demos_s2_224_*,logs/pi05_native8_train_20demos_s2_224_*,logs/pi05_native8_eval_20demos_s2_224_*, and data directory$DATA4_ROOT/01Proj/13atec/robotics_shared/datasets/lerobot/atec/task_e_obj321_servo_20demos_native8_s2_224. This branch is for adapter inspection only and is not a candidate for submission; evaluation usesCONFIG=pi05_atec_task_e_native8_20demos_s2_224 ACTION_REPEAT=2 scripts/pi05/run_pi05_native8_eval_checkpoint.sh <ckpt>. Only when seeds11/12/13are evaluated locally and show significantly better results than those obtained online via15.00, will the last official submission opportunity be used. -
pi0.5 native8 quick sanity check, 2026-06-08 22:39 CST: The 20-demo s2 conversion still takes about 50 minutes, so
atec-pi05-native8-20demo-s2-smoke-20260608223030.servicewas actively stopped first.pi05_atec_task_e_native8_4demos_s2_224,scripts/pi05/run_pi05_native8_4demos_s2_sanity.shwere added, andatec-pi05-native8-4demo-s2-sanity-20260608223911.servicewas started. This branch uses only 4 demos, stride=2, 1k steps; after training, automaticACTION_REPEAT=2evaluation of seeds 11/12/13 is performed. The goal is simply to quickly confirm whether the native8 action bridge / OpenPI websocket / Isaac rollout can move the robotic arm toward the target, not to determine the final score. If the sanity video shows no movement or random motion, fix the bridge/norm first; if the motion direction is correct, then resume 20-demo/100-demo. -
pi0.5 native8 sanity results, 2026-06-08 23:15 CST: 4-demo s2 training is completed, and the loss has dropped from
0.5766to approximately0.0405. However, all seeds11/12/13have scores of0.00, with videologs/videos/task_e_pi05_native8_eval/pi05_native8_pi05_atec_task_e_native8_4demos_s2_224_seed11_20260608231046.mp4and montagelogs/videos/task_e_pi05_native8_eval/pi05_native8_4demo_s2_seed11_montage_20260608231046.jpg. The video shows the robotic arm basically stationary near the home position; an offline action probe uses checkpoint999to推理 training frames, and the output is not entirely zero (the multi-dimensional motion amplitude is approximately 1–3), indicating that websocket/unnormalize works well, but the 4 data points are too few and the trajectory has not been generalized, so it cannot serve as a submission basis. This 4-demo checkpoint accounts for83Gand is worthless, thus it has been deleted; logs, data, and video are retained. -
pi0.5 native8 current gating operation, 2026-06-08 23:19 CST: The
save_interval/keep_periodin native8 configs has been changed to only save the final version, to avoid the 40GB intermediate checkpoint slowing down training. The 20-demo s2 user unitatec-pi05-native8-20demo-s2-smoke-20260608231948.servicewas restarted, and scriptscripts/pi05/run_pi05_native8_20demos_s2_smoke.shwill convert 20 demos stride=2 -> norm stats -> 3k train -> automatically performACTION_REPEAT=2evaluation of seeds 11/12/13. If the score remains0/0/0or the video still stops near home, do not add more data at this time; first fix action timing/home gate/bridge. If there is clear movement and non-zero scores, then run 100-demo native8. -
pi0.5 native8 20-demo s2 results, 2026-06-09 00:42 CST:
pi05_atec_task_e_native8_20demos_s2_224Training completed with 3k samples, loss minimized at approximately0.0188, checkpoint$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/checkpoints/pi05_atec_task_e_native8_20demos_s2_224/atec_task_e_pi05_native8_20demos_s2_224_3k_20260608231948/2999. Evaluation logslogs/pi05_native8_eval_20260609003633/ summarylogs/pi05_native8_eval_20demos_s2_224_20260608231948.log, seeds11/12/13scores6/0/0, mean2.00; for seed11, only object_3 was scored, videologs/videos/task_e_pi05_native8_eval/pi05_native8_pi05_atec_task_e_native8_20demos_s2_224_seed11_20260609003633.mp4. Conclusion: native8 bridge can produce some effective policies, but 20 data points are insufficient to exceed online performance15.00, thus not to be submitted. -
pi0.5 native8 100-demo s2 gating, 2026-06-09 00:46 CST: New OpenPI config added
pi05_atec_task_e_native8_100demos_s2_224(100 demos, stride=2/fps=25,discrete_state_input=False, 10k step, final-only checkpoint, assets/checkpoints in$DATA4_ROOT/01Proj/13atec/openpi_atec_runs) and scriptscripts/pi05/run_pi05_native8_100demos_s2_gate.sh. User unitatec-pi05-native8-100demo-s2-gate-20260609004546.servicehas been started, workflow: conversiontrajectory_filtered.hdf5-> norm stats -> 10k train ->ACTION_REPEAT=2 PORT=8023, evaluating seeds11/12/13. Log prefixes:logs/pi05_native8_convert_100demos_s2_224_20260609004546.log,logs/pi05_native8_norm_100demos_s2_224_20260609004546.log,logs/pi05_native8_train_100demos_s2_224_20260609004546.log,logs/pi05_native8_eval_100demos_s2_224_20260609004546.log. Only when local multi-seeds significantly exceed online performance15.00is the last official submission considered. -
pi0.5 native8 100-demo s2 results, 2026-06-09 05:49 CST: Conversion completed
100episodes /84877frames, data directory$DATA4_ROOT/01Proj/13atec/robotics_shared/datasets/lerobot/atec/task_e_obj321_servo_100demos_native8_s2_224approximately3.9G; norm stats written in$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/assets/pi05_atec_task_e_native8_100demos_s2_224/atec/task_e_obj321_servo_100demos_native8_s2_224. 10k training completed, checkpoint$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/checkpoints/pi05_atec_task_e_native8_100demos_s2_224/atec_task_e_pi05_native8_100demos_s2_224_10k_20260609004546/9999approximately42G; loss decreased from0.4456to approximately0.009-0.013at the end, but task evaluation is poor. Evaluation logslogs/pi05_native8_eval_20260609054339/ summarylogs/pi05_native8_eval_100demos_s2_224_20260609004546.log, seeds11/12/13scores3/0/0, mean1.00, none of the three objects scored; video for seed11logs/videos/task_e_pi05_native8_eval/pi05_native8_pi05_atec_task_e_native8_100demos_s2_224_seed11_20260609054339.mp4. Conclusion: this full 100-demo native8-s2 branch should not be submitted, nor should it use the last official submission opportunity; online15.00ACT seed1 best remains the protected best. -
pi0.5 native8 LoRA entry/startup, 2026-06-09 09:51 CST: Based on the experience of the third-party Pantheon Piper pi0.5 LoRA (119 Piper single-arm episodes,
discrete_state_input=False, 7500 steps, peak LR5e-5, LoRA preserving prior knowledge), the OpenPI configpi05_atec_task_e_native8_100demos_s2_224_lorahas been modified to be a true LoRA gatekeeping mechanism:paligemma_variant="gemma_2b_lora",action_expert_variant="gemma_300m_lora", explicitfreeze_filter=Pi0Config(...).get_freeze_filter(),num_train_steps=7500,peak_lr=5e-5,ema_decay=None,discrete_state_input=False. Currently, the local$HOME/projects/robotics_shared/checkpoints/openpi/pi05-ebench-generalist/pi05_generalist/paramsis still used as the weight loader, as no localpi05_basedirectory was found; this is not exactly the same as Pantheon’s “pi05_base no warm-start”. If this branch fails, the next step is to download/verify thegs://openpi-assets/checkpoints/pi05_base/paramsbranch. A new scriptscripts/pi05/run_pi05_native8_100demos_s2_lora_gate.shhas been added, reusing the converted data$DATA4_ROOT/01Proj/13atec/robotics_shared/datasets/lerobot/atec/task_e_obj321_servo_100demos_native8_s2_224and existing norm stats without redundant conversion. The user unitatec-pi05-native8-100demo-s2-lora-gate-20260609095114.servicehas been started, training logslogs/pi05_native8_lora_train_100demos_s2_224_20260609095114.log, service outer logslogs/atec-pi05-native8-100demo-s2-lora-gate-20260609095114.service.log, checkpoint root directory$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/checkpoints/pi05_atec_task_e_native8_100demos_s2_224_lora, and automaticACTION_REPEAT=2 PORT=8024evaluation of seeds after training11/12/13have been carried out. The threshold remains unchanged: only when the local multi-seed significantly exceeds the existing online15.00, the last official submission opportunity will be considered; otherwise, the ACT seed1 best is preserved. -
pi0.5 native8 LoRA results, 2026-06-09 10:16 CST:
atec-pi05-native8-100demo-s2-lora-gate-20260609095114.servicehas been completed. The training ended normally after 7500 steps, with the loss decreasing from0.4452to approximately0.013-0.019at the end, and the final checkpoint$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/checkpoints/pi05_atec_task_e_native8_100demos_s2_224_lora/atec_task_e_pi05_native8_100demos_s2_224_lora_7500_20260609095114/7499is around8.6G. Automatic evaluationACTION_REPEAT=2, logslogs/pi05_native8_lora_eval_100demos_s2_224_20260609095114.log/logs/pi05_native8_eval_20260609101354, all seeds 11/12/13 are0.00, and none of the three objects were scored; video for seed11 islogs/videos/task_e_pi05_native8_eval/pi05_native8_pi05_atec_task_e_native8_100demos_s2_224_lora_seed11_20260609101354.mp4. Conclusion: Although referring to Pantheon’s LR/steps/discrete_state_input=False/LoRA freeze still results in failure, it indicates that the current OpenPI native8 bridge/data distribution/action timing issues are not resolved by LoRA. This LoRA should not be submitted, and the last official submission opportunity should not be used. The temporary heartbeatatec-pi0-5-native8-lora-gate-monitorhas been removed.- Pi0.5 LoRA troubleshooting, 2026-06-09 10:30 CST: After checking the web page and OpenPI issue #672 and Pantheon cards, the current LoRA configuration is…
freeze_filter、ema_decay=None、discrete_state_input=FalseCorrect;num_steps=10/25/50Offline sampling does not significantly improve the training frame error, indicating that it is not simply due to too few ODE sampling steps. Addeddemo/solution_pi05_native8.pyEnvironment variablesATEC_PI05_CHUNK_EXEC_STEPS(Default is still 50, which does not affect the old behavior), testATEC_PI05_CHUNK_EXEC_STEPS=5seed11 still0.00, videologs/videos/task_e_pi05_native8_eval/pi05_native8_lora_chunk5_seed11.mp4The explanation is also not simple; a 50-step open loop is too long. A stronger cause: the current training data for pi0.5 comes fromtrajectory_filtered.hdf5, this file is composed ofscripts/act/filter_demos.pyDelete the static/hold step, 100 demos from749560Frame pressed to169700Frame, approximately removed77%; Unfiltered data qpos diff p501.5e-5, after filtering, qpos diff p500.00936、max0.419This will disrupt the real-time semantics of the OpenPI/pi0.5 50-step action chunk. Another issue: the state is absolutely qpos, but the action is an ATEC environment action.(target-default)/0.5, which is inconsistent with the common “joint-position action” semantics seen in publicly available Piper LeRobot data; the subsequent pi0.5 should be preferentially changed to unfiltered data + absolute joint target action, and then transformed back into env action via the output transform.
- Pi0.5 LoRA troubleshooting, 2026-06-09 10:30 CST: After checking the web page and OpenPI issue #672 and Pantheon cards, the current LoRA configuration is…
-
pi0.5 rawabs/action-expert investigation, 2026-06-09 12:30 CST: The raw unfiltered + absolute target action has been implemented according to the previous suggestion. Key change:
scripts/pi05/convert_task_e_hdf5_to_lerobot_native8.pySupported--action_mode absolute_targetAnd--max_frames_per_episode;$HOME/src/openpi-ebench-clean/src/openpi/policies/atec_piper_policy.pySupportedAtecPiperOutputs(action_mode="absolute_target")During reasoning, convert the model’s absolute joint target back to ATEC env action;demo/solution_pi05_native8.pyDefaultATEC_PI05_CHUNK_EXEC_STEPS=10, and add optional optionsATEC_PI05_ZERO_NOISE=1/ATEC_PI05_ACTION_HORIZON。1-demo dataset is$DATA4_ROOT/01Proj/13atec/robotics_shared/datasets/lerobot/atec/task_e_obj321_servo_rawabs_1demo_native8_s10_224(rawtrajectory.hdf5, 1 episode, stride=10, 250 frames, absolute target action). -
pi0.5 rawabs results, 2026-06-09: new configs added
pi05_atec_task_e_native8_rawabs_1demo_s10_224_lora_base_h10_2k、..._aefull_h10_2k、..._aefull_h10_10k_lr5And scriptscripts/pi05/run_pi05_native8_rawabs_1demo_s10_aefull_h10_10k_lr5.sh。aefull_h10_10k_lr5From localpi05_base/paramsStart, only train action expert/action heads/time MLP.discrete_state_input=False、horizon=10、LR5e-5、EMA off;checkpoint$DATA4_ROOT/01Proj/13atec/openpi_atec_runs/checkpoints/pi05_atec_task_e_native8_rawabs_1demo_s10_224_aefull_h10_10k_lr5/atec_task_e_pi05_native8_rawabs_1demo_s10_224_aefull_h10_10k_lr5_202606091220_aefull_h10_10k_lr5/9999About8.8G。Offline probe from 2k mean first/chunk L21.51/1.65Improved to 10k0.28/1.10; Fix the zero noise approximately0.22/0.87, but the chunk is still unstable. Tested with Isaac Seed11:CHUNK_EXEC_STEPS=1Get0.00(Video)logs/videos/task_e_pi05_native8_eval/pi05_native8_pi05_atec_task_e_native8_rawabs_1demo_s10_224_aefull_h10_10k_lr5_seed11_20260609122037.mp4),CHUNK_EXEC_STEPS=10Get0.00(Video)..._20260609122341.mp4,montage..._20260609122341.montage.jpg),CHUNK_EXEC_STEPS=10 + ATEC_PI05_ZERO_NOISE=1Still0.00(Log)logs/pi05_native8_eval_20260609122748). Conclusion: The OpenPI server, unnormalize, and env action scale have been verified to execute, but the policy lacks a continuous phase near the home/high-level observation area. The action exhibits jitter between the home and mid-trajectory, preventing effective pick/place operations; this pi0.5 rawabs branch should still not be submitted as the final candidate on the official website. -
pi0.5 data policy, 2026-06-08/09: Do not add GraspGen/PCA data for now. Reason: The main issue with the old pi0.5 is the embodiment/action-time bridge. If the native8 videos remain unchanged, adding data will only exacerbate errors. The 20-demo native8 s2 already provides seed11.
6, so currently we run the 100-demo stride=2 gateing, which is faster than stride=1 and preserves the grasping sequence. Only when 100-demo native8 s2 is still below 15 will data be added: LoRA/small adapter target50-150High-quality real observation-action demo; full/continued fine-tuning targets300-500Lines, covering object_1/2/3, with different initial positions and grasping orders. GrabGen/PCA can only serve as a data generator for oracle/candidate generators; the final training data must be competition observations and valid 8D env actions, and cannot rely on oracle object pose for submission reasoning. -
pi0.5 evaluation tool:
demo/solution_pi05.pyIt is a websocket bridge;scripts/pi05/eval_task_e_pi05.pyIt is the Isaac evaluation entry point;scripts/pi05/run_pi05_eval_checkpoint.sh <checkpoint>Will startscripts/serve_policy.py, run seeds11/12/13Record a video with seed11;scripts/pi05/summarize_pi05_eval.pySummary score;scripts/pi05/compare_pi05_vs_act_baseline.pyCompare with XSA baseline and printHOLD_ACT_XSAOrREVIEW_FOR_DEPLOYThe 100-demo branch has been automatically output.HOLD_ACT_XSA。- Next steps for AnyGrasp: AnyGrasp/AnyGrasp SDK is worth trying as a short-term engineering solution, but it is not a “100% one-click solution” that directly replaces the entire policy. The recommended approach is: use SAM3/task prior mask to define the target point cloud region, generate 6D grasp pose and collision-free candidates with AnyGrasp, then integrate IK/trajectory planning from ATEC Piper, real finger center contact, and short-term stabilization basket-center release. Prioritize verifying object_3 first, followed by object_1 and object_2; strictly avoid using the oracle object pose/mask for the final submission. Additional checks are required for AnyGrasp license, source of model weights, and competition reproduction review materials.
- AnyGrasp configuration attempts, 2026-05-30: The official SDK has been cloned.
third_party/anygrasp_sdk; Python 3.11 binary has been placed asthird_party/anygrasp_sdk/grasp_detection/gsnet.soAndthird_party/anygrasp_sdk/grasp_detection/lib_cxx.so. Isaac/Training Python is$HOME/envs/genmanip-isaac5-py311/bin/python, environmental observation is in Python3.11.15、torch2.7.0+cu128、CUDA runtime12.8、GPUNVIDIA RTX PRO 6000 Blackwell Workstation,open3d==0.19.0、graspnetAPI==1.2.11Available,pointnet2._extMust be done firstimport torchImport again later. SDK dependencieslibcrypto.so.1.1Currently, it is solved temporarily using the OpenSSL 1.1 library built into the Isaac ROS2 bridge:$HOME/projects/manipdojo2026/micromamba/envs/genmanip-sim/lib/python3.10/site-packages/isaacsim/exts/omni.isaac.ros2_bridge/humble/lib, it must be placed inside during executionLD_LIBRARY_PATH。 - AnyGrasp license/weight history blockage, on 2026-05-30, removed on 2026-06-03: The official SDK is an authorized binary.
license_checker -fNeedifconfig; This machine has no system.ifconfig, with compatible packaging addedtools/anygrasp/ifconfig. The current machine feature id is9024425463046318996. Not received yet on 2026-05-30licenseCfg.jsonAndcheckpoint_detection.tarAt that time, it could not be claimed that AnyGrasp was able to run ATEC grasping; on 2026-06-03, the license/weight was received and installed, as shown in the below smoke record. - AnyGrasp MinkowskiEngine is installed, 2026-05-30: Official modified
MinkowskiEngineCloned tothird_party/anygrasp_sdk/dependencies/MinkowskiEngine, branchcuda-12-1. The system only has GCC/G++.13.3.0, will trigger CUDA 12.8std::__to_addressAmbiguity; new isolation compiler prefix created$HOME/envs/anygrasp-gcc11, containing conda-forge GCC/G++11.4.0, and only patch the private header files for this prefix$HOME/envs/anygrasp-gcc11/lib/gcc/x86_64-conda-linux-gnu/11.4.0/include/c++/bits/shared_ptr_base.h, keep the two placesauto __raw = __to_address(__r.get());Change toauto __raw = std::__to_address(__r.get());, no system modification/usr/include. The system lacks a BLAS devel symlink; the link in the created project must be retainedthird_party/anygrasp_sdk/dependencies/blas_lib/libblas.so -> /usr/lib/x86_64-linux-gnu/blas/libblas.so.3, and use the local versionthird_party/anygrasp_sdk/dependencies/blas_include/cblas.hHeader file. Key points for the successful compilation command:CUDA_HOME=/usr/local/cuda-12.8、TORCH_CUDA_ARCH_LIST=12.0、MAX_JOBS=4、CC/CXX/CUDAHOSTCXXPoint to$HOME/envs/anygrasp-gcc11/bin/x86_64-conda-linux-gnu-gcc/g++,--blas_include_dirs=third_party/anygrasp_sdk/dependencies/blas_include,--blas_library_dirs=third_party/anygrasp_sdk/dependencies/blas_lib. After installation$HOME/envs/genmanip-isaac5-py311/bin/pythonImportableMinkowskiEngine 0.5.4。 - AnyGrasp local inspection entry:
tools/anygrasp/check_anygrasp_env.shIt will be set upPATH/LD_LIBRARY_PATH, check SDK files, torch/CUDA, Open3D, GraspNetAPI, pointnet2, MinkowskiEngine, feature id, and checkpoint gaps. Review results on 2026-05-30:gsnet.so、lib_cxx.so、open3d 0.19.0、graspnetAPI 1.2.11、pointnet2._ext、MinkowskiEngine 0.5.4All OK; still missing official versionlicenseCfg.jsonandcheckpoint_detection.tar/AnyGrasp Weight. - AnyGrasp license/weight installation script, 2026-05-30: Obtain the official license zip and
checkpoint_detection.tarAfter that, runtools/anygrasp/install_license_and_checkpoint.sh <license_zip_or_dir> <checkpoint_detection.tar>; it will install the licensethird_party/anygrasp_sdk/grasp_detection/licenseAndthird_party/anygrasp_sdk/grasp_tracking/license, place the weights inthird_party/anygrasp_sdk/grasp_detection/log/checkpoint_detection.tar, and call itlicense_checker -cVerification. After installation, usetools/anygrasp/run_detection_demo.shRun the official example data detection demo; this script has been verified to report an error quickly when the license is missing, and will not skip half of the process by mistake. - The AnyGrasp license/windowing factor is in place and the script runs successfully. On June 3, 2026: The user received an email from Chenxi Wang with the AnyGrasp SDK license, and the attachment is located at
$HOME/Downloads/license_KeweiChen.zip; detection weight is downloaded from the official Google Drive$HOME/Downloads/anygrasp_weights/checkpoint_detection.tar, approximately in size283M. Already executedtools/anygrasp/install_license_and_checkpoint.sh $HOME/Downloads/license_KeweiChen.zip $HOME/Downloads/anygrasp_weights/checkpoint_detection.tar, install tothird_party/anygrasp_sdk/grasp_detection/license、third_party/anygrasp_sdk/grasp_tracking/licenseandthird_party/anygrasp_sdk/grasp_detection/log/checkpoint_detection.tar。license_checkerPrintKeweiChen.lic check passedAlthough the check command returns a non-0 code occasionally, the SDK is actually loaded when needed.license passed: True, state: FvrLicenseState.PASSED。
-
AnyGrasp detection smoke results, 2026-06-03: Fixed a issue where after installing
pointnet2,$HOME/envs/genmanip-isaac5-py311/bin/pythoncan importpointnet2._ext,pointnet2.pointnet2_utils, andpointnet2.pointnet2_modules. Runningtools/anygrasp/run_detection_demo.shsuccessfully completed the officialgrasp_detection/example_datainference, producing 20 grasp scores with a maximum value of approximately0.47641015. This proves that AnyGrasp SDK detection is available on this machine; next, an ATEC bridge can be written to extract the target region from Isaac RGB-D/point cloud, call AnyGrasp to generate grasp pose, and then perform Piper IK/execution primitives. -
AnyGrasp ATEC bridge has been integrated, 2026-06-03: Added
scripts/graspnet_task_e/anygrasp_adapter.py;scripts/graspnet_task_e/run_graspnet_pick.pysupports--grasp_provider anygrasp, and the encapsulation entry isscripts/graspnet_task_e/run_anygrasp_pick.sh <object> <seed>. The adapter pre-loads ROS2 bridge’slibcrypto.so.1.1/libssl.so.1.1within the Isaac Python process, and injectstools/anygrasp/ifconfigintoPATH. Otherwise, the SDK will encounter OpenSSL or machine-id/license verification issues. The detector is loaded solely with smoke:$HOME/envs/genmanip-isaac5-py311/bin/python -c 'from scripts.graspnet_task_e.anygrasp_adapter import _load_anygrasp_detector; _load_anygrasp_detector()', andlicense passed: Trueshould be observed. -
AnyGrasp Task-E smoke results, 2026-06-03: object_3 succeeded under
--use_task_quat --tcp_z_offset 0.040 --close_z_offset -0.020,inside=True, andz_gain_lift=0.137, with videologs/videos/task_e_anygrasp/anygrasp_obj3_seed11_taskquat_lowclose.mp4; object_2 also succeeded with the same parameters,inside=True, with videologs/videos/task_e_anygrasp/anygrasp_obj2_seed11_taskquat_lowclose.mp4. object_1 currently failed in two rounds:anygrasp_obj1_seed11_taskquat_lowclose_retry.mp4andanygrasp_obj1_seed11_defaultquat_nooffset_lowclose.mp4. The common issue is that the SDK only provides low-score/clearly narrow width candidates (approximately0.006-0.008m), and the gripper closes but the object does not rise with lift. Do not mistake the current AnyGrasp bridge for a three-object full score policy; it has passed integration verification, but object_1 still needs to continue tuning along the existing Task-E calibration template. -
Recommendations for using AnyGrasp, 2026-06-03: The most stable approach currently is to use AnyGrasp as a RGB-D grasp candidate/center/yaw prior, then force the use of Task-E verified execution parameters (
--use_task_quat, low close z, finger-center/staged transport, basket stable release). Do not directly use AnyGrasp raw 6D wrist pose; object_3’s raw pose failed before switching to Task-E quaternion. For object_1, prioritize reusing the control template from the previous GraspNet success evidence: center at the upper-surface median, addOBJ_GRASP_CENTER_OFFSETS[1],--close_z_offset -0.020, and keep the grasp quat through transport/place/open, along with long transport and real finger-center servo. -
Review of third-party routes for GraspGen/AgileX, 2026-06-03: Online research revealed that AgileX community/tutorials recommend PiPER’s GraspGen route.
AgilexRobotics/GraspGenis currently inaccessible, but the accessible mirror/author repositoryvanstrong12138/GraspGenhas aros2_jazzy_versionbranch; it has been shallow-cloned intothird_party/GraspGen. AgileX’s official teaching repositoryagilexrobotics/Agilex-Collegehas also been shallow-cloned intothird_party/Agilex-College, and itspiper/GraspGenREADME describes the PiPER + YOLOv8-Pose/TensorRT + PCA/AABB + IK/gripper control workflow. The core code is located atthird_party/GraspGen/sam3/realsense-sam.py::compute_grasp_from_pca_aabb(): 3D PCA -> principal axis AABB -> shortest edge as the gripping direction. -
GraspGen-style PCA/AABB ATEC integration, 2026-06-03: Added
scripts/graspnet_task_e/pca_aabb_adapter.py,run_graspnet_pick.pysupports--grasp_provider pca. Theobject_1 smokecommand uses--grasp_provider pca --object 1 --seed 11 --mask_provider oracle --use_task_quat --tcp_z_offset 0.040 --close_z_offset -0.020 --close_steps 160 --move_steps 200 --transport_steps 1400 --place_steps 260, and the output is[PCA_AABB] points=5231 extents=(0.140,0.122,0.056) axis=2 width=0.056. This indicates that the gripper width calculated using the geometric method is reasonable, distinctly different from the abnormally narrow width of0.006-0.008min AnyGrasp. However, this attempt still failed:pick=(0.950,0.261),z_gain_lift=-0.024,inside=False, with a video showinglogs/videos/task_e_pca/pca_obj1_seed11_taskquat_lowclose.mp4. Cause analysis: The single-view RGB-D/mask only shows the visible side of object_1, and the execution center of PCA/upper-surface median tends to be on the left side. It is necessary to combine known object dimensions, multiple views, learned completion, or the successful center from old GraspNet to fill in the true gripping center. -
Fix for “poking the side of the block without it entering the gripper” for object_1, 2026-06-03: Based on the video, when the user indicated the block was on the left side, the Piper gripper only pushed/penetrated the block but did not allow it to enter between two fingers before closing. Re-testing confirmed: PCA/AABB with
--preclose_insert_dx 0.040 --close_z_offset -0.020still failed,z_gain_lift=-0.025. In the trace, during the close phase,min_finger_dist≈0.058m, indicating that the fingertip center is too far from the target. A failed video islogs/videos/task_e_pca/pca_obj1_seed11_insert_dx004.mp4. The actual effective fix is not to manually lower the close height, but to align the parameters of object_1 with the Task-E collector:OBJ_GRASP_CENTER_OFFSETS[1]=(0.025,0,0),OBJ_GRASP_Z_OFFSETS[1]=0.072,OBJ_CLOSE_Z_OFFSETS[1]=0.020, and use the actuallink7/link8finger-center servo. Successful command:OMNI_KIT_ACCEPT_EULA=YES PYTHONUNBUFFERED=1 $HOME/envs/genmanip-isaac5-py311/bin/python scripts/graspnet_task_e/run_graspnet_pick.py --grasp_provider pca --object 1 --seed 11 --mask_provider oracle --use_task_quat --tcp_z_offset 0.072 --close_steps 180 --move_steps 200 --transport_steps 1400 --place_steps 260 --video_path logs/videos/task_e_pca/pca_obj1_seed11_cfgclose.mp4 --save_debug_npz logs/pca_task_e/obj1_seed11_cfgclose_debug.npz --headless; results areinside=True,z_gain_lift=0.144, with trace reachmin_finger_dist≈0.006mand close level≈0.024m. Conclusion: The failure of object_1 is not due to “insufficient gripper force” or “need to switch to AnyGrasp”, but rather a pre-closing collision caused by errors in TCP/finger-center/close height calibration.run_graspnet_pick.pyhas incorporatedpreclose_insertstats into[TRACE]. If parameter sweeps continue, it is necessary to examine the finger-center errors for reach/insert/close/lift before making a judgment. -
demo/solution_pca.pyobject_1 submit-style repair progress, 2026-06-04: Do not overwrite thedemo/solution.py/ACT baseline;solution_pca.pyremains an experimental branch. The latest single-object seeds 11/12/13 have all successfully entered the basket: seed11 producedscore=6.00, initial(1.0945,0.2979,0.8833), and final(1.0582,-0.3256,0.8820); under the latest tight parameters, seed12 achievedscore=6.00and final(1.0338,-0.2790,0.8584), while seed13 achievedscore=6.00and final(1.0257,-0.2567,0.8871). Verification entry:ATEC_PCA_OBJECTS=1 OMNI_KIT_ACCEPT_EULA=YES PYTHONUNBUFFERED=1 $HOME/envs/genmanip-isaac5-py311/bin/python scripts/graspnet_task_e/debug_solution_pca_execution.py --seed <11|12|13> --object 1 --max_steps 4800 --headless. Key parameters: object_1 disables ROI fill-hole point cloud center; visible face center completion is performed viaOBJ_CENTER_COMPLETION_OFFSETS[1]=(0.020,0.0);OBJ_GRASP_CENTER_OFFSETS[1]=(0,0); during the reach phase, do not use low-finger-z servo; object_1 release/open height is calibrated using runnerTABLE_TOP_Z+0.32/+0.24;OBJ1_HOLD_GAP=0.0415,OBJ_LIFT_STEPS[1]=300, close/lift/mid are recorded after reaching the gap threshold for the first time_obj1_hold_grip, and subsequent lift/mid/release/settle maintain this gripper opening to prevent the object from being squeezed out when closing to 0. Error experience:OBJ_PLACE_XY_OFFSETS[1]=(0,-0.250)causes the release target to become y=-0.55, resulting in the object falling into the basket before completion; the wide ROI/white grid in object_1 rescue is prone to false detection and should be disabled by default, unless reliable foreground segmentation is recreated. -
demo/solution_pca.pyobject_2/3 status, 2026-06-04: object_2/3 still lacks submitable stability; do not claim that the PCA solution has achieved full score. In the runner comparison, object_3 seed11 succeeded once, but retesting similar runner parameters on 2026-06-04 failed, indicating that the previous success was not stable. Theobj321_servocollector log on May 20 proved that all three objects can achieve full score under official state_machine/real object root; object_3 successfully traced commonz_gain≈0.42,gap_close≈0.063-0.069,finger_close≈0.016-0.030,finger_vec_close.x≈-0.01~-0.03, andbasket_inside=True. Key new progress for submit-style object_3: both low and high defaults are unstable; the issue progressed from “no contact at all” to “strong lift possible but sliding during transport”; current experimental default values are adjusted toOBJ_CLOSE_Z_OFFSETS[3]=0.030,OBJ3_HOLD_GAP=0.055,OBJ_FINGER_XY_OFFSETS[3].x=-0.030, andOBJ_LIFT_STEPS[3]=40, which can produce strong lifts in some seed11 placements, such aslogs/pca_solution_obj3_fxneg003_full_seed11_20260604.logproducingscore=3.00andmax_z_gain=0.195, with short lift logslogs/pca_solution_obj3_shortlift_seed11_20260604.logoutputtingmax_z_gain=0.236; however, mid/release phases still slide back onto the table and do not enter the basket. Failure boundaries:hold_gap=0/0.045/0.060/0.065,close_z=-0.020/0/0.020/0.050/0.070/0.090, PCA yaw,ATEC_PCA_USE_FULL_IK=1, andATEC_PCA_OBJ3_OBJECT_SERVO=1remain unsolved. Next, stop questioning whether “no object is caught at all”; focus on maintaining object_3 transport/low-position transfer: immediately after grasping, perform lateral movement, reduce pure vertical lift, or use closed-drag/under-scoop to enter the basket. object_2 still needs individual realignment; do not apply compensation similar to that used for object_1/object_3. -
demo/solution_pca.pyadditional fix for object_3 sliding, 2026-06-04 18:20 CST: The “short lift + dynamic visual object-servo + low-position fallback” approach has been implemented in the experimental branch according to the user’s scheme, but seed11 still fails; do not deploy it. Current file changes include:OBJ3_HOLD_GAP=0.066,OBJ3_HOLD_GRIP_DEFAULT=(0.032,-0.034),OBJ3_CLOSE_MIN_STEPS=160,OBJ3_LOW_HOLD_STEPS=140,OBJ3_APPROACH_FINGER_Z=TABLE_TOP_Z+0.090,OBJ3_CLOSE_FINGER_Z=TABLE_TOP_Z+0.010,OBJ3_LIFT_FINGER_Z=TABLE_TOP_Z+0.080,OBJ3_OBJECT_SERVO_GAIN=0.12,OBJ3_OBJECT_SERVO_MAX_XY=0.040, andOBJ3_FINGER_SERVO_MAX_XY=0.080, and changing object_3 fallback to trigger earlier thanobj3_midstagnation,OBJ3_FALLBACK_DRAG_Z=TABLE_TOP_Z+0.035, and fallback steps60/260/260/100. Note: do not freeze the actual qpos as object_3 hold grip, which previously locked the asymmetric gripper opening like(0.035,-0.026); instead, use the calibrated default hold grip. Do not rely solely ongripper_basez; object_3 reach/close/lift requires explicit finger-center z. -
object_3 latest trace boundary, 2026-06-04:
logs/pca_solution_fix/obj3_seed11_runner_vec_match_debug_20260604_181342.logdemonstrates that the old defaultOBJ_FINGER_Y_OFFSET=+0.003causes the close finger-center to fall on the y-side of the banana center by approximately+0.024m, pushing the banana sideways apart; the default y offset has been changed to-0.020.logs/pca_solution_fix/obj3_seed11_yoffset_neg020_debug_20260604_181533.logshows that y returns to normal, but x may be too negative; temporarily coveringATEC_PCA_OBJ3_FINGER_X_OFFSET=-0.004 ATEC_PCA_OBJ3_FINGER_Y_OFFSET=-0.020withlogs/pca_solution_fix/obj3_seed11_xyoffset_xneg004_yneg020_debug_20260604_181706.logyields a close vector closer to the runner: the actual finger is approximately(x=+0.002,y=-0.015,z=-0.014)relative to the current visual center, but stillscore=0, indicating that the issue has progressed from “finger not in place” to “no viable contact after closing, and the visual center may be obscured by the gripper”. Early trigger of fallbacklogs/pca_solution_fix/obj3_seed11_early_low_fallback_20260604_181908.logonly pushes object_3 to(1.083,0.055,0.841), with x close to the basket but y still far from the basket center+0.355m; the current closed-drag height/contact direction still fails to move the banana. -
Next steps for object_3, 2026-06-04: Continue focusing on submit-style grasping, avoid retreating to ACT/training, and do not change the official physics. Prioritize implementing and verifying true table-level under-scoop/sweep: entering from the
+yside of the current visual center or outside the arc, with finger z lower thanTABLE_TOP_Z+0.035in small steps towardBASKET_CENTER_Y, while maintaining the current center re-estimation for object_3; fallback should trigger earlier atobj3_midand complete within 1500 steps. If continuing to adjust clamping, the target trace still aims for success with runnerlogs/graspnet_task_e_obj3_sam3_closed_drag.log:inside=True,z_gain_lift=0.207, reach/close/liftmin_finger_vec≈(-0.007~-0.010, -0.002~+0.002, -0.014~-0.011),gap≈0.066-0.068. Any new parameters must useATEC_PCA_DEBUG_TARGET=1ordebug_solution_pca_execution.pyto refer to finger-center/object-center values, and do not rely on video analysis alone. -
User-specified record for object_3: “short lift + low cradle/servo + stable basket release”, 2026-06-04 20:35 CST: Implemented in the
demo/solution_pca.pyexperimental branch, but still not deployable. Key changes:OBJ3_HOLD_GAP=0.0675,OBJ3_CLOSE_STEPS=90,OBJ3_LIFT_STEPS=35,OBJ3_LOW_HOLD_STEPS=0,OBJ3_LIFT_FINGER_Z=TABLE_TOP_Z+0.045,OBJ3_FINGER_X_OFFSET=-0.010; hold grip changed to latch only atobj3_liftand when the gap reaches a threshold, avoiding premature locking during the close phase;obj3_basket_holdfixes a clear bug: do not setdynamic_finger_xyto the current banana centerc_now, but keepobject_target_xy + carry_offset, otherwise the hand will be pulled back to the old position. Validation logs:logs/pca_solution_fix/obj3_seed11_eval_close90_shortlift_fasttransport_20260604_201931.logshows successful latch but error in basket_hold desired, and ultimately object_3 remains aty≈0.068; after fixing,logs/pca_solution_fix/obj3_seed11_eval_fixservo_transport440_20260604_202219.logand...fingerik_20260604_202355.logstill get stuck atfinger y≈-0.09; the low-position closed-drag versionlogs/pca_solution_fix/obj3_seed11_eval_low_closed_drag_20260604_202611.logalso only reachesfinger y≈-0.09, with the object not entering the basket; position-only DLSlogs/pca_solution_fix/obj3_seed11_eval_lowdrag_positiononly_*.logallows the gripper_base to get closer to the basket, but finger z rises too high to≈1.0m, resulting in loss of contact. Conclusion: The current object_3 grasping pose/short lift can be achieved, and the main blocker is the submit-side Pinocchio DLS/traffic control, which does not reproduce the real PhysX Jacobian behavior of runner/collector IsaacCartesianController, especially the y motion of the basket and the retention of finger z; do not attribute the primary issue to GraspNet/AnyGrasp candidate models anymore.- object_3 subsequent shortest path, 2026-06-04 20:35 CST: prioritize replicating IsaacLab
CartesianControllerDetails of action generation, rather than continuing to switch to the grasp model. The official version has been confirmedget_action_spec()Only the action group can be modified.mode/scale/clipIt cannot directly submit the Cartesian action. If used, only the arm velocity/scale diagnosis can be attempted, and pose control cannot be completely resolved. Next steps: 1) Usescripts/graspnet_task_e/debug_solution_pca_execution.pyAdd the “stuck phase” q6/joint limit printing, and confirm whether it is a joint limit or DLS/rotation error; 2) Changedemo/solution_pca.py_rot_error/DLS Damping/Clamp alignment per stepsource/atec_rl_lab/atec_rl_lab/utils/cartesian_controller.py, prioritize using position+current wrist quat instead of forcing topdown; 3) If still not working, create a small joint-space transport library: The runner generates relative joint waypoints from the initial positions of several object_3 y-band, and submits them through visual center selection/interpolation, rather than calculating Cartesian IK at each step. Keep it as is.demo/solution.py/demo/policy_act.ptThe ACT/XSA baseline remains unchanged.solution_pca.pyUsed only as an experimental branch. - PCA/AABB + RGB-D band mask for three-object single smoke, 2026-06-03: The goal is to avoid the non-distribution restrictions of the AnyGrasp SDK, thereby establishing a reproducible alternative approach to geometric grasping.
scripts/act/task_e/config.pyOBJ_SPAWN_Y_BANDSOfficial alignment achievedsource/atec_rl_lab/atec_rl_lab/tasks/task_e/env_cfg.py:object_1[+0.25,+0.29]、object_2[+0.14,+0.20]、object_3[+0.03,+0.09];scripts/graspnet_task_e/tuntun_adapter.pyrgbd_band_object_mask()Added object-specific z gate to prevent mixing with table/arm/ basket points. Successful command for object_1 band:... run_graspnet_pick.py --grasp_provider pca --object 1 --seed 11 --mask_provider band --use_task_quat --tcp_z_offset 0.072 --close_steps 180 --move_steps 200 --transport_steps 1400 --place_steps 260 --video_path logs/videos/task_e_pca/pca_obj1_seed11_band_cfgclose_yband_zfilter.mp4 ..., resultinside=True、z_gain_lift=0.144. object_2 passed the re-test after the official y-band narrowing:... --object 2 --seed 11 --mask_provider band --use_task_quat --tcp_z_offset 0.040 --close_z_offset -0.020 --transport_steps 1400 --place_steps 260 --video_path logs/videos/task_e_pca/pca_obj2_seed11_band_yalign_taskquat_lowclose.mp4 ..., resultinside=True、z_gain_lift=0.119. object_3 initially has the ability to grab with band/PCA, but will slide out during high-altitude release; the fix is inscripts/graspnet_task_e/pca_aabb_adapter.pyIn particularobject_index==3Use the oriented AABB center instead of the upper-surface median, andrun_graspnet_pick.pyAdd--open_release_zSupports “high-position transportation and low-position claw opening”. object_3 seed11 AABB-center High-position release can be successful once:logs/videos/task_e_pca/pca_obj3_seed11_band_aabbcenter_taskquat_lowclose.mp4, resultinside=True、z_gain_lift=0.161; the high-level release of seed12 will slip out, so switch to it--release_z 0.32 --open_release_z 0.24 --place_steps 220Successed later, videologs/videos/task_e_pca/pca_obj3_seed12_band_aabbcenter_highcarry_lowopen.mp4, resultinside=True, the final in-the-court delta is approximately(-0.031,-0.049). Note: These are single-object runner tests. They still need to be combined into a three-object continuous episode and migrated todemo/solution.pythe observation-only control logic; currentrun_graspnet_pick.pyThe env object state will still be read for verification/dynamic servo, and it cannot be directly used as the final submission.
- object_3 subsequent shortest path, 2026-06-04 20:35 CST: prioritize replicating IsaacLab
-
Debugging of the submit-style PCA controller, 2026-06-04:
demo/solution_pca.pyis a experimental branch and not deployed;demo/solution.pyremains the ACT/XSA baseline.scripts/act/eval_task_e_act.pynow supports--solution_module solution_pca, andscripts/graspnet_task_e/debug_solution_pca_execution.pycan quantifyfinger_dist/max_z_gain/pin_mean_errusing Isaac internals. It has been confirmed that Pinocchio FK aligns with Isaac link7/link8/gripper_base,pin_mean_err finger=0.0000 gb=0.0000, so the main reason for “not grasping or failing to grasp” is not a FK coordinate error, but the submit-style IK/controller fails to reproduce the low-level contact ability ofrun_graspnet_pick.py’s IsaacCartesianController. -
Current status of submit-style object_1, 2026-06-04: Attempts have been made to migrate the successful template of object_1 from
run_graspnet_pick.pytodemo/solution_pca.py, including RGB-D world AABB center completion,OBJ_CENTER_COMPLETION_OFFSETS[1]=(0,+0.018), object_1 x execution offset received from+0.025as+0.010, a low close planeTABLE_TOP_Z+0.030, and direct finger-center IK. Conclusion: the perception center can achieve centimeter-level accuracy, but current Pinocchio IK often traps link7/link8 finger-center above the object during the close phase by approximately+0.05mandmax_z_gain≈0, preventing object_1 from being lifted. Direct finger-center IK and the forced object_1 task quaternion(0,0.707,0.707,0)are even worse, and we have returned to the gripper_base compensation approach; do not mistake this for a failure in Grasp/PCA/AnyGrasp itself. The next step should be to replicate the differential IK mathematics/parameters of IsaacCartesianController, or implement a more reliable DLS resolved-rate joint update within the submit policy, rather than continuing to switch grasp models. -
Update on preclose insert for submit-style object_1, 2026-06-04:
demo/solution_pca.pyadded_PiperIK.step_dls(), runner-style finger-center XY correction, object_1 task quaternion[0,0.709,0.705,0], object_1 relative-z correction, preclose insert, and object_1 release overshoot. Videologs/videos/task_e_pca_solution/pca_solution_obj1_seed11_best_trace_20260604_114715.mp4clearly shows that without insert, the gripper mouth stays on the side of the cube, and the cube remains on the table when lifted. After adding insert,OBJ_PRECLOSE_INSERT_OFFSETS[1]=(0,-0.040)achievedscore=3,max_z_gain=0.137m, but slipped ontoy≈-0.047during transportation;(0,+0.025)achievedmax_z_gain=0.193m, and ultimatelyy≈-0.083, yet still failed to enter the basket, and another attempt failed to grasp at a random position. Conclusion: the direction/amplitude of insert is key to effective grasping, but object_1 remains unstable; currentdemo/solution_pca.pyis still only for debugging, and do not overridedemo/solution.pyordemo/policy_act.pt. -
Comparison with GraspNet object_1, 2026-06-03: Attempted to replicate old known successful commands. Video target
logs/videos/task_e_graspnet/graspnet_pick_obj1_seed11_recheck_20260603.mp4, and the process took over 3 minutes in the GraspNet inference/candidate generation phase without any output from[GRASP], consuming approximately6.6GBof GPU resources and high CPU load, so it was manually killed. This is not evidence of successful or failed grasping; if we want to continue comparing with GraspNet, first investigate why the current recheck inference phase is slow/blocked. -
Reference conclusion from AnyGrasp third-party, 2026-05-30: No official AnyGrasp for Piper project exists for Songling/AgileX; AgileX mainly provides PiPER Python/ROS/ROS2/URDF/simulation control stacks. Third-party/paper approaches support “using AnyGrasp as a pre-contact/contact-pose prior, then applying robot IK/trajectory planning”: DKT’s work on transparent objects mentions
RealSense D435 + PiPER Arm + AnyGrasp + CuRobograsp stack; BayesVLA splits the policy into visual action prior and language likelihood, and assigns the pre-contact phase to frozen contact-pose models like AnyGrasp. Insights for this project: AnyGrasp should first generate candidate grasping poses and perform ranking, while ATEC Piper still requires separate handling of TCP calibration, IK/trajectory, gripper closing/anti-slip during transportation, and high-stability release at the basket center. -
Current work recommendations: 1) Keep
demo/policy_act.pt’s XSA-ACT baseline unchanged; 2) If aiming for short-term improvement, prioritize using AnyGrasp/SAM3 as a grasp candidate generator to integrate into the existing calibrated Piper primitive, rather than continuing blind training with pi0.5; 3) If continuing VLA, redo the OpenPI/Piper embodiment adapter (native Piper dims/cameras/norm/discrete_state_input), and do not use fixed-base 16D padding as the final conclusion; 4) Before each deployment, must independently evaluate seeds11/12/13, and keep at least one video and[BASKET]basket entry logs. -
Latest status, 2026-05-20 20:55 CST:
- Supersedes the older “object 1/2 unresolved” notes below; keep them only as historical debugging context.
- L0 Task E three-object scripted data generation now works well enough to collect demos. Verified all-object order is
3 2 1with--only_success --trace --abort_failed_lift. - Verified object-1-only success:
datasets/atec_task_e_probe_obj1_graspoffset_servo/trajectory.hdf5, 3/3 successful demos; trace z-gain about0.387-0.417,basket_inside=True. - Verified object-2-only success:
datasets/atec_task_e_probe_obj2_original_rootservo/trajectory.hdf5, 3/3 successful demos; trace z-gain about0.302-0.304,basket_inside=True. - Verified three-object success:
datasets/atec_task_e_probe_obj321_final_servo/trajectory.hdf5, 3 successful demos in 4 attempts; success traces have object_1/2/3basket_inside=True. - Review video:
logs/videos/task_e_obj321_final_servo/demo_0000.mp4; keyframe summary:logs/videos/task_e_obj321_final_servo/summary_5s.jpg. - Root cause/fix: data generation was wrong, not ACT training. Object 1 must keep the finger-centre servo target on
obj_pos + OBJ_GRASP_CENTER_OFFSETS[1]; object 2 must track the USD/root object position, not the offset center. Both need closed-loop finger-centre servo duringREACH/CLOSE/LIFT/TRANSPORT/PLACE. - Stable constants in
scripts/act/task_e/config.py: object 1 offset(0.025,0,0), grasp z0.072, close z0.020, transport/place steps2200/300; object 2 offset(0.060,0,0), grasp z0.135, transport/place steps2200/300; defaultPICK_OBJECTS="3 2 1". scripts/act/task_e/collector.pyhas the important per-object servo distinction: object 1 servo/trace target usesobj_pos + OBJ_GRASP_CENTER_OFFSETS; object 2/3 useobj_pos. Do not “simplify” this back to one formula.scripts/act/train_task_e.pyuseslr_drop = max(int(2/3 * total_iters), 1)so tiny smoke tests no longer fail withStepLR(step_size=0).- CAP-X / RoboTwin lesson: use contact/TCP calibrated grasp candidates and closed-loop place logic first. GraspNet/ContactGraspNet can be added later as a candidate generator, but it is not required to fix this current oracle data bug.
- Real pipeline command:
DATA_DIR="datasets/atec_task_e_obj321_servo_100demos" PICK_OBJECTS="3 2 1" NUM_DEMOS=100 MAX_ATTEMPTS=260 TOTAL_ITERS=100000 BATCH_SIZE=512 SEED=1 LOG_FREQ=100 SAVE_FREQ=5000 RUN_NAME="act-task-e-rgb-obj321-servo-100demos-seed1" bash scripts/act/run_task_e_pipeline.sh. - Active long run started via systemd user unit because plain background/nohup could be killed with the Codex command: unit
atec-task-e-obj321-servo-20260520211650.service, loglogs/task_e_obj321_servo_pipeline_20260520_211650.log, latest symlinklogs/task_e_obj321_servo_pipeline.latest. - As of 2026-05-20 21:22 CST the long run is active,
Demo 1/100succeeded and wrotedatasets/atec_task_e_obj321_servo_100demos/trajectory.hdf5(~1.3 GB), then proceeded toDemo 2/100.
-
Latest train/eval status, 2026-05-21 14:55 CST:
atec-task-e-obj321-servo-20260520211650.servicecompleted normally; raw dataset isdatasets/atec_task_e_obj321_servo_100demos/trajectory.hdf5(~130 GB), filtered dataset istrajectory_filtered.hdf5(~35 GB), run isruns/act-task-e-rgb-obj321-servo-100demos-seed1.- Checkpoints include
best_loss.ptandfinal.pt; training reached100000iters, final logged loss around0.0100. - First ACT eval of
best_loss.ptscored0/3episodes; videologs/videos/task_e_act_eval/obj321_best_loss_100demos_20260521_145104.mp4shows the arm staying near the basket/home pose instead of starting the object grasp. - Root cause found in
demo/solution_act.py: the home stage treated env action as PD/velocity, but Task E action is(joint_target - default_joint_pos) / 0.5. Fix is to command the static teleop-home target action until stable, then switch to ACT. Re-run eval after this fix before judging model quality. - After the home fix,
best_loss.pteval improved: 1-episode score9.00with videologs/videos/task_e_act_eval/obj321_best_loss_homefix_1ep_20260521_145529.mp4; same-process 3-episode eval had valid first episode score18.00and videologs/videos/task_e_act_eval/obj321_best_loss_homefix_3ep_20260521_145652.mp4, but subsequent episodes reset todone=Trueat step 1, so do not treat that mean score as independent. final.ptsingle-episode eval scored6.00, so deploybest_loss.pt.- Deployment: previous
demo/policy_act.ptbacked up asdemo/policy_act.prev_20260521_145951.pt; currentdemo/policy_act.ptis copied fromruns/act-task-e-rgb-obj321-servo-100demos-seed1/checkpoints/best_loss.ptand sha256 matches76bbef2c81c85fc6cc60448476ff09075ec8bc97217c2d2fb70a3253fd3e307d.
-
XSA ACT experiment, 2026-05-21:
- Local XSA package source:
$HOME/Documents/01Proj/13atec/xsa_update_20260520/lerobot_policy_act_xsa.zip; it is a LeRobotact_xsaplugin with 12-dim example config and is not directly runnable for ATEC Task E’s 8-dim Piper setup. - Minimal XSA adaptation added behind
--use_xsa:source/atec_rl_lab/atec_rl_lab/train/act/act/detr/transformer.pyanddemo/act/detr/transformer.pysupportXSATransformerEncoderLayer/XSATransformerDecoderLayer; default ACT remains unchanged. scripts/act/train_task_e.pynow savesmodel_argsin checkpoints;demo/solution_act.pyreadsmodel_argsincludinguse_xsa, so ordinary ACT and XSA checkpoints can both load.- Smoke test passed:
runs/act-task-e-rgb-xsa-smoke-10demos-seed7/checkpoints/final.ptloads asXSATransformerEncoderLayer. - Active XSA comparison run: systemd user unit
atec-task-e-xsa-30k-20260521165009.service, loglogs/task_e_xsa_30k_20260521_165009.log, run nameact-task-e-rgb-xsa-100demos-30k-seed11, command uses--use_xsa --total_iters 30000 --batch_size 256 --num_demos 100. - Mid-training evals are noisy but not yet encouraging: 19k-ish snapshot scored
9/18with videologs/videos/task_e_act_eval/xsa_mid_best_1ep_20260521_174124.mp4; later current-best snapshot at20260521_175038scored0/18with videologs/videos/task_e_act_eval/xsa_current_best_1ep_20260521_175038.mp4. Do not infer ranking from training loss alone; run independent single-episode processes because same-process multi-episode reset can be invalid after success.
- Local XSA package source:
-
GraspNet / TunTunClaw integration, 2026-05-21:
- User reference cloned into
third_party/tuntunclaw/from Datawhale/OpenClaw home assistant material. Official GraspNet checkpoint isthird_party/tuntunclaw/temp/logs/log_rs/checkpoint-rs.tar. - Local bridge files:
scripts/graspnet_task_e/tuntun_adapter.pyand smoke runnerscripts/graspnet_task_e/run_graspnet_pick.py. - Dependencies were made to work in
$HOME/envs/genmanip-isaac5-py311/bin/python:open3d==0.19.0, localgraspnetAPI,transforms3d==0.4.2, and the GraspNetpointnet2CUDA extension built for Blackwell withTORCH_CUDA_ARCH_LIST=12.0. - Important lesson: raw GraspNet point/orientation alone did not lift object 1. The first successful object-1 smoke used GraspNet/TunTunClaw for candidate generation, but executed with Task-E calibrated controls: robust mask upper-surface median as execution center, object-1
OBJ_GRASP_CENTER_OFFSETSadded,--close_z_offset -0.020, finger-center servo, keep grasp quaternion through transport/place/open, and long transport. - Known-good object-1 command:
python scripts/graspnet_task_e/run_graspnet_pick.py --object 1 --seed 11 --tcp_z_offset 0.040 --close_z_offset -0.020 --use_task_quat --close_steps 160 --move_steps 200 --transport_steps 1400 --place_steps 260 --headless --device cuda:0 --video_path logs/videos/task_e_graspnet/graspnet_pick_obj1_seed11_keepquat_slow.mp4 --save_debug_npz logs/graspnet_task_e/obj1_seed11_keepquat_slow_debug.npz. - Verified result for that command:
inside=True,z_gain_lift=0.164, final object_1 position about(1.043,-0.247,0.934), basket delta(-0.037,+0.053). Video:logs/videos/task_e_graspnet/graspnet_pick_obj1_seed11_keepquat_slow.mp4. - Object 3 GraspNet smoke also succeeded with refined AABB oracle mask and lower close height: command uses
--object 3 --tcp_z_offset 0.055 --close_z_offset 0.015 --use_task_quat --place_x_offset 0.04 --place_y_offset 0.05; resultinside=True,z_gain_lift=0.188, videologs/videos/task_e_graspnet/graspnet_pick_obj3_seed11_lowclose.mp4. - Object 2 GraspNet smoke is not solved yet. Best attempts can move/lift slightly (
z_gain_lift≈0.07-0.10) but final y remains outside basket; simple--post_pushmoved it only to abouty=-0.056. Keep using the existing Task-E calibrated state-machine/ACT path for object 2 until a better GraspNet contact primitive is found. - Added legal-ish RGB-D y-band mask provider
rgbd_band_object_mask()and runner flag--mask_provider band; it avoids sim object state by using camera intrinsics, depth, table height, and official spawn y-bands. Current band-mask object-3 test did not lift yet, so the GraspNet success videos above still rely onoracle_object_mask()/AABB debug masks. Do not use oracle masks in final submission without replacement. - Three-object stable oracle/state-machine verification after GraspNet changes:
scripts/act/collect_demos_task_e.py --pick_objects 3 2 1 --num_demos 1 --max_attempts 3 --only_success --trace --abort_failed_lift --save_video ...succeeded on attempt 2, with all object_1/2/3basket_inside=True. Video:logs/videos/task_e_obj321_current_verify/demo_0000.mp4.
- User reference cloned into
-
SAM3 segmentation / basket-center release, 2026-05-21:
- Local SAM3 checkpoint exists at
$HOME/Documents/01Proj/sam3d_gs/submodule/Prompt-Inpaint/checkpoints/sam3.pt; SAM3 is installed in$HOME/Documents/01Proj/sam3d_gs/.venv/bin/python, not in the Isaac env. Keep SAM3 isolated as a subprocess rather than installing it into$HOME/envs/genmanip-isaac5-py311. - Added
scripts/graspnet_task_e/sam3_segment_image.py: standalone RGB image -> SAM3 binary mask. It uses local Prompt-InpaintSAM3Predictorand writes.npymask plus optional JSON metadata. scripts/graspnet_task_e/run_graspnet_pick.pynow supports--mask_provider sam3,--sam3_prompt,--sam3_threshold, and--sam3_python. It also defaults to--basket_center_release: during transport/place/open it servo-corrects the EE target by current object center error so the object center is driven to(BASKET_CENTER_X, BASKET_CENTER_Y)before opening.- SAM3 smoke on saved frames passed for all three prompts: object 1 best prompt
boxscore0.863, mask31206px; object 2 best promptyellow bottlescore0.961, mask2509px; object 3 best promptbananascore0.953, mask1311px. Overlays arelogs/graspnet_task_e/sam3_smoke_obj{1,2,3}_overlay.png. - First live object-3 SAM3+GraspNet smoke was blocked before environment creation by
ModuleNotFoundError: scripts.act; fixed by explicitly inserting repo root intosys.pathat the top ofrun_graspnet_pick.py. Re-run live smoke after this fix. - Live object-3 SAM3+GraspNet with default high close failed (
z_gain_lift=0.000). Lowering close offset fixed the contact: command used--mask_provider sam3 --object 3 --seed 11 --tcp_z_offset 0.055 --close_z_offset -0.005 --use_task_quat --basket_center_release; resultinside=True,z_gain_lift=0.211, final(0.995,-0.254,0.852), basket delta(-0.085,+0.046). Video:logs/videos/task_e_graspnet/graspnet_pick_obj3_sam3_basket_center_lowclose.mp4. run_graspnet_pick.pynow has a local GraspNet-only default close offset for object 3 (GRASPNET_CLOSE_Z_DEFAULTS[3] = -0.005), without changing global Task-E scripted collector constants.- Debug finding after user insisted the SAM-center-to-basket rule is valid: object-1 initial SAM3 failure was not a SAM capability issue.
sam3_segment_image.pyreturned multiple masks andrun_graspnet_pick.pyinitially picked the highest-confidence distractor near the basket/table (y≈-0.316) instead of the sugar box (y≈+0.261). Fix:sam3_segment_image.pynow can write all candidates, andrun_graspnet_pick.pyselects/refines the candidate with the most RGB-D points inside the target object’s official spawn x/y band and table-height range. - After world-band candidate selection, object-1 SAM3 perception is correct (
selected_candidate=1 prompt=box, mask3327px, GraspNet/pointcloud target about(1.020,0.261,0.917)). It partially lifts (z_gain_lift=0.120) but misses the basket at final y-0.051; stronger basket servo made grasping worse, so current blocker is grasp/contact stability plus transport slip, not segmentation. - Object-2 SAM3 perception is also correct (
band_ratio≈0.98-0.99, mask about2500-2700px). With default offset it partially lifts (z_gain_lift≈0.098-0.112) but stops around y-0.08..-0.10; no-offset is worse and lower close height still misses. Current blocker is bottle grasp/contact stability and transport slip, not SAM3/SAM2. - Do not switch to SAM2 as the primary fix unless SAM3 latency becomes unacceptable. The failure evidence points to candidate filtering (fixed) and execution/contact tuning (still pending), while SAM3 masks are good once selected by world-band constraints.
- User correctly identified early release: added explicit transport-end logging, short stable-hold gating, and “do not open unless stable” logic in
run_graspnet_pick.py. New args include--release_z,--basket_xy_tol,--basket_hold_steps,--basket_stable_steps,--basket_recovery_steps,--auto_table_push_on_slip, and--drag_recovery_steps. - Important nuance: long high hold can cause slip/bounce. Object-3 high-hold test reached
min_xy_err≈0.055but failed because it waited too long and then dropped/bounced. Use a short stable hold (basket_stable_stepsabout6-12,basket_xy_tolabout0.09) rather than hundreds of hold steps. - Verified object-3 SAM3 short-stable release success after adding
TRANSPORT_END: command used--object 3 --mask_provider sam3 --close_z_offset -0.005 --release_z 0.18 --basket_xy_tol 0.09 --basket_hold_steps 40 --basket_stable_steps 6 --transport_steps 220; resultinside=True,TRANSPORT_END xy_err=0.006, final(1.077,-0.313,0.852). Video:logs/videos/task_e_graspnet/graspnet_pick_obj3_sam3_closed_drag.mp4. - Object-1 and object-2 still fail under SAM3+GraspNet despite correct masks. At
TRANSPORT_END, both have slipped/dropped before release: object-1 example final transport(0.885,-0.056,0.872),xy_err=0.313; object-2 example(0.978,0.034,0.882),xy_err=0.349. Closed-drag/table-push recovery as currently implemented does not move them, likely because Pipergripper_baselow push pose is not actually contacting the object side. Next step should switch recovery to the known Task-E calibrated state-machine transport/contact primitive or redesign pusher using actual finger/link contact geometry, not just gripper_base target z. - Follow-up on 2026-05-21 night: user explicitly required the method to be competition-real, so
scripts/graspnet_task_e/run_graspnet_pick.pywas changed to use actuallink7/link8finger centers for transport/recovery, not fakegripper_basecontact assumptions. Added staged transport (--staged_transport,--transport_servo_fraction) so the arm first carries smoothly and only applies basket-center object servo in the final segment. - Verified SAM3+GraspNet object-3 with real finger/staged transport: command used
--object 3 --mask_provider sam3 --close_z_offset -0.005 --transport_steps 700 --transport_servo_fraction 0.20 --basket_servo_gain 0.75 --basket_servo_max_xy 0.18; resultinside=True, final about(0.995,-0.220,0.853), videologs/videos/task_e_graspnet/graspnet_pick_obj3_sam3_staged_transport.mp4. - SAM3+GraspNet object-1/2 are still not robust enough for submission. Object-1 no-offset test can partially lift (
z_gain_lift≈0.130) but slips neary≈-0.055; object-2 offset test can partially lift (z_gain_lift≈0.120-0.137) but slips aroundy≈-0.10. GraspNet native yaw/quat made object-2 worse. The blocker is real contact stability during transport, not SAM3 segmentation.
- Local SAM3 checkpoint exists at
-
ACT obj321 servo training/eval, 2026-05-21:
- Dataset exists:
datasets/atec_task_e_obj321_servo_100demos/trajectory.hdf5(~122G) andtrajectory_filtered.hdf5(~33G). - Training completed: run
runs/act-task-e-rgb-obj321-servo-100demos-seed1, checkpoints throughfinal.pt; training log symlinklogs/task_e_obj321_servo_pipeline.latest. - Default submission checkpoint is already installed:
demo/policy_act.ptSHA256 matchesruns/act-task-e-rgb-obj321-servo-100demos-seed1/checkpoints/best_loss.pt(76bbef2c81c85fc6cc60448476ff09075ec8bc97217c2d2fb70a3253fd3e307d). - Evaluation with real observations:
final.ptsingle episode scored6.00, videologs/videos/task_e_act_eval/obj321_servo_final_1ep_20260521_realobs.mp4.best_loss.ptproduced one successful18.00episode with videologs/videos/task_e_act_eval/obj321_servo_bestloss_3ep_20260521_realobs.mp4, but independent single-process repeats scored6/12/12; treat current expected score as roughly 10-12 with occasional 18, not yet robust. - Known eval gotcha: same-process multi-episode reset can produce bogus later episodes with
steps=1; use separate Python processes for trustworthy episode estimates. - 2026-05-21 night inference tuning:
demo/solution_act.pynow supports env varsATEC_ACT_TEMPORAL_AGG=0,ATEC_ACT_PREFER_NEW=1, andATEC_ACT_TEMPORAL_K=<float>without changing default behavior.scripts/act/eval_task_e_act.pynow supports--seedand prints[BASKET]object status at the end. - Fixed-seed quick checks with
best_loss.pt: prefer-new (ATEC_ACT_PREFER_NEW=1 ATEC_ACT_TEMPORAL_K=0.05) scored6/15/0on seeds11/12/13; no-agg (ATEC_ACT_TEMPORAL_AGG=0) initially scored6/9/15without basket debug, but seed handling/debug rerun of seed13 scored0and showed all objects still outside basket. More controlled seed sweeps are needed before changing submission inference defaults. - Started ACT seed2 training from the existing filtered dataset, no recollection: systemd user unit
atec-task-e-act-seed2-20260521225511.service, loglogs/task_e_act_seed2_20260521225511.log, run nameact-task-e-rgb-obj321-servo-100demos-seed2. - Seed2 mid-training evals:
5000.pton fixed seed 11 scored0.00(all objects outside); then-currentbest_loss.ptscored6.00with only object_3 inside.10000.pton fixed seed 11 scored0.00.15000.pton fixed seed 11 also scored0.00; videologs/videos/task_e_act_eval/seed2_15000_seed11.mp4.20000.pton fixed seed 11 scored6.00with only object_3 inside; videologs/videos/task_e_act_eval/seed2_20000_seed11.mp4. Do not replacedemo/policy_act.ptwith seed2 before later checkpoints prove better. Training continued pastIter 20000, latest logged loss around0.020. - 2026-05-22 01:12 CST seed2 reached
30000.pt; loss about0.0158, andbest_loss.ptwas updated. Attempted fixed-seed evallogs/eval_task_e_seed2_30000_seed11.log, but it is invalid: GPU was already at ~91/98 GB because unrelated Ray/FSDP processes used ~76 GB, Isaac/Warp hit CUDA OOM and fell back to software physics. The eval process was killed before completion; do not treat this as model success or failure. Next trustworthy seed2 eval should wait for enough free CUDA memory, or after the unrelated Ray job finishes; avoid stopping seed2 becausescripts/act/train_task_e.pyhas no resume argument. - 2026-05-22 01:19 CST valid CUDA eval of seed2
30000.pton fixed seed 11 scored0.00; all objects outside. Video:logs/videos/task_e_act_eval/seed2_30000_seed11_valid.mp4. The original seed2 service then failed with status 143 at iter ~30400, leaving30000.ptas the last full checkpoint. - Added resume support to
scripts/act/train_task_e.pyandscripts/act/run_task_e_pipeline.sh:--resume_checkpoint,--resume_iter, and env varsRESUME_CHECKPOINT/RESUME_ITER. New checkpoints savetrain_iter, optimizer, scheduler, and EMA state; legacy checkpoints can resume weights with a fresh optimizer. Smoke test passed:logs/train_task_e_resume_smoke_seed2_30000.log, runruns/act-task-e-resume-smoke-seed2-30000. - Started resumed seed2 continuation: systemd unit
atec-task-e-act-seed2-resume-20260522013429.service, loglogs/task_e_act_seed2_resume_20260522013429.log, command resumes fromruns/act-task-e-rgb-obj321-servo-100demos-seed2/checkpoints/30000.ptwithRESUME_ITER=30000andTOTAL_ITERS=100000. - Resume status 2026-05-22 01:52 CST: service successfully loaded
100trajectories (169700timesteps), resumed at iter30000, and reached aboutIter 31000; GPU utilization was 100%, process722380used about 13 GB VRAM. New30000.pt/best_loss.ptare about 333 MB because they now include optimizer/scheduler/EMA state. - Seed2 resumed eval:
35000.ptexists and valid seed-11 eval scored0.00(logs/eval_task_e_seed2_35000_seed11_valid.log); all object_1/2/3 were outside. Do not deploy seed2 at 35k. Continue training toward 50k/100k and only evaluate later checkpoints or best_loss when GPU is not crowded. - Seed2
best_losssnapshot at 2026-05-22 02:22 (runs/act-task-e-rgb-obj321-servo-100demos-seed2/checkpoints/best_loss_snapshot_20260522_022223.pt, sha2565e52307e84684a98429273102e136f0398e458ab1bd02a0dc6efc025493d4f02) scored12.00on seed 11 (logs/eval_task_e_seed2_bestloss_snapshot_20260522_022223_seed11.log): object_2 and object_3 inside, object_1 outside. This is better than35000.ptbut still not enough to replace XSA; evaluate later best_loss/50k across multiple seeds before deployment. - Resume status 2026-05-22 02:32 CST: training reached about
Iter 41200;40000.ptexists (runs/act-task-e-rgb-obj321-servo-100demos-seed2/checkpoints/40000.pt). No 40k eval yet because GPU was crowded by another Ray/FSDP job (~70 GB) plus seed2 training; wait for 50k or a clear GPU window. - Seed2
best_losssnapshot at 2026-05-22 02:35 (runs/act-task-e-rgb-obj321-servo-100demos-seed2/checkpoints/best_loss_snapshot_20260522_023530.pt, sha2564048a27189b6539e9c5a699ae39eb4e2ea9496e197649d5fa5434141b5495ad7) scored only6.00on seed 11 (logs/eval_task_e_seed2_bestloss_snapshot_20260522_023530_seed11.log): only object_3 inside. Lower training loss did not correlate with better task score; do not deploy this snapshot. - Seed2 numbered checkpoint evals after resume:
45000.ptscored seed1118.00but seed120.00;50000.ptscored seed1115.00and seed126.00. This is still too unstable to deploy over current XSA candidate. Continue training and evaluate later checkpoints; object_1 remains the main missing piece. - Resume status 2026-05-22 03:24 CST:
55000.ptexists andbest_loss.ptupdated at the same time, but no 55k eval was run because 45k/50k already proved instability. Next planned evaluation gate is 75k or final/100k unless training fails. - Resume status 2026-05-22 04:00 CST: training reached about
Iter 64300;60000.ptexists andbest_loss.ptupdated at about03:58:59. No 60k eval; continue to 75k gate. - Seed2
75000.pteval on seed 11 scored only6.00(logs/eval_task_e_seed2_75000_seed11.log): only object_3 inside. Do not spend more seed12/13 eval on 75k; wait for final/100k or a specific promising snapshot. - Seed2 mid/late checks on 2026-05-22:
85000.ptseed11 scored0.00(logs/eval_task_e_seed2_85000_seed11.log), while the then-currentbest_loss.ptaround iter87300scored15.00(logs/eval_task_e_seed2_bestloss_87300_seed11.log) with object_2 and object_3 inside and object_1 outside. This reinforces that training loss and task score are weakly correlated; object_1 remains the main blocker and ACT alone is not yet stable full-score. - Seed2 finished 100k on 2026-05-22:
final.ptSHA25636493deefaf05694351db776435c2d53d9fe4a274c4f95febfe0fe8b36fea652scored0.00on seed11 (logs/eval_task_e_seed2_final_seed11.log); latestbest_loss.ptSHA256f14c9d7c536c1d4156a8603064ec65cc593d8659147da175212fd8d7cbad2950scored9.00on seed11 (logs/eval_task_e_seed2_bestloss_96900_seed11.log, only object_3 inside). Do not deploy seed2 over current XSA candidate. - Strategy judgment as of 2026-05-22: keep ACT/XSA as the best deployable baseline and finish seed2 to 100k for evidence, but do not assume more ACT iterations will reach stable 18. Prepare a pi0.5/OpenPI fine-tune branch using the existing HDF5 demos converted to LeRobot format; use GraspNet/SAM3 mainly as a grasp/data-generation aid unless object_1/2 contact stability is proven in ATEC Isaac with real observations/actions.
- XSA final checkpoint had the best current evidence but is not full-score stable. Direct eval of
runs/act-task-e-rgb-xsa-100demos-30k-seed11/checkpoints/final.ptscored15/15/15on seeds11/12/13(object_2 and object_3 inside, object_1 outside), with seed-11 videologs/videos/task_e_act_eval/xsa_final_seed11_recheck.mp4. The same checkpoint deployed asdemo/policy_act.ptlater scored9on seed 11 and0on seed 12, so there is residual nondeterminism/contact instability. Currentdemo/policy_act.ptSHA256 is XSA finalc3eacae3f1b0ec8ccde9fdc05d680fff119cc2ca70e1f79e4ddd5610c4bbfa93; previous seed1 best was backed up asdemo/policy_act.seed1_best_backup_20260522_012719.pt.
- Dataset exists:
-
pi0.5 / OpenPI Task E branch, 2026-05-22:
- OpenPI repo/env:
$HOME/src/openpi-ebench-clean, Python env$HOME/envs/openpi-pi05; run withPYTHONPATH=$HOME/src/openpi-ebench-clean/src:$HOME/src/openpi-ebench-clean/packages/openpi-client/src,HF_LEROBOT_HOME=$HOME/projects/robotics_shared/datasets/lerobot,HF_HOME=$HOME/projects/robotics_shared/hf_cache. - Avoid: do not use
uv runin the OpenPI repo; it tries to create a large local.venvand download duplicated packages. - Converter:
scripts/pi05/convert_task_e_hdf5_to_lerobot.pymaps ATEC 8D Piper qpos/action to OpenPI fixed-base 16D paddedstate/action.{joints,gripper}and writes 3 identical 224x224 camera streams. 224 smoke datasetatec/task_e_obj321_servo_smoke2_stride10_224wrote 343 frames in about 70s and occupies 48M. - OpenPI configs added in
$HOME/src/openpi-ebench-clean/src/openpi/training/config.py:pi05_atec_task_e_smoke_224andpi05_atec_task_e_s5_224. The formals5_224config uses repoatec/task_e_obj321_servo_100demos_s5_224, batch size 1, 30k steps, save interval 30k to avoid 42G checkpoint spam. - Important fix: ATEC HDF5
actionsare env actions(joint_target-default)/0.5, not absolute joint targets, so all ATEC OpenPI configs must keepextra_delta_transform=False. Using the OpenPI delta transform here would subtract state again and train on the wrong target. - Smoke verification passed:
pi05_atec_task_e_smoke_224norm stats wrote under$HOME/projects/robotics_shared/checkpoints/openpi/atec_runs/assets/pi05_atec_task_e_smoke_224/...; 10-step train saved successfully once, but the temporary 42G checkpoint was deleted to preserve disk space. Log:logs/pi05_atec_task_e_smoke_224_10step_20260522.log. - Inference bridge added:
demo/solution_pi05.pytalks to an OpenPI websocket server and maps ATEC observation/action to/from the 16D fixed-base format. Eval entry point:scripts/pi05/eval_task_e_pi05.py. DefaultATEC_PI05_ACTION_REPEAT=5matches the current stride-5/fps-10 training dataset. After a checkpoint exists, usescripts/pi05/run_pi05_eval_checkpoint.sh <checkpoint_step_dir>to startscripts/serve_policy.py policy:checkpoint ..., run seeds 11/12/13, and record a seed-11 video. - Eval summary helper:
scripts/pi05/summarize_pi05_eval.py <logs/pi05_eval_*>parses seed logs for score/object basket status and is called automatically at the end ofrun_pi05_eval_checkpoint.sh. - Formal s5 conversion service started: unit from
logs/pi05_convert_task_e_s5_224.latest_unit, log fromlogs/pi05_convert_task_e_s5_224.latest; auto continuation servicelogs/pi05_s5_train_after_convert.latest_unitwaits for conversion, then computes norm stats and trainspi05_atec_task_e_s5_224. Eval watcherlogs/pi05_100demos_eval_after_train.latest_unitwaits for training, then callsCONFIG=pi05_atec_task_e_s5_224 PORT=8017 scripts/pi05/run_pi05_eval_checkpoint.sh <latest_ckpt>. - Early-signal branch:
pi05_atec_task_e_20demos_s5_224config uses repoatec/task_e_obj321_servo_20demos_s5_224, 2k steps, batch size 1, no delta transform. Conversion service/log are inlogs/pi05_convert_task_e_s5_224_20demos.latest_unitand.latest; auto continuation servicelogs/pi05_20demos_train_after_convert.latest_unitwaits, computes norm stats, then trains. Eval watcherlogs/pi05_20demos_eval_after_train.latest_unitwaits for training, then callsCONFIG=pi05_atec_task_e_20demos_s5_224 PORT=8016 scripts/pi05/run_pi05_eval_checkpoint.sh <latest_ckpt>. Use this for quick pi0.5 viability checks before the 100-demo run finishes. - Note: the first 20-demo training run started from the old script name
atec_task_e_pi05_20demos_s5_224_10k_20260522070624, but the loaded config was already patched tonum_train_steps=2000; the name is cosmetic. The script was patched afterward to use_2k_in future run names. - 20-demo result: checkpoint
.../pi05_atec_task_e_20demos_s5_224/atec_task_e_pi05_20demos_s5_224_10k_20260522070624/1999scored0/0/0on seeds 11/12/13. Logs:logs/pi05_eval_20260522074137; video:logs/videos/task_e_pi05_eval/pi05_pi05_atec_task_e_20demos_s5_224_seed11_20260522074137.mp4. The 42G 20-demo checkpoint directory was deleted after evaluation to preserve disk; dataset and logs were kept. - 100-demo formal run status, 2026-05-22 08:56 CST: conversion and norm stats are complete; training unit
atec-pi05-s5-train-after-convert-20260522065716.serviceis actively runningscripts/train.py pi05_atec_task_e_s5_224 --exp-name atec_task_e_pi05_s5_224_30k_20260522065716 --overwrite. Latest observed progress was about731/30000steps at roughly3.3-3.6 it/s, GPU util100%, ~80 GB VRAM. Log:logs/pi05_train_task_e_s5_224_20260522065716.log. - 100-demo checkpoint/eval gate: config
pi05_atec_task_e_s5_224saves only at30000steps (save_interval=30000), expected final dir.../checkpoints/pi05_atec_task_e_s5_224/atec_task_e_pi05_s5_224_30k_20260522065716/30000. Eval watcher unitatec-pi05-100demos-eval-after-train-20260522070900.servicewaits for the training unit, then runsCONFIG=pi05_atec_task_e_s5_224 PORT=8017 scripts/pi05/run_pi05_eval_checkpoint.sh <checkpoint>for seeds 11/12/13 and records a seed-11 video. - Deployment decision gate: current deployed ACT/XSA baseline is still
demo/policy_act.ptSHA256c3eacae3f1b0ec8ccde9fdc05d680fff119cc2ca70e1f79e4ddd5610c4bbfa93. Do not replace it with pi0.5 unless the 100-demo pi0.5 checkpoint has real ATEC Isaac eval evidence on seeds 11/12/13 and is clearly better. Required completion artifacts for this branch are: final checkpoint dir,logs/pi05_eval_*with seed11/12/13[RESULT]and[BASKET], andlogs/videos/task_e_pi05_eval/pi05_pi05_atec_task_e_s5_224_seed11_*.mp4. - Post-eval comparison helper:
scripts/pi05/compare_pi05_vs_act_baseline.py <logs/pi05_eval_*> --repo <repo>compares pi0.5 seed logs with current ACT/XSA evidence (eval_task_e_xsa_final_seed11/12/13_recheck.logplus deployed seed11 recheck) and printsHOLD_ACT_XSAunless pi0.5 is clearly better.scripts/pi05/run_pi05_eval_checkpoint.shcalls this automatically aftersummarize_pi05_eval.py. It was sanity-checked on the 20-demo failed eval and correctly reportedHOLD_ACT_XSA. - 100-demo result, 2026-05-22 11:27 CST: checkpoint
.../pi05_atec_task_e_s5_224/atec_task_e_pi05_s5_224_30k_20260522065716/29999(about 42G) evaluated atlogs/pi05_eval_20260522112701and scored seed110.00, seed120.00, seed136.00(mean2.00). Seed11 video:logs/videos/task_e_pi05_eval/pi05_pi05_atec_task_e_s5_224_seed11_20260522112701.mp4. The comparison helper printedHOLD_ACT_XSA; do not deploy pi0.5 over current XSA. - Monitoring: the old heartbeat automation
atec-task-e-seed2-resume-monitorwas deleted after the 100-demo pi0.5 train/eval completed, because the monitored branch is done. Recreate a new monitor only if starting another long run.
- OpenPI repo/env:
-
Known-good environment:
- Python:
$HOME/envs/genmanip-isaac5-py311/bin/python. - Required env prefix:
OMNI_KIT_ACCEPT_EULA=YES PYTHONUNBUFFERED=1. - Required
PYTHONPATH: IsaacLab source dirs under$HOME/envs/genmanip-isaac5-py311/lib/python3.11/site-packages/isaaclab/source/*, plussource/atec_rl_labandscripts/actfrom this repo.
- Python:
-
Current ACT baseline:
- Object 3 only works with dataset
datasets/atec_task_e, runruns/act-task-e-rgb-100demos-seed1, observed eval score about 6. - Baseline eval video:
logs/videos/task_e_act_eval/current_single_object_6pt.mp4.
- Object 3 only works with dataset
-
Scripted oracle status:
- Official/local Task E collector comment said object 3 works and object 1/2 need distance modifications.
- Piper gripper joint limits observed on 2026-05-20:
joint7is[0.0, 0.035],joint8is[-0.035, 0.0]. Use legal close target[0.0, 0.0], not[-0.015, 0.015]. - Object 2 had a previously observed basket candidate: offset
(dx=0.006, dy=0.046),z=0.045,carry_z=TABLE_TOP_Z+0.075,place_z=TABLE_TOP_Z+0.075,target_y=-0.24,yaw=-pi/2, keep gripper closed in transport. Treat this as not yet robust and likely push/slide rather than true lift: on 2026-05-20 a trace rerun showed the earlier search used candidate-index-dependent RNG, so success could be placement-specific. - On 2026-05-20 13:47, object 2 candidate search first 20 all failed under fixed trial seed. Best was cand 011 (
dx=0.030, dy=0.026, z=0.045, carry_z=TABLE_TOP_Z+0.075, target_y=-0.24, yaw=+pi/2), final(1.224,-0.009,1.213),reward_lifted=True, outside bydy=+0.291. Object 2 is not ready for demo collection/training. - Object 1 is unresolved as of 2026-05-20. Prior search candidates mostly pushed/slid the object; final basket failure alone was too weak to prove a real grasp. Add/keep per-stage diagnostics before trusting any object 1 candidate.
-
Important local changes:
scripts/act/eval_task_e_act.pyevaluates ACT and can record video.demo/solution_act.pysupportsATEC_ACT_POLICY_PATHandreset_episode().scripts/act/cli_args.pyadds--max_attempts;scripts/act/collect_demos_task_e.pyuses it and prints object basket status.scripts/act/task_e/collector.pyuses_BASKET_MAX_Z = TABLE_TOP_Z + 0.15, hasbasket_status_lines, and can return numeric trace diagnostics whentrace=Trueincluding object z-gain,gripper_basedistance, andlink7/link8finger-body center/gap metrics.scripts/act/search_task_e_grasps.pyis the per-object candidate bank/search entry point.scripts/act/search_task_e_grasps.pyshould keep trial seeds independent of candidate index so candidates are compared on the same object placements.scripts/act/search_task_e_grasps.pyprints[BEST]even when no candidate succeeds, using basket distance plus z-gain as a debugging score.scripts/act/search_task_e_grasps.pysupports--start_candidateto resume long searches without re-testing earlier candidates.scripts/act/search_task_e_grasps.pynow supports per-candidatepush_x/push_y/push_zplusclose/lift/transport/place/openstep overrides. Use this to test trajectory timing without editing global config for each trial.scripts/act/task_e/state_machine.pynow has object-servo transport/place/open support for object 1/2:OBJ_SERVO_TO_BASKET_STATES,OBJ_SERVO_XY_GAINS, andOBJ_SERVO_MAX_XYinscripts/act/task_e/config.py. The TRANSPORT correction is ramped by state progress to avoid yanking objects out of the gripper.scripts/act/collect_demos_task_e.pynow disables default cameras andcfg.observations.imagewhenneed_camera=False; this fixes headless collection without--enable_cameras.
-
Latest object 1 trace:
- On 2026-05-20 13:19, foreground search candidates 1-12 all failed:
lifted=False,reward_lifted=False,z_gainabout0.000-0.003m; best candidate was 004 but still finaly=0.210, far outside basket. Next search should resume at candidate 13 to test push/sweep fallback candidates. - On 2026-05-20 13:24, foreground search candidates 13-24 tested push/sweep fallback. No basket success yet, but contact is real: candidate 019 (
dx=0.040, dy=0.140, z=-0.020, carry_z=TABLE_TOP_Z+0.035, target_y=-0.240, yaw=0, push_y=-0.18) reachedlifted=True,reward_lifted=True,z_gain=0.388, final pos about(1.276, -0.072, 1.260). It overshoots upward/outside basket, so next search should refine around push_y-0.14..-0.18, lower carry/place behavior, and possibly static place release. - On 2026-05-20 13:36, focused candidates 25-34 around candidate 019 all failed. Best was cand 034:
dx=0.040, dy=0.140, z=-0.020, carry_z=TABLE_TOP_Z+0.035, target_x=-0.17, target_y=0.0, push_y=-0.18, final(1.280,-0.064,1.257),reward_lifted=True, still outside bydy=+0.236. - On 2026-05-20 13:42, timing candidates with longer/lower
TRANSPORTandPLACE/OPENoverrides all failed. Best was cand 002 withtransport_steps=900, final(1.280,-0.042,1.257), outside bydy=+0.258. This proves simply extending the push/sweep duration does not solve object 1; the contact geometry slips/throws the box before basket placement. - On 2026-05-20 14:15, object-servo ramp still failed object 1 first 8 candidates. Best was cand 003 (
push_y=-0.14,transport_steps=1200), final(1.294,-0.020,1.270),reward_lifted=True, outside bydx=+0.214, dy=+0.280. Object 1 still needs a different contact/grasp primitive, not more global servo.
- On 2026-05-20 13:19, foreground search candidates 1-12 all failed:
-
Latest object 2 trace:
- On 2026-05-20 14:14, object-servo ramp made fixed-seed search candidate 001 succeed for object 2: final
(1.050,-0.272,0.865),inside=True,z_gain=0.102, candidate{dx=0.006, dy=0.046, z=0.045, carry_z=TABLE_TOP_Z+0.075, target_y=-0.24, yaw=-pi/2}. - On 2026-05-20 14:20, random
only_successcollection for object 2 still failed 0/4 attempts: final y errors remained about+0.206..+0.310, one early termination. So object 2 is promising but not robust enough for dataset/training yet. - On 2026-05-20 14:26, adding PLACE hold-until-near-basket still failed random object 2 collection 0/4: final y errors stayed about
+0.206..+0.334. - On 2026-05-20 14:28, stronger object 2 servo (
gain=1.15,max_xy=0.36,TRANSPORT=480) also failed 0/4 and worsened x drift; reverted object 2 to the softer fixed-seed-success servo values (gain=0.85,max_xy=0.24, no transport override). Next object 2 work should focus on grasp/contact robustness before transport, not stronger basket servo. - On 2026-05-20 14:41, object 2 multi-seed candidate validation (
--trials 3 --max_candidates 12) found 0/12 robust candidates. The previous fixed-seed-success candidate failed immediately under this stricter check (result=0/3, final y error about+0.262). Best was yaw0.0withz_gain=0.355but final(1.197,-0.001,1.277), outside bydy=+0.299. Treat object 2 as contact/grasp unstable, not transport-servo-limited.
- On 2026-05-20 14:14, object-servo ramp made fixed-seed search candidate 001 succeed for object 2: final
-
Current debugging judgment:
- Do not integrate GraspNet first. For this small three-object simulated task, a reproducible scripted candidate bank with explicit lift/grasp diagnostics is faster and easier to pass code-review reproduction.
- If object 1 remains blocked, collect/train object 2+3 first for a practical score bump, then return to object 1. Next object 1 work should change the motion primitive/contact mode, not merely sweep more static offsets or longer transport times.
-
Useful verification commands:
- Single object 1 debug video:
python scripts/act/collect_demos_task_e.py --pick_objects 1 --num_demos 1 --max_attempts 3 --headless --enable_cameras --only_success --save_video --video_dir logs/videos/task_e_oracle_obj1_fixed --output_dir logs/debug_task_e_obj1_fixed. - Object 2+3 sanity check:
python scripts/act/collect_demos_task_e.py --pick_objects 2 3 --num_demos 1 --max_attempts 3 --headless --enable_cameras --only_success --save_video --video_dir logs/videos/task_e_oracle_obj23_fixed --output_dir logs/debug_task_e_obj23_fixed.
- Single object 1 debug video:
-
External reference checked:
https://github.com/fiveages-sim/lerobot_ros2is a public ROS2/LeRobot integration repo. It exposes generic ROS2 robot/camera wrappers and examples withsingle_arm.pick/placeYAML skills, but it does not directly provide an ATEC Piper-compatible grasp planner. Itsrobot_action_composersubmodule is private/inaccessible by HTTPS clone in this environment.