
Productive Robotics
Motor Dashboard
Built a 25-panel wxPython desktop application for real-time motor telemetry, PID tuning, encoder calibration, and fault diagnostics across all 7 robot joints. Features 4 tabbed views (Main, Constants, Limits, Encoders) with live PDO data streaming, spreadsheet-like inline parameter editing, and full YAML persistence via the ROS parameter server — replacing scattered terminal commands with a single unified engineering tool.
Designed and built a 25-panel wxPython application organized across 4 tabs that consolidate every motor-related parameter and diagnostic into a single window. The Main tab displays live Process Data Object (PDO) telemetry — position, velocity, current draw, temperature, and fault status for each of the robot's 7 joints — alongside jog sliders with square-scaling that map small slider deflections to fine positioning moves and large deflections to rapid traversal. Square scaling provides intuitive control: moving the slider halfway produces 25% of max speed, not 50%, giving operators precise low-speed control where they need it most while still allowing full-speed jogs at the extremes.
The Constants tab exposes all motor characterization parameters — gear ratios, torque constants (Kt), PID gains (proportional, integral, derivative for both position and velocity loops), encoder resolution, and current limits — in a spreadsheet-like grid with inline editing. Engineers double-click any cell, modify the value, and the change propagates immediately to the ROS parameter server and from there to the C++ motor controller. The Limits tab manages safety boundaries: position limits (soft stops preventing joint overtravel), velocity limits (per-joint speed caps), current limits (protecting motor windings), and temperature thresholds with a warning at 55 degrees C and automatic shutdown at 75 degrees C to prevent permanent magnet demagnetization.
The Encoders tab provides Nonius board diagnostics — dual-encoder absolute position verification, calibration offsets, index pulse status, and signal quality metrics for each joint's encoder system. Per-joint fault indicators display color-coded status with tooltip descriptions that map raw fault bit-fields to human-readable text (e.g., bit 3 = 'Overcurrent on phase B', bit 7 = 'Encoder communication timeout'). All parameter changes persist to YAML files through the ROS parameter server, ensuring that tuning sessions survive reboots. The dashboard eliminated the previous workflow of SSH-ing into the robot, manually editing YAML files, and restarting nodes — reducing a 10-minute parameter change cycle to a single click.