Skip to main content
FryBot Platform Bring-Up

Productive Robotics

FryBot Platform Bring-Up

Led the complete software bring-up of FryBot — a custom 7-DOF gantry robot using GIM6010 pancake CAN motors that were entirely new to the company's EtherCAT-only codebase — from bare hardware to operational over 6 months. Built the URDF kinematic model, per-joint PID tuning, a real-time motor dashboard, Nonius encoder calibration, and a job management system. This is the core workflow at companies building new robot platforms: Boston Dynamics, Figure AI, Tesla Optimus.

Created the complete URDF kinematic model with STL meshes for all links, defining a hybrid prismatic/revolute kinematic chain: world → rail → J1 (prismatic, X linear stage) → J2 (prismatic, Z linear stage) → J3 (revolute, Z-axis SCARA) → J4 (revolute, Z-axis SCARA) → J5 (revolute, X-axis wrist tilt) → gripper → Tip, plus 2 auxiliary BRS (Boom/Rotation/Slew) joints outside the kinematic chain. Iteratively updated link geometry as physical parts were machined, reduced STL file sizes for deployment to embedded hardware, corrected coordinate frames from measured CAD values, and added a magnetic gripper end-effector. This required translating between CAD coordinate systems and the URDF/KDL kinematic solver — the same skill needed to bring up any new robot platform.

Built a comprehensive web-based motor dashboard (wxPython backend, HTML/JS frontend) for real-time diagnostics and tuning with spreadsheet-like inline editing across 4 tabs: Main (real-time PDO data showing position, velocity, current, temperature from CAN responses, with jog sliders using square scaling for finer control at low speeds), Constants (gear ratios, torque constants Kt, direction bits, PID parameters for position and velocity loops), Limits (position bounds, velocity limits, current limits, temperature thresholds with warning at 55°C and shutdown at 75°C), and Encoders (Nonius board status, encoder counts, calibration data). Per-joint status indicators display Limit, Warning, and Fault states with tooltip descriptions mapping fault bit-fields to human-readable text. All parameters persist to frybot.yaml via the ROS parameter server.

Extended the ArmControl C++ class to handle auxiliary BRS joints (boom/rotation/slew) that exist outside the 5-DOF kinematic chain. FryBot has 7 CAN-controlled joints, but KDL kinematics only solve for the 5 in-chain joints — the remaining 2 BRS joints operate independently with their own linear scales (0.03048 m/rev) and Nonius gear ratios (15:14 vs 51:49 for main joints). Implemented hybrid joint support for CAN pancake motors alongside the company's existing EtherCAT motor infrastructure on the same control loop — the EtherCAT master runs at 1kHz and calls into the CAN ODriveManager at each cycle, with frame skipping to manage CAN bus bandwidth. Per-joint YAML configuration covers PID defaults, temperature limits, velocity limits, current limits, linear scales, Nonius gear ratios, motor gear ratios (36:1), and motor types.

Built a complete job management system: stock job programs for common FryBot tasks (fill, dump, pick_fryer, pick_rack, place_fryer, place_rack, shake), a waypoint offset calibration tool that adjusts all joint positions in a job file by fixed offsets when the physical installation shifts slightly, and a Flask-based web programmer interface with a spreadsheet parser for waypoint data entry, inverse kinematics service integration for Cartesian-to-joint conversion, dropdown offset configuration, and a route-based REST API for loading/saving job programs. The IK integration calls the robot's KDL solver to convert operator-entered XYZ positions into the joint angles needed for the hybrid prismatic/revolute kinematic chain.

C++PythonURDFROSKDLFlaskRobotics