URDF-conditioned Graph IK
Learned inverse kinematics that reads a robot's URDF as a kinematic graph and solves IK for arms it was not
trained on, with no previous joint state required. Each folder experiments/<name>/ holds model.pt,
config.json, metrics.json, tables/ (CSV / Markdown / LaTeX) and videos/.
Experiments: loro_irb2400_s0, loro_irb5400_s0, loro_irb6640_s0, loro_kr16_2_s0
Main results
not run
Baselines
not run
Ablations
not run
Leave-one-robot-out
| held_out_robot | base | n_seeds | unseen robots none net succ_std | unseen robots none net pos_mm_med | unseen robots none net rot_deg_med | unseen robots none full succ_std | unseen-robot variants none net succ_std | baseline unseen robots dls_multistart_9 succ_std | baseline unseen robots pybullet_ik succ_std | baseline unseen robots ikpy succ_std |
|---|---|---|---|---|---|---|---|---|---|---|
| irb2400 | loro_irb2400 | 1 | 0.9478 | 0.779 | 0.02744 | 0.9888 | 0.9451 | 0.9725 | 0.985 | 0.85 |
| irb5400 | loro_irb5400 | 1 | 0.7944 | 2.129 | 0.06006 | 0.9971 | 0.7771 | 0.9625 | 0.9775 | 0.8875 |
| irb6640 | loro_irb6640 | 1 | 0.8779 | 1.949 | 0.03315 | 0.9966 | 0.8586 | 0.9625 | 0.985 | 0.8475 |
| kr16_2 | loro_kr16_2 | 1 | 0.9578 | 0.944 | 0.02589 | 0.9917 | 0.9529 | 0.94 | 0.955 | 0.7875 |
| MEAN | 0.8945 | 1.45 | 0.03664 | 0.9935 | 0.8834 | 0.9594 | 0.9756 | 0.8431 |
Compute
| base | n_seeds | compute cuda b1 ms | compute cuda b1024 ms | compute cpu b1 ms | compute cpu b256 ms | train_min | train_it_s | train_gpu_GB |
|---|---|---|---|---|---|---|---|---|
| loro_irb2400 | 1 | 178 | 671.1 | 121.4 | 4745 | 157.3 | 4.239 | 1.302 |
| loro_irb5400 | 1 | 174.1 | 674.1 | 115.6 | 5015 | 157.3 | 4.239 | 1.302 |
| loro_irb6640 | 1 | 174.6 | 647 | 120 | 4608 | 157.5 | 4.232 | 1.302 |
| loro_kr16_2 | 1 | 173.9 | 645 | 117.3 | 4596 | 156.4 | 4.264 | 1.302 |
Load a model
from huggingface_hub import hf_hub_download
import torch
ck = torch.load(hf_hub_download("iFaz/urdf-graph-ik-journal-loro", "experiments/main_s0/model.pt"), weights_only=False)
# model = build_model(ck["cfg"], ck["text_dim"]); model.load_state_dict(ck["state"])