3D Printer Workbench Work Proposal: Difference between revisions

From Open Source Ecology
Jump to navigation Jump to search
(Remove extraneous "I")
 
(72 intermediate revisions by 2 users not shown)
Line 6: Line 6:


= Proposal =
= Proposal =
# FreeCAD macro for changing the lengths of Universal Axis objects
== General Requirements ==
#* Creates a [https://www.freecadweb.org/wiki/FeaturePython_Objects FeaturePython object] or [https://www.freecadweb.org/wiki/Scripted_objects Scripted object] from '''UniversalAxisSimple.FCStd''' file within repository allowing users to interact with object at a high-level and modify custom properties like '''Length'''.
* Support OSE Linux and FreeCAD 16
#* Additional properties can be added to this object in a later phase:
** If we can support 18 while not at the expense of 16, then great.
#** Axis Orientation
* Keep file size of parts low. See [[File Simplification]] for details.
#*** X, Y, Z
* See further details in proposal.
#** Motor Orientation / Position
#*** Left or Right
#** Belt Catcher Orientation
#*** Up or down
#** Rod size
#*** 8mm, 1”, 2”
# FreeCAD workbench for assembling multiple Universal Axis objects together
#* Initialize workbench repository and codebase
#* Add 3 buttons to generate Universal Axis objects in different orientations:
#** '''1)''' Universal X Axis '''2)''' Universal Y Axis '''3)''' Universal Z Axis
#* Need to copy and modify import part functionality in A2plus for our purposes
#** Main problem with using A2plus functionality as is:
#*** Combines parts together removing the ability to manipulate individual pieces like lengths of rods
#**Prove out “assembling” existing FCStd files into a single document
# Add Frame button to Workbench
#* Why start with frame as opposed to considering D3D Universal configurations first?
#** D3D pro configurations have more axes, are more tedious to resize, and will benefit more greatly from automation.
#* Generates frame from FCStd file in repository
#* Assume X YY ZZ configuration to start
#** Clicking Universal Y Axis button will generate 2 objects with default placements
#** Allow different configurations at a later phase (e.g. 4 Z axes for > 12” beds or 2 X axes)
#* Attach Axes to frame when clicked
#* Assume static and fixed frame size
#** Allow resizing frame at a later phase
#* Assume cubic frame shape
#** Allow rectangular shapes in a later phase
#* Determine if it makes sense to allow resizing axes individually when attached to cubic frame
# Assess progress and determine next steps:
#* Enhance Universal Axis object with additional properties
#* Design and develop interaction between frame and axes when resizing frame
#* Explore workbench interactions when designing D3D Universal configurations (self-supporting 3 axes)


= Execution =
== Phase 1 Accomplishments (Feb 1st - May 1st 2020)==
The above proposal is planned to be carried out over the course of '''three''' 2-week sprints.
The 3D printer workbench allows for rapid design (5 minutes) of a 3D printer with any size frame, angle frame size, 3D printer corner size, axes, heated bed, and extruder - allowing the user to produce a design and to generate a cut list for metal rods and steel angle, as well as to generate the CAM files (STLs) for the 3D printed corners.


Each sprint will culminate in a sprint demo consisting of a video recording posted on [[G Roques Log]] with an email sent to relevant stakeholders ensuring project meets goals.
This allows for full flexibility of rapid design, turning the design process of any new configuration (frame size, angle iron size, 3D printed corner size) from a 24 hour+ project by skilled designers to a 5 minute project doable by novices. This is a great example of how custom, engineered design can be performed by non-experts, thereby taking a great leap towards democratized technology.


= Sprint Planning =
==Phase 2 (Second 90 day iteration)==
===Goal===
Increase replicability of work accomplished in first 90 day iteration to help OSE create FreeCAD workbenches for all of its machines by 2028.


== Sprint 1 (Mon 1/27/19 - Sun 2/9/19) ==
===Deliverables===
* FreeCAD macro for changing the lengths of Universal Axis objects
* Add documentation
** Initialize macro repository and codebase
** Increased documentation on existing code, patterns, packages, and modules
** Creates new document
** How to modify the FreeCAD 3D Printer Workbench for different CAD insertion - for example if someone wants to modify the extruder to add more details
** Creates a [https://www.freecadweb.org/wiki/FeaturePython_Objects FeaturePython object] or [https://www.freecadweb.org/wiki/Scripted_objects Scripted object] from '''UniversalAxisSimple.FCStd''' file within repository allowing users to interact with object at a high-level and modify custom properties like '''Length'''.
*** Should be self-evident based on available documentation
* Add more unit tests and increase [https://coveralls.io/github/gbroques/ose-3d-printer-workbench code coverage of ose-3d-printer-workbench]
** At the time of writing, current [https://en.wikipedia.org/wiki/Code_coverage code coverage] is '''65%'''
** We aim to increase code coverage to '''90 - 100%'''
* Valuable [https://en.wikipedia.org/wiki/Code_refactoring refactors] to the existing [https://github.com/gbroques/ose-3d-printer-workbench ose-3d-printer-workbench] repository for making the below proposed architecture possible:


== Sprint 2 (Mon 2/10/19 - Sun 2/23/19) ==
[[File:OSE_Workbench_Library_Architecture.png]]
* FreeCAD workbench for assembling multiple Universal Axis objects together
** Initialize workbench repository and codebase
** Add 3 buttons to generate Universal Axis objects in different orientations:
*** '''1)''' Universal X Axis '''2)''' Universal Y Axis '''3)''' Universal Z Axis
*** Defaults placement to origin
** Need to copy and modify [https://github.com/kbwbe/A2plus/blob/master/a2p_importpart.py#L148 import part functionality] in [https://github.com/kbwbe/A2plus A2plus} for our purposes
** Prove out “assembling” existing FCStd files into a single document


== Sprint 3 (Mon 2/24/19 - Sun 3/8/19) ==
* <code>ose-workbench-generator</code> to generate new workbenches with requisite files and structure needed in a single command using a project scaffolding tool like [https://github.com/cookiecutter/cookiecutter cookiecutter] or [https://yeoman.io/ yeoman].
* Add Frame button to Workbench
=OSE Design Workbench Requirements=
** Generates frame from FCStd file in repository
*Diagram of common workbench elements:
** Assume X YY ZZ configuration to start
**Part library part insertions
** Clicking Universal Y Axis button will generate 2 objects with default placements
**Icons and how to design them as in [[Icon Source]] or more elegantly as done by [[JB Log]]
** Attach Axes to frame when clicked
**Parameters for parts - to make different sizes
** Assume static and fixed frame size
**Design rules that determine how parts fit together - 1st iteration of workbench - start by inserting individual parts; 2nd iteration - parametrize the parts; 3rd iteration of workbench is to put parts in right place. 4th - cut lists; 5th - CAM STLs (3D printing) or other CAM formats
** Assume cubic frame shape
* How can non-programmers contribute to the overall workbench process
** Determine if it makes sense to allow resizing axes individually when attached to cubic frame
** Define overall workbench process
*** Start with individual part
**** Break down parts
**** Design CAD
**** Design Icons
*** Define relationship between parts
*Algorithms that modify parts automatically based on dimensions/properties of existing parts
**Cut list generator
**CAM file generator (such as corner generator in 3DP Workbench)
**Physical object generation algorith - documentation on how a certain part is generated, so variations can be made. For example: how is nut catcher generated in 3D printed corners, so we can increase nutcatcher size to 1/2" nuts instead of 6 mm nuts.
**Fabrication drawing generation?
**Automated exploded part animations?
*Boilerplate code for a single toolbar button and or main menu option that does something simple like creating a box
**Documentation on how to create more than one button
*Documentation on how to create geometries and modify geometries that are inserted by part insertion toolbar buttons
*Documentation on how to add menu bar items
*[https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-readmes README]
*[https://help.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository LICENSE]
*[https://help.github.com/en/github/building-a-strong-community/setting-guidelines-for-repository-contributors CONTRIBUTING]
* [https://en.wikipedia.org/wiki/Continuous_integration Continuous Integration] and [https://en.wikipedia.org/wiki/Continuous_delivery Continuous Delivery] via [https://travis-ci.org/ Travis CI]
*Support for [https://en.wikipedia.org/wiki/Unit_testing unit tests]
*Support for [https://en.wikipedia.org/wiki/Documentation_generator generating documentation from source code]
* <code>ose-workbench-core</code> library encapsulating functionality common to all OSE workbenches (will be within <code>ose-3d-printer-workbench</code> inside of <code>ose3dprinter.app.core</code> and <code>ose3dprinter.gui.core</code> packages, but designed to be ported out into a separate repo later)
 
===Stretch Goals===
Tutorial series on [[FreeCAD Workbench Python Programming]] (blog article format, video format, or both!).


= Existing Work =
= Existing Work =
Line 80: Line 73:
The D3D workbench was merely a start, and it so far has a frame only, but made of PVC pipe, which is not our main branch of development. Though, it's useful for anyone wanting to build with PVC.
The D3D workbench was merely a start, and it so far has a frame only, but made of PVC pipe, which is not our main branch of development. Though, it's useful for anyone wanting to build with PVC.


This proposal is for a new branch of development related to the idea of a OSE 3D Printer FreeCAD workbench starting in early 2019.
This proposal is for a new branch of development related to the idea of a OSE 3D Printer FreeCAD workbench starting in early 2020.
 
=Links=
*[[3D Printer Workbench 2020]]
*[https://github.com/gbroques/ose-3d-printer-workbench GitHub Repository]
*[[G Roques Log]]

Latest revision as of 02:11, 9 May 2020

Problem Statement

Designing 3D printer variants with pre-designed OSE parts and modules in FreeCAD is time-consuming and cumbersome.

Solution

Develop a FreeCAD workbench to streamline the design of 3D printer variants using pre-designed OSE parts and modules.

Proposal

General Requirements

  • Support OSE Linux and FreeCAD 16
    • If we can support 18 while not at the expense of 16, then great.
  • Keep file size of parts low. See File Simplification for details.
  • See further details in proposal.

Phase 1 Accomplishments (Feb 1st - May 1st 2020)

The 3D printer workbench allows for rapid design (5 minutes) of a 3D printer with any size frame, angle frame size, 3D printer corner size, axes, heated bed, and extruder - allowing the user to produce a design and to generate a cut list for metal rods and steel angle, as well as to generate the CAM files (STLs) for the 3D printed corners.

This allows for full flexibility of rapid design, turning the design process of any new configuration (frame size, angle iron size, 3D printed corner size) from a 24 hour+ project by skilled designers to a 5 minute project doable by novices. This is a great example of how custom, engineered design can be performed by non-experts, thereby taking a great leap towards democratized technology.

Phase 2 (Second 90 day iteration)

Goal

Increase replicability of work accomplished in first 90 day iteration to help OSE create FreeCAD workbenches for all of its machines by 2028.

Deliverables

  • Add documentation
    • Increased documentation on existing code, patterns, packages, and modules
    • How to modify the FreeCAD 3D Printer Workbench for different CAD insertion - for example if someone wants to modify the extruder to add more details
      • Should be self-evident based on available documentation
  • Add more unit tests and increase code coverage of ose-3d-printer-workbench
    • At the time of writing, current code coverage is 65%
    • We aim to increase code coverage to 90 - 100%
  • Valuable refactors to the existing ose-3d-printer-workbench repository for making the below proposed architecture possible:

OSE Workbench Library Architecture.png

  • ose-workbench-generator to generate new workbenches with requisite files and structure needed in a single command using a project scaffolding tool like cookiecutter or yeoman.

OSE Design Workbench Requirements

  • Diagram of common workbench elements:
    • Part library part insertions
    • Icons and how to design them as in Icon Source or more elegantly as done by JB Log
    • Parameters for parts - to make different sizes
    • Design rules that determine how parts fit together - 1st iteration of workbench - start by inserting individual parts; 2nd iteration - parametrize the parts; 3rd iteration of workbench is to put parts in right place. 4th - cut lists; 5th - CAM STLs (3D printing) or other CAM formats
  • How can non-programmers contribute to the overall workbench process
    • Define overall workbench process
      • Start with individual part
        • Break down parts
        • Design CAD
        • Design Icons
      • Define relationship between parts
  • Algorithms that modify parts automatically based on dimensions/properties of existing parts
    • Cut list generator
    • CAM file generator (such as corner generator in 3DP Workbench)
    • Physical object generation algorith - documentation on how a certain part is generated, so variations can be made. For example: how is nut catcher generated in 3D printed corners, so we can increase nutcatcher size to 1/2" nuts instead of 6 mm nuts.
    • Fabrication drawing generation?
    • Automated exploded part animations?
  • Boilerplate code for a single toolbar button and or main menu option that does something simple like creating a box
    • Documentation on how to create more than one button
  • Documentation on how to create geometries and modify geometries that are inserted by part insertion toolbar buttons
  • Documentation on how to add menu bar items
  • README
  • LICENSE
  • CONTRIBUTING
  • Continuous Integration and Continuous Delivery via Travis CI
  • Support for unit tests
  • Support for generating documentation from source code
  • ose-workbench-core library encapsulating functionality common to all OSE workbenches (will be within ose-3d-printer-workbench inside of ose3dprinter.app.core and ose3dprinter.gui.core packages, but designed to be ported out into a separate repo later)

Stretch Goals

Tutorial series on FreeCAD Workbench Python Programming (blog article format, video format, or both!).

Existing Work

There was a similar effort around late 2017 to early-to-mid 2018 by Steven Kaiser and Ruslan Krenzler with the D3D Workbench and Piping Workbench.

The D3D workbench was merely a start, and it so far has a frame only, but made of PVC pipe, which is not our main branch of development. Though, it's useful for anyone wanting to build with PVC.

This proposal is for a new branch of development related to the idea of a OSE 3D Printer FreeCAD workbench starting in early 2020.

Links