Calibration Constrained Data Quality

Before collecting data, I calibrated the encoder offsets and allowable joint ranges on both arms so that a pose on the leader corresponded to the same physical pose on the follower. This established the coordinate relationship underlying every demonstration.

Power introduced a different integration failure. The leader’s 7.4 V servos were accidentally connected to the follower’s 12 V supply, causing the entire leader arm to stop returning status packets. The symptom initially resembled a serial communication failure, but the cause was electrical.

After separating the power rails, I tested each affected servo individually for correct identification, temperature, motion, and calibration before returning the system to operation. That failure reinforced an important mechatronics principle: the subsystem reporting the error is not necessarily the subsystem causing it.

Demonstrations To Training Data

I recorded 117 variations of the tape-measure pick-and-place task. Each episode contained timestamped wrist and overhead video, follower joint states, commanded actions, and episode metadata.

Camera streams were stored as MP4 files, while joint states and actions were saved as structured Parquet data with normalization metadata. I then uploaded the dataset to the Hugging Face Hub for training through the LeRobot ecosystem.

Synchronization was critical. The model’s training signal is fundamentally: Given this image and this robot state, what action should happen next?

I also had to balance diversity with consistency. I varied the tape measure’s position and orientation so the robot could not memorize one trajectory. At the same time, my demonstrations needed a consistent strategy. Hesitation, unnecessary corrections, and failed grasps could all become behaviors the model attempted to reproduce.

Action Chucking Transformer (ACT) Policy

I trained an Action Chunking Transformer, or ACT, for 100,000 steps.

ACT receives the camera observations and current joint state, then predicts a short sequence—or chunk—of future joint actions. This helps the policy represent coordinated movements such as closing the gripper while beginning to lift, rather than treating every motor command as an independent decision.

Predicting short action sequences can also produce smoother behavior and reduce the accumulation of small errors between individual control steps.

A decreasing training loss showed that the model was fitting the demonstrations. It did not prove that the robot could complete the task. That required closed-loop testing on physical hardware, where every predicted action changed the scene the model observed next.

Discovering Compute Bottlenecks

During physical rollouts, the control loop would begin near 30 Hz and quickly fell to 9 Hz. In a separate diagnostic condition, USB contention reduced the loop from roughly 60 Hz to 1 Hz while camera frames became more than 600 milliseconds old.

At that point, the policy was making decisions about a scene that no longer existed. Commands arrived late, motion became jerky, and positioning errors grew faster than the robot could correct them.

I treated the robot as an end-to-end timing system: Camera capture → USB transfer → image preprocessing → neural-network inference → action generation → serial communication → servo response.

Any stage could constrain the entire loop. Rather than assuming the model was too slow, I measured loop frequency and frame age, isolated USB devices across different ports and hubs, reduced camera resolution and frame rate, and tested camera acquisition, inference, and motor communication independently. I used Rerun visualization to compare the observations received by the policy with the actions it commanded, and repeated deployment tests on both Apple Silicon and my Jetson Orin Nano Dev Kit.

Importance of Root-Cause Analysis

During some policy rollouts, repeated wrist-roll commands also caused the joint to overheat, despite the same motor functioning properly during manual teleoperation.

Potential mechanisms included calibration error, repeated oscillatory commands, joint-limit behavior, or a motion pattern learned from the demonstrations. I conducted a series of tests to isolate possible root-causes, ultimately determining the motor was mis-calibrated which caused the ACT policy to command positions that strained the motor beyond its mechanical limit.

This taught me how to best investigate hardware failures in projects with many electromechanical subsystems: document the symptom, generate plausible mechanisms, design tests that separate them, and avoid declaring a cause before the evidence supports it.

What Comes Next

The robot demonstrated reliable placement and release once it achieved a secure grasp. Initial grasping remained inconsistent because of observation geometry and control-loop performance.

The next iteration will move the overhead camera forward to reduce self-occlusion, add RGB-D sensing for depth, improve the compute and camera pipeline, and evaluate performance systematically across controlled object positions. I would measure success separately for approach, grasp, transport, and release so each failure can be traced to the stage that produced it.

This project changed my understanding of embodied AI. The bottleneck to reliable autonomy was not simply model architecture or training dataset size. Performance depended on calibrated joints, correct power, observable geometry, synchronized demonstrations, fresh camera frames, adequate compute, healthy serial communication, and tests designed to distinguish one failure mechanism from another.

The policy learned the behavior, but the quality of the entire mechatronic system determined whether that behavior survived contact with the physical world.

I’m always interested in meeting engineers, founders, and teams working on ambitious problems. If you want to collaborate- or think I could contribute to your team- I’d love to hear from you.

I’m always interested in meeting engineers, founders, and teams working on ambitious problems. If you want to collaborate- or think I could contribute to your team- I’d love to hear from you.