File size: 5,314 Bytes
dc7e695 6fd59cb dc7e695 6fd59cb df3672e 6fd59cb cb65137 6fd59cb 33cb619 6fd59cb cb65137 6fd59cb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | ---
license: mit
library_name: jax
tags:
- robotics
- motion-planning
- datafarm
- franka
- numpy
datasets:
- lerobot/droid_1.0.1
---
# DATAFARM JAX Motion Encoder — Franka
Pretrained DATAFARM motion encoder weights converted losslessly to a pickle-free
NumPy archive for inference in JAX. The implementation and PyRoki integration are
in [DataFarm-PyRoki](https://github.com/abhaybd/DataFarm-PyRoki).
Original method: [DATAFARM: Distribution-Aligned Task and Motion Planning for
Fine-Tuning Vision-Language-Action Models](https://arxiv.org/abs/2609.12316)
by Samrat Sahoo, Yixuan Huang and Tom Silver (2026).
See the [original DATAFARM repository](https://github.com/SamratSahoo/DATAFARM)
and [project website](https://prpl-group.com/datafarm/).
The frozen encoder maps a joint trajectory to a 16-dimensional latent mean. A
fixed DROID reference Gaussian supplies the squared Mahalanobis motion-style cost
used during trajectory optimization and subsequent trajectory segment retiming.
## Model contract
- Embodiment: DROID Franka arm, seven joint-position coordinates in radians.
- Training order: `joint1`, `joint2`, `joint3`, `joint4`, `joint5`, `joint6`, `joint7`,
proximal to distal. Gripper coordinates are excluded.
- Training sample rate: 15 Hz. The loader accepts a source timestep and resamples.
- Input: `[time, 7]` or `[batch, time, 7]`; internally standardized position,
velocity, acceleration and jerk features.
- Output: 16-dimensional latent mean, with a saved reference mean and precision.
- Serialization: `droid_encoder.npz`, schema version 1; load with `allow_pickle=False`.
Coordinate names record training order. Supply an explicit `JointMap` for URDF
aliases in PyRoki; a matching joint count alone does not establish compatibility
with another robot.
## Load in JAX
Install the tested implementation in a uv environment:
```sh
uv venv
uv pip install "datafarm-pyroki @ git+https://github.com/abhaybd/DataFarm-PyRoki.git@d465221b9cf88efbb8ecd53fb10f04291dd97e7a" huggingface_hub
```
This model is public and downloads without authentication.
```python
import jax
import jax.numpy as jnp
from huggingface_hub import hf_hub_download
from datafarm_pyroki import load_encoder
checkpoint = hf_hub_download(
repo_id="abhaybd/DataFarm-Jax-MotionEncoder-Franka",
filename="droid_encoder.npz",
)
encoder = load_encoder(checkpoint)
# Synthetic input, in training joint order; replace with your trajectory.
q = jnp.zeros((32, 7))
latent = encoder.latent(q, source_dt=0.15)
cost, gradient = jax.jit(
jax.value_and_grad(lambda positions: encoder.cost(positions, source_dt=0.15))
)(q)
```
Inference uses JAX and does not require PyTorch, CUDA, cuRobo or TiPToP.
The implementation supports CPU and appropriate JAX accelerator backends.
See the code repository for whole-leg PyRoki costs and standalone trajectory segment retiming.
## Architecture
Six dilated Conv1D filterbank branches contribute masked mean/std features.
A parallel strided temporal CNN contributes masked mean/std/max features.
The concatenated 672 features pass through an MLP with LayerNorm and exact GELU,
then a linear head produces latent mean and log variance. The archive preserves
all 77 state-dict tensors, normalization buffers, reference statistics and the
auxiliary training head. Planning uses the deterministic latent mean.
## Training provenance
This repository distributes a conversion of the released weights, without
retraining. The original checkpoint is from
[SamratSahoo/DATAFARM](https://github.com/SamratSahoo/DATAFARM/tree/fd403ea6eb16163261a13439fe9bbc10a980f50d).
The artifact's own metadata describes 30,000 DROID training episodes plus cuTAMP
motion, fingerprint regression and a Fisher-discriminant objective on balanced
DROID/cuTAMP batches, selected using held-out pair silhouette. Its reference
latent statistics are DROID-derived. This metadata differs from the current
upstream README/training script; [provenance.json](provenance.json) retains the
checkpoint metadata and exact source/conversion checksums.
## Validation and use
The JAX implementation is checked against the original PyTorch network for
preprocessing, latent outputs, masked inference, motion costs and gradients.
The code repository also tests float32/float64 batch consistency, retiming
profile/duration gradients, joint mapping and PyRoki integration. Numerical
parity does not establish performance on another embodiment or physical robot.
This is a learned motion-style score, not a collision or kinematic feasibility
check. Keep your task, joint-limit and collision constraints when using it in a
planner. The code repository documents the relevant validation hooks.
## Files and integrity
- `droid_encoder.npz`: converted encoder weights and normalization/reference statistics.
- `provenance.json`: source revision, training metadata and SHA256 hashes.
- `DATAFARM-LICENSE.txt`: original MIT license and attribution.
SHA256 of `droid_encoder.npz`:
```text
ed6296980f448704c92e88cc91e9767a7dd4b758e82b93b80adc80178ee825a9
```
## License and attribution
The original encoder and weights are MIT-licensed, Copyright (c) 2026 Samrat Sahoo.
See [DATAFARM-LICENSE.txt](DATAFARM-LICENSE.txt). The JAX port is maintained in
[DataFarm-PyRoki](https://github.com/abhaybd/DataFarm-PyRoki).
|