<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Aditya Mittal - About Me</title><description>I'm a Masters student at UC Irvine, and my research interests are in fairness in machine learning.</description><link>https://adityamittal03.github.io/</link><language>en</language><copyright>Copyright 2026, Aditya Mittal</copyright><lastBuildDate>Tue, 23 Jun 2026 14:50:27 -0400</lastBuildDate><generator>Hugo - gohugo.io</generator><docs>http://cyber.harvard.edu/rss/rss.html</docs><atom:link href="https://adityamittal03.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Recreating CRAFT: Hardware Lessons for Dexterous Manipulation</title><link>https://adityamittal03.github.io/blog/recreating-craft-hand/</link><description>&lt;p class="post-subcaption"&gt;Rebuilding CRAFT from the hardware up: compliant fingers, tendon routing, robot mounting, Quest-based teleoperation, and early policy rollouts.&lt;/p&gt;
&lt;div class="craft-hero-pair" aria-label="CRAFT build teaser"&gt;
&lt;figure class="craft-hero-primary"&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/craft-hand-1.png" alt="Assembled CRAFT robot hand with fingers extended on a lab bench"&gt;
&lt;figcaption&gt;Completed CRAFT build: compliant fingers, routed tendons, compact actuators.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;div class="craft-hero-stack"&gt;
&lt;figure&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/i2rt-yam-craft-mounted-front.jpg" alt="CRAFT hand mounted on the left I2RT Yam arm in the bimanual tabletop setup"&gt;
&lt;figcaption&gt;CRAFT mounted on the Yam arm in the bimanual workspace.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="craft-hero-video"&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/vision-teleop-basket-test.mp4?v=20260709b"&gt;&lt;/video&gt;
&lt;figcaption&gt;Vision teleoperation: orange pick-and-place.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Most robot grippers are effective clamps: they open, close, and work well when the object
is already in the right place. Dexterous hands support more complex forms of
manipulation: rotating objects in-hand, wrapping around fragile items, using tools, and
recovering grasps when contact is imperfect. This post documents my experience building
the &lt;a href="https://craft-hand.github.io/"&gt;CRAFT&lt;/a&gt; hand at the UNVEIL Lab, originally developed
by Leo Lin et al. at UIUC. The design principle is simple and appealing: passive
compliance helps the hand adapt to contact, while tendon-driven actuation keeps the
hardware compact.&lt;/p&gt;
&lt;h2 id="the-original-craft-hand"&gt;The Original CRAFT Hand&lt;/h2&gt;
&lt;div class="craft-overview-layout"&gt;
&lt;div&gt;
&lt;p&gt;CRAFT stands out because it combines low-cost hardware with passive compliance. The
hand costs under $600, weighs 800 g, and can be built mostly from 3D-printed parts and
off-the-shelf components. It uses rigid PLA where the hand needs structure and soft TPU in
the finger joints, where impacts and contact uncertainty matter most. This makes the hand
more forgiving around fragile, deformable, or irregularly shaped objects without turning
the whole finger into a soft, hard-to-control appendage.&lt;/p&gt;
&lt;p&gt;The hand remains dexterous: each finger has base flexion/extension, base
abduction/adduction, and coupled middle/fingertip flexion, giving the hand 15 active
degrees of freedom plus 5 passive degrees of freedom. The motors sit away from the fingers
and pull through tendons, which keeps the fingers light and close to human scale. The
original paper reports coverage of all 33 Feix grasp types and demonstrates teleoperation
with delicate objects such as eggs, raspberries, chips, and wine glasses.&lt;/p&gt;
&lt;/div&gt;
&lt;figure&gt;
&lt;video controls autoplay loop muted playsinline preload="metadata" aria-label="Original CRAFT robot hand from the project paper" src="https://adityamittal03.github.io/blog/craft-hand/original-craft-hand.mp4"&gt;&lt;/video&gt;
&lt;figcaption&gt;Original CRAFT prototype from the project paper, showing the compact tendon-driven layout and hybrid rigid-soft fingers.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="step-1-building-the-compliant-fingers"&gt;Step 1: Building the Compliant Fingers&lt;/h2&gt;
&lt;p&gt;The build started with the compliant fingers. Each finger combines white PLA link shells
with black TPU joint pieces. The PLA provides structure and clean mounting interfaces,
while the TPU forms the bending regions so the finger can deflect during contact instead
of behaving like a fully rigid linkage. During assembly, the main constraint was
alignment: the pins, fasteners, and printed interfaces had to seat cleanly without
compressing the TPU enough to restrict joint motion.&lt;/p&gt;
&lt;p&gt;I first built a single finger to validate the PIP/DIP stack before repeating the process
across all five fingers. The finger needed to bend smoothly by hand, return without
obvious binding, and avoid side-loading between the printed parts. Once that validation
passed, I assembled the remaining finger modules and staged them around the palm for
tendon integration.&lt;/p&gt;
&lt;div class="craft-process-gallery" aria-label="Compliant finger build process"&gt;
&lt;figure&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/compliant-finger-bend-test.jpg" alt="Single compliant CRAFT finger module bent by hand during assembly"&gt;
&lt;figcaption&gt;Single finger module: PLA forms the rigid links, while TPU adds compliance
at the joints.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/compliant-finger-modules.jpg" alt="Several assembled CRAFT compliant finger modules laid out on a workbench"&gt;
&lt;figcaption&gt;Finger modules during assembly. The flexible TPU joints made alignment
important before tendon routing.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/compliant-fingers-palm-layout.jpg" alt="CRAFT finger modules laid out around the palm plate before final assembly"&gt;
&lt;figcaption&gt;Finger modules staged around the PLA palm plate before tendon routing and
final mounting.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Tendon routing turned the finger modules into actuated fingers. Pulling the flexion tendon
curls the finger, while the rolling-contact geometry keeps the PIP and DIP joints moving
together instead of letting the fingertip fold independently. The key requirement was not
just motion, but repeatable force transmission. A small rubbing point or sharp exit angle
can produce weak, delayed, or inconsistent fingertip motion from the same motor command.&lt;/p&gt;
&lt;div class="craft-finger-motion" aria-label="Tendon-driven compliant finger motion videos"&gt;
&lt;figure&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/tendon-driven-finger-motion.mp4?v=20260709b"&gt;&lt;/video&gt;
&lt;figcaption&gt;Manual tendon test during assembly, checking side-to-side motion, finger
bend, and curl before motor integration.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="craft-finger-motion__teleop"&gt;
&lt;div class="craft-finger-motion__teleop-frame"&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/desktop-first-teleop-2.mp4?v=20260709a"&gt;&lt;/video&gt;
&lt;/div&gt;
&lt;figcaption&gt;First desktop teleoperation test, mapping tracked hand motion to CRAFT
motor commands.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="step-2-mounting-craft-on-the-existing-bimanual-setup"&gt;Step 2: Mounting CRAFT on the Existing Bimanual Setup&lt;/h2&gt;
&lt;p&gt;After bench assembly, the next step was integrating CRAFT with the existing bimanual I2RT
Yam Ultra setup. The original setup used stock parallel-jaw grippers, which are reliable
for simple pick-and-place tasks but reduce the end-effector command to opening and
closing. Mounting CRAFT on the wrist turned the hand from a standalone build into part of
the robot platform. The payload budget was sufficient: the Yam Ultra is rated for 4 kg,
while CRAFT is reported at about 800 g, leaving margin for the adapter, fasteners, and
wiring.&lt;/p&gt;
&lt;figure class="craft-mount-before"&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/i2rt-yam-original-gripper-arm.jpg" alt="I2RT Yam robot arm with its original gripper before mounting the CRAFT hand"&gt;
&lt;figcaption&gt;Yam Ultra arm with the stock parallel-jaw gripper before the CRAFT
retrofit.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;To adapt the arm, I used Autodesk Fusion and the available I2RT STL files as the starting
geometry for a printable wrist mount. The design requirements were mostly mechanical:
match the Yam wrist pattern, interface cleanly with the CRAFT mount, keep the fingers
oriented toward the workspace, preserve wrist clearance, and leave a usable path for
wiring. I checked the wrist motion in MuJoCo before printing, then mounted the hand on the
left arm and staged the workspace for teleoperation.&lt;/p&gt;
&lt;div class="craft-mount-gallery" aria-label="CRAFT mounted on the I2RT Yam setup"&gt;
&lt;figure class="craft-mount-gallery__wide"&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/i2rt-yam-craft-mounted-front.jpg" alt="CRAFT hand mounted on the left I2RT Yam arm in the bimanual tabletop setup"&gt;
&lt;figcaption&gt;CRAFT mounted on the left Yam arm, with the bimanual workspace staged for teleoperation.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="craft-mount-gallery__portrait"&gt;
&lt;img src="https://adityamittal03.github.io/blog/craft-hand/i2rt-yam-mounted-hand-top-view.png?v=20260709c" alt="Top view of CRAFT hand mounted on the I2RT Yam setup near tabletop task objects"&gt;
&lt;figcaption&gt;Top view of the mounted hand, showing its position relative to the tabletop objects.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="step-3-quest-based-vr-teleoperation"&gt;Step 3: Quest-Based VR Teleoperation&lt;/h2&gt;
&lt;div class="craft-teleop-layout"&gt;
&lt;div&gt;
&lt;p&gt;With the hand mounted, the next requirement was a control interface for collecting
demonstrations. We used Quest-based VR teleoperation: the headset tracks the
operator's hand pose, and the retargeting layer maps that motion into CRAFT's motor
limits. The thumb mapping required additional calibration because small tracking or
frame errors produced large changes in the commanded thumb motion.&lt;/p&gt;
&lt;p&gt;For arm motion, we used an &lt;a href="https://robot-tv.github.io/"&gt;Open-TeleVision&lt;/a&gt;-style
setup in which the operator's wrist pose commands the robot wrist and guides the arm.
When the wrist frame was aligned, the arm and hand could be controlled as one
coordinated system rather than as two separate interfaces. The early demonstrations
included simple pick-and-place tasks, followed by a wine-pouring setup assisted by
&lt;a href="https://guardrail-policy.github.io/"&gt;GLIDE&lt;/a&gt; guardrails. In that setting,
GLIDE filters unstable commands around the glass grasp and pour while the operator
still provides the task-level motion.&lt;/p&gt;
&lt;/div&gt;
&lt;figure class="craft-teleop-featured craft-teleop-featured--vertical"&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/physical-vr-teleop.mp4"&gt;&lt;/video&gt;
&lt;figcaption&gt;Quest-based VR teleoperation with CRAFT mounted on the robot wrist.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class="craft-video-grid craft-video-grid--duo" aria-label="Quest-based VR teleoperation task videos"&gt;
&lt;figure&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/vision-teleop-table-grasp.mp4?v=20260709b"&gt;&lt;/video&gt;
&lt;figcaption&gt;Pick-and-place with a white cup, where compliance helps the fingers
conform without over-squeezing the object.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/vision-teleop-pour-setup.mp4"&gt;&lt;/video&gt;
&lt;figcaption&gt;More complex wine-pouring setup with GLIDE guardrails, where the hand,
robot, camera, and workspace must stay coordinated.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h3 id="pi05-policy-rollout"&gt;Pi0.5 Policy Rollout&lt;/h3&gt;
&lt;p&gt;After collecting human demonstrations, we tested a rollout using
&lt;a href="https://arxiv.org/abs/2504.16054"&gt;pi0.5&lt;/a&gt; with
&lt;a href="https://guardrail-policy.github.io/"&gt;GLIDE&lt;/a&gt; assistance. This setup changes the
role of the operator: instead of directly commanding every motion, the learned policy
attempts the wine-serving behavior while GLIDE filters unstable commands around the grasp
and pour.&lt;/p&gt;
&lt;div class="craft-video-grid" aria-label="Pi0.5 policy rollout video"&gt;
&lt;figure&gt;
&lt;video controls preload="metadata" playsinline muted src="https://adityamittal03.github.io/blog/craft-hand/videos/wine-serving.mp4"&gt;&lt;/video&gt;
&lt;figcaption&gt;Pi0.5 wine-serving policy rollout with GLIDE guardrails filtering unstable commands.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="challenges-and-lessons-learned"&gt;Challenges and Lessons Learned&lt;/h2&gt;
&lt;p&gt;As a beginner, some lessons were obvious only after the fact. The hard part was turning a
printed hand into a dependable robot system: parts, assembly, calibration, contact, and
real-robot debugging.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spares matter more than expected. The parts list was not the issue; my assumption was
that exact quantities would be enough. A broken motor, missing screw, or failed print can
turn into a one- or two-week delay without extra screws, bearings, tendons, inserts, and
at least one spare actuator.&lt;/li&gt;
&lt;li&gt;Retargeting was not plug-and-play. The Quest gave us a usable hand pose, but the mapping
to CRAFT still needed calibration. Thumb motion needed more useful side-to-side control,
and even a small wrist-frame mismatch could make the robot feel unintuitive.&lt;/li&gt;
&lt;li&gt;Contact was more than closing the fingers. The hand could wrap around a bottle and still
slip during pouring, which made it clear that enclosing an object is not the same as
gripping it. Friction tape helped temporarily, but better fingertip pads or coatings would
make contact more reliable.&lt;/li&gt;
&lt;li&gt;Motor torque became a real hardware limit. The small DYNAMIXEL servos keep CRAFT compact
and affordable, but they limit grasp strength during stronger holds, slip recovery, and
tasks where the object applies a moment to the fingers.&lt;/li&gt;
&lt;li&gt;Simulation stopped short of the full system. Once CRAFT was mounted on the Yam arm with
the adapter and tendon routing, many issues only appeared on hardware. A better Yam +
CRAFT simulation would make it easier to test retargeting, wrist alignment, and policy
rollouts before real-robot trials.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="next-steps"&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;The next goal is to turn the build from a working prototype into a repeatable experiment
platform. That means reducing the amount of manual adjustment needed between runs and
making failures easier to diagnose.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Standardize maintenance. Keep a small spare-parts kit for screws, bearings, tendons,
inserts, and actuators, then document the assembly order and common failure points so
repairs do not depend on memory.&lt;/li&gt;
&lt;li&gt;Make tendon routing more repeatable. Cleaner exits, better retensioning points, and less
rubbing would make finger motion more consistent. Finger modules should also be easier to
remove without disturbing the rest of the hand.&lt;/li&gt;
&lt;li&gt;Improve fingertip contact. Replace the temporary friction tape with pads or coatings that
provide repeatable grip without making the fingers too stiff. This would make pouring and
heavier grasps less sensitive to slip.&lt;/li&gt;
&lt;li&gt;Turn calibration into a procedure. Thumb retargeting and wrist-frame alignment should use
a short routine with saved parameters, rather than being adjusted by feel each session.&lt;/li&gt;
&lt;li&gt;Build an integrated Yam + CRAFT simulation. The simulation should include the adapter,
wrist limits, approximate hand geometry, and task objects, so retargeting and simple
policy changes can be tested before hardware trials.&lt;/li&gt;
&lt;li&gt;Add contact feedback. Fingertip tactile sensing, or even simpler slip/contact indicators,
would make it easier to understand why a grasp fails instead of relying only on camera
views and visual inspection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="citations"&gt;Citations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://craft-hand.github.io/"&gt;CRAFT: A Tendon-Driven Hand with Hybrid Hard-Soft Compliance&lt;/a&gt;
(&lt;a href="https://arxiv.org/abs/2603.12120"&gt;arXiv&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://robot-tv.github.io/"&gt;Open-TeleVision: Teleoperation with Immersive Active Visual Feedback&lt;/a&gt;
(&lt;a href="https://github.com/OpenTeleVision/TeleVision"&gt;code&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guardrail-policy.github.io/"&gt;GLIDE: Guardrails for Learning from Infeasible Demonstrations Efficiently&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2504.16054"&gt;pi0.5: a Vision-Language-Action Model with Open-World Generalization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Aditya Mittal</author><guid>https://adityamittal03.github.io/blog/recreating-craft-hand/</guid><pubDate>Tue, 23 Jun 2026 14:50:27 -0400</pubDate></item></channel></rss>