Okay, here is the abstract and summary for the provided Jugglebot transcript.
Abstract:
This video documents recent progress on the Jugglebot project, focusing on achieving accurate 6-DOF (position and orientation) control through improved calibration techniques. The previous calibration method, using only position data and nearest-neighbor error correction, was significantly enhanced. A new calibration dataset was collected using a 100-point grid combined with multiple roll/pitch angles (+/- 5°, +/- 10°), resulting in over 2100 valid poses. A KD-tree combined with weighted interpolation from the 8 nearest neighbors is now used to apply feedforward error correction, drastically reducing pose errors (from 90/94 "bad" poses to 0/94 "bad" poses under test conditions) and enabling accurate control without manual offsets. Challenges encountered included a temporarily unresponsive actuator ("tired leg"), requiring ODrive recalibration, and managing high memory usage on the Jetson control computer. A new task, shooting hoops into a motion-captured cone, was attempted. While the robot could calculate trajectories and orient itself correctly using the new calibration, the throws failed due to inconsistent and "limp" hand movements, suspected to be caused by timing issues and overloading the main control node. A proposed solution involves offloading the hand trajectory generation and precise timing execution to the underutilized Teensy microcontroller onboard the robot, leveraging its potential real-time capabilities. Initial tests show the Teensy is more than capable of generating these trajectories extremely quickly (e.g., 88 microseconds). This approach, however, necessitates robust clock synchronization between the Jetson and the Teensy.
[0:00:59] Orientation Calibration Achieved: Unlike the previous update (which only achieved position accuracy), Jugglebot can now accurately reach commanded 6-DOF poses (position and orientation).
[0:02:23] (Tangent) Music for Juggling: The creator shares songs envisioned for a large-scale Jugglebot performance (Arrival by Cream, Heaven Listen by Weevil, All Melody by Nils Frahm) and invites suggestions.
[0:04:53] Previous Calibration Recap: Used a 100-point grid, measured errors, and applied the error from the nearest calibration point as feedforward correction. This only addressed position.
Adds commanded roll/pitch angles (+/- 5° and +/- 10°) at each grid point.
Resulted in ~2500 commanded poses, taking 2.5-3 hours to collect data using motion capture.
[0:09:03] Challenge 1: "Tired Leg": During calibration data collection, Leg 4 became slow and unresponsive. Required pausing, re-running the ODrive motor calibration, and resuming data collection. This issue sometimes occurs, possibly hardware-related or due to inactivity.
[0:12:46] Challenge 2: Unreachable Poses: 326 commanded poses were physically unreachable by the robot and removed from the dataset, leaving 2174 valid calibration poses.
[0:14:23] Improved Correction: KD-Tree & Interpolation: Instead of just using the nearest neighbor, a KD-tree structure is used for fast searching, and the feedforward correction is calculated by weighting the errors from the nearest 8 calibration poses. This provides a smoother, more accurate correction.
[0:19:10] KD-Tree Performance: The search and interpolation typically takes 2-3 milliseconds, fast enough for real-time control (e.g., 100Hz).
Feedforward OFF: 90 out of 94 random test poses were "bad" (>10mm position error or >1.5° orientation error). Significant error patterns observed.
Feedforward ON (Healthy Leg): 0 out of 94 test poses were "bad". Errors drastically reduced and appear more random (noise-like). Rotational accuracy significantly improved.
Feedforward ON (Tired Leg): 52 out of 96 test poses were "bad". Shows the correction helps, but actuator health is critical.
[0:30:16] Proposed Fix for "Tired Leg": Implement an automated daily ODrive calibration routine within ROS.
[0:34:06] Validation Success: Catch Dropped Ball: The node that tracks and catches a dropped ball now works accurately with zero hardcoded offset, whereas previously it needed ~70mm manual offset.
[0:39:22] (Tangent) Jetson Memory Issues: VS Code SSH and PlotJuggler consume significant RAM (~1GB). High RAM usage caused the Jetson to freeze during calibration; closing VS Code resolved it. Trying to manage application usage better.
[0:42:40] Mocap System Improvement: Changed ROS integration so any rigid body defined in the mocap software (QTM) automatically gets its own ROS topic for pose data, simplifying adding new tracked objects (like the hoop).
[0:46:03] Failed Feature: Base Drift Detection: An attempt to automatically detect if the robot base moved relative to the mocap origin (by monitoring the base rigid body pose) failed due to too many false positives caused by minor shifts from carpet/movement/occlusion. Needs refinement (e.g., low-pass filtering).
[0:51:50] New Goal: Hoop Shooting: Attempting to make Jugglebot throw a ball into a motion-captured cone ("hoop").
Calculates the required throw trajectory (platform angle, launch velocity) in real-time.
Orients the platform based on the calculated trajectory.
Commands the hand to execute the throw.
[0:57:31] Hoop Shooting Attempt (Failure): Multiple attempts showed the platform orienting correctly, but the hand failed to throw properly. Throws were "limp," inconsistent, or timed out.
[1:04:41] Diagnosis of Throw Failure: Suspected cause is timing problems with sending the high-frequency (500Hz) hand motor commands from the main Jetson computer. The responsible ROS node (CAN Interface) might be overloaded with other tasks (controlling legs, checking base pose).
[1:08:18] Proposed Solution: Offload to Teensy: Move the hand trajectory generation and, critically, the precisely timed execution of hand commands to the onboard Teensy microcontroller.
[1:10:42] Teensy Performance Validation: Tests on a separate Teensy show it can generate the required hand trajectories extremely quickly (e.g., throw trajectory in 24µs, full throw-wait-catch in 88µs), proving its capability.
[1:19:25] Challenge with Teensy Solution: Clock Sync: This approach requires highly accurate clock synchronization between the Jetson (which decides when to throw) and the Teensy (which executes the throw at that precise time). A strategy is proposed where Jetson tells Teensy the absolute time and velocity for the throw.
[1:22:01] Significance: If the Teensy offloading and clock sync works, it's a major step towards enabling robust catching and throwing, the core components of juggling.