Skip to content

Overview

What is Jubilee Powder?

Jubilee Powder is a comprehensive software system for controlling the Jubilee Motion Platform to automate powder dispensing and shore hardness testing. It provides a Python API for coordinating operations involving multiple hardware components.

Core Components

Hardware

The system integrates several hardware components:

  • Jubilee Motion Platform: A tool-changing CNC motion system
  • Precision Scale: For weighing materials with high accuracy (typically A&D FX-120i)
  • Piston Dispensers: For storing and dispensing cylindrical pistons, placed in molds after dispensing powder
  • Manipulator Tool: A custom toolhead with grabber and vertical axis

Software Layers

The software is organized in layers from high-level to low-level:

  1. GUI Application (User Interface)
  2. Touchscreen-friendly interface
  3. Visual mold selection and configuration
  4. Real-time progress monitoring
  5. Built-in safety checks

  6. JubileeViewModel (GUI Coordination)

  7. Coordinates GUI with hardware
  8. Manages job execution

  9. JubileeManager (Core API)

  10. Highest-level programming API
  11. Error handling and recovery
  12. Hardware state management

  13. MotionPlatformStateMachine (Validation Layer)

  14. Validates all movements for safety
  15. Manages system state
  16. Enforces movement constraints

  17. Hardware Drivers (Bottom Layer)

  18. Direct hardware communication
  19. Low-level control primitives
  20. Communicates with Duet3D Controller

Key Concepts

State Machine Validation

All movements are validated through a state machine that:

  • Tracks the current position and tool state
  • Validates requested movements are safe
  • Prevents invalid state transitions
  • Ensures proper sequencing of operations

Tool Management

The Jubilee uses a tool-changing system where:

  • Tools are picked up and parked at specific positions
  • Only one tool can be active at a time
  • Tools must be at specific positions for certain operations

Payload Tracking

The system tracks what the manipulator is holding:

  • empty: No mold held
  • mold: Holding a mold
  • mold_with_piston: Holding a mold with top piston

This enables safe movement validation based on current load.

Design Philosophy

Safety First

  • All movements are validated before execution
  • State machine prevents unsafe operations
  • Clear error messages for invalid requests

Ease of Use

  • High-level API for common operations
  • Progressive disclosure (simple things easy, complex things possible)
  • GUI for user-modifiable operations
  • Python API

Flexibility

  • JSON-based configuration
  • Extensible architecture
  • Multiple access levels (high-level to low-level)
  • MVVM architecture for GUI extensibility

Usage Options

GUI Interface

For interactive machine operation with visual feedback:

python gui/jubilee_gui.py

Features: - Visual mold selection - Real-time weight monitoring - Progress tracking - Hardware configuration - Safety checklist

See GUI User Guide for details.

Python API (Automation)

For scripted tasks and custom workflows:

from src.JubileeManager import JubileeManager

manager = JubileeManager(num_piston_dispensers=2, num_pistons_per_dispenser=10)
manager.connect()
manager.dispense_to_well("0", 50.0)
manager.disconnect()

See Quick Start Guide for details.

System Requirements

Hardware Requirements

  • Jubilee Motion Platform with Duet3D controller
  • USB connection to precision scale (A&D FX-120i preferred, other A&D scales may work)
  • Network connection to Jubilee controller
  • Sufficient workspace for deck layout

Software Requirements

  • Python 3.8 or later
  • Linux-based operating system (for hardware integration)
  • Dependencies listed in requirements.txt

Installation

  1. Clone the repository:

    git clone https://github.com/bennett-lahn/jubilee-powder.git
    cd jubilee-powder
    

  2. Create a virtual environment:

    python -m venv jubilee-env
    source jubilee-env/bin/activate  # On Linux/Mac
    # or
    jubilee-env\Scripts\activate  # On Windows
    

  3. Install dependencies:

    pip install -r requirements.txt
    

  4. Configure your system:

  5. Edit configuration files in jubilee_api_config/. You may need to edit all homing files, tool pickup/place, and config files to match your unique setup.
  6. Set Jubilee IP address
  7. Configure deck layout
  8. Set up tool positions

Next Steps