D3D Fusion Printer Conceptual Design: Difference between revisions

From Open Source Ecology
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
All creative work can be seen as searching or navigating the space of all thinkable outcomes (See for example [https://youtu.be/fThhbt23SGM?t=14m8s Mike Bostock presentation] for more on this statement), and 3D printer design is no exception. This document makes the D3D Printer design search process as explicit as possible. Decisions and reasoning behind them are listed in chronological order.
All creative work can be seen as searching or navigating the space of all thinkable outcomes (See for example [https://youtu.be/fThhbt23SGM?t=14m8s Mike Bostock presentation] for more on this statement), and 3D printer design is no exception. This document makes the D3D Printer design search process as explicit as possible. Decisions and reasoning behind them are listed in chronological order.


= The Search Algorithm/Design Recipe =
We'll walk a tree of choices on three basic levels
The formal methodology is inspired by the "design recipe" (DR) described in the book [http://www.ccs.neu.edu/home/matthias/HtDP2e/ ''How to Design Programs'']<ref name="htdp" />(HtDP2e).
*Choice of inputs (completion of functional requirements input specification)
DR is a systematic approach to designing computer programs.
*Choice of primitive design elements (specification of BOM)
*Choice of language/concepts/higher order design elements (specification of concepts and sub-modules)


==Generalization of DR==
The second half of the functional requirements specification, the desired output of the machine, should have been specified before design work begins.
If we're unsure about how the quality of the machine's output will be measured, then we risk searching the wrong space of thinkable machines.
The more well known the output quality tests, the more well defined the design problem, and the better the compass we have to navigate design space with.


DR consists of six steps that we'll use in the following very rough and generalized form:
= The Search Algorithm/Design Procedure =
#'''Problem Analysis''' Give the thing we're going to design and build a name and describe the types of input and output (a "signature" or "contract").
Our search will use three sub-procedures:
#'''Purpose Statement''' Reformulate eventual problem statements into a couple of sentences explaining the purpose of the thing we're designing.
{|
#'''Examples''' Illustrate the purpose statement by listing some example usages of the soon-to-be designed thing. These serve as criteria of success and are used as tests later.
|-
#'''Sketches''' Some basic shape and logic of the design is already given at this stage. Write it down.
|| '''Stepwise Definition''': || Heavily inspired by DE's six steps<ref name="htdp" />. Used to describe how we've understood the design (sub)problem at hand.
#'''Being creative''' This is where the designer starts test putting together parts in ways that will solve the problem.
|-
                      The designer might notice need for further specification of inputs and/or sub-modules.
|| '''Input Decision''':      || Used shrink design space by narrowing the range of accepted inputs.  
#'''Testing''' The creation of a test suite from examples ensuring small inputs work as expected.
|-
|| '''Concept Creation''':    || Designing things that might be useful for whatever reason. Used to define paths named through design space.
|}


We will apply it to modules and sub-modules recursively, searching the space in a best-first manner.
These will be applied to modules and sub-modules recursively, searching the design space in a best-first manner.
That is, when we find a promising sub-design, we continue working on that sub-design and its sub-sub-designs until either it is complete or until we meet difficulties.
That is, when we find a promising sub-design, we continue working on that sub-design and its sub-sub-designs until either it is complete or until we meet difficulties.
The calling process is always re-entered at an earlier point than where
==Stepwise Definition==
{|
|-
|align=right| 1.|| '''Problem Analysis''':  || Give the thing we're going to design and build a name and describe the types of input and output (a "signature" or "contract").
|-
|align=right| 2.|| '''Purpose Statement''': || Reformulate eventual problem statements into a couple of sentences explaining the purpose of the thing we're designing.
|-
|align=right| 3.|| '''Examples''':          || Illustrate the purpose statement by listing some example usages of the soon-to-be designed thing. Serve as criteria of success and are used as tests later.
|-
|align=right| 4.|| '''Sketches''':          || Some basic shape and logic of the design is already given at this stage. Write it down.
|-
|align=right| 5.|| '''Being creative''':    || Put together parts in ways that will solve the problem. If there's need for further specification of input go to Input Decision.  sub-modules.
|-
|align=right| 6.|| '''Testing''':          || The creation of a test suite from examples ensuring small inputs work as expected.
|}
==Input Decision==
*List available choices (that we can think of and express, and in reasonable detail)
*If list seems unfinished: Go into Concept Creation
*Explicitly reason around what's known, what's unknown and general pros and cons related to all the different choices
*Make a decision
*Be very explicit about how this limits the design space
*Validate that the chosen limitation doesn't violate requirements in any obvious way.
==Concept Creation==
Whenever language gets too formal, or design progress is so slow that we loose track it can be a good idea to jump out of the loop and define some higher order concepts to build upon later.
If the defined concept aren't readily definable/manufacturable from already known concepts in a single step, then the design becomes "abstract" or "lazy" and might prove to be impossible to manufacture.
{|
|-
|align=right| 1.|| Dive into the space of potentially useful (for whatever reason) concepts.  Define them with the Stepwise Definition procedure to define them.
|-
|align=right| 2.|| Do basic validation that the concept should be completely definable/manufacturable. Actually defining/manufacturing it is recommended.
|-
|align=right| 3.|| Review previous design process and re-enter it from where you estimate the best overall probability to arrive at a good design. The re-entrance is what makes the algorithm best-first.
|}


==Design Algorithm==
==Design Algorithm==
Line 27: Line 71:




= 3D Printer =
= Design Process =
== Signature ==
== 3D Printer Signature ==
From an abstract input/output point of view, a 3D printer can be said to have the following signature.
'''Input''': Power, Build material, Supporting surface(s), Instructions
'''Output''': Physical object


:<big><font face="bookman">3D Printer: Power, Build material, Supporting surface(s), Instructions &rarr; Physical object </font></big>


== Purpose Statement ==
== Purpose Statement ==
Line 54: Line 98:
#[[D3D_Fusion_printer_design#Functional_Requirements]]
#[[D3D_Fusion_printer_design#Functional_Requirements]]
#[http://reprap.org/wiki/RepRap_Interface_Standard RepRap Interface Standard]
#[http://reprap.org/wiki/RepRap_Interface_Standard RepRap Interface Standard]
#The mantra: ''The shape of the input determines the shape of the design and tests.''<ref name="htdp" />
#''The shape of the input determines the shape of the design and tests.''<ref name="htdp" />




=References=
=References=
{{#tag:ref|FELLEISEN, Matthias. [http://www.ccs.neu.edu/home/matthias/HtDP2e/ How to Design Programs]: an introduction to programming and computing. MIT Press, 2001.|name="htdp"}}
{{#tag:ref|FELLEISEN, Matthias. [http://www.ccs.neu.edu/home/matthias/HtDP2e/ How to Design Programs]: an introduction to programming and computing. MIT Press, 2001.|name="htdp"}}

Revision as of 20:39, 7 January 2016

All creative work can be seen as searching or navigating the space of all thinkable outcomes (See for example Mike Bostock presentation for more on this statement), and 3D printer design is no exception. This document makes the D3D Printer design search process as explicit as possible. Decisions and reasoning behind them are listed in chronological order.

We'll walk a tree of choices on three basic levels

  • Choice of inputs (completion of functional requirements input specification)
  • Choice of primitive design elements (specification of BOM)
  • Choice of language/concepts/higher order design elements (specification of concepts and sub-modules)

The second half of the functional requirements specification, the desired output of the machine, should have been specified before design work begins. If we're unsure about how the quality of the machine's output will be measured, then we risk searching the wrong space of thinkable machines. The more well known the output quality tests, the more well defined the design problem, and the better the compass we have to navigate design space with.

The Search Algorithm/Design Procedure

Our search will use three sub-procedures:

Stepwise Definition: Heavily inspired by DE's six steps[1]. Used to describe how we've understood the design (sub)problem at hand.
Input Decision: Used shrink design space by narrowing the range of accepted inputs.
Concept Creation: Designing things that might be useful for whatever reason. Used to define paths named through design space.

These will be applied to modules and sub-modules recursively, searching the design space in a best-first manner. That is, when we find a promising sub-design, we continue working on that sub-design and its sub-sub-designs until either it is complete or until we meet difficulties.

The calling process is always re-entered at an earlier point than where

Stepwise Definition

1. Problem Analysis: Give the thing we're going to design and build a name and describe the types of input and output (a "signature" or "contract").
2. Purpose Statement: Reformulate eventual problem statements into a couple of sentences explaining the purpose of the thing we're designing.
3. Examples: Illustrate the purpose statement by listing some example usages of the soon-to-be designed thing. Serve as criteria of success and are used as tests later.
4. Sketches: Some basic shape and logic of the design is already given at this stage. Write it down.
5. Being creative: Put together parts in ways that will solve the problem. If there's need for further specification of input go to Input Decision. sub-modules.
6. Testing: The creation of a test suite from examples ensuring small inputs work as expected.

Input Decision

  • List available choices (that we can think of and express, and in reasonable detail)
  • If list seems unfinished: Go into Concept Creation
  • Explicitly reason around what's known, what's unknown and general pros and cons related to all the different choices
  • Make a decision
  • Be very explicit about how this limits the design space
  • Validate that the chosen limitation doesn't violate requirements in any obvious way.

Concept Creation

Whenever language gets too formal, or design progress is so slow that we loose track it can be a good idea to jump out of the loop and define some higher order concepts to build upon later. If the defined concept aren't readily definable/manufacturable from already known concepts in a single step, then the design becomes "abstract" or "lazy" and might prove to be impossible to manufacture.

1. Dive into the space of potentially useful (for whatever reason) concepts. Define them with the Stepwise Definition procedure to define them.
2. Do basic validation that the concept should be completely definable/manufacturable. Actually defining/manufacturing it is recommended.
3. Review previous design process and re-enter it from where you estimate the best overall probability to arrive at a good design. The re-entrance is what makes the algorithm best-first.

Design Algorithm

  1. Initialize design by going through all six steps, keeping inputs general
  2. For all inputs describe
    1. Possible shapes
    2. Chosen shape


Design Process

3D Printer Signature

Input: Power, Build material, Supporting surface(s), Instructions Output: Physical object


Purpose Statement

A 3D printer is a machine that synthesizes build material into 3D objects according to a series of pre-determined instructions.

Examples

We will assume that a mains voltage will power the 3D printer, with the constant shape: 3 phase AC waveform.svgCable Cross Section.svg

For the build material, we will assume filaments behaving roughly as thermoplastics with the constant shape: ...

Being Creative

Shape of Inputs

Build Material

We expect

Sources Driving Design Desicions in Priority Order

  1. D3D_Fusion_printer_design#Higher_Level_Goals
  2. D3D_Fusion_printer_design#Desired_Attributes
  3. D3D_Fusion_printer_design#Functional_Requirements
  4. RepRap Interface Standard
  5. The shape of the input determines the shape of the design and tests.[1]


References

[1]

  1. 1.0 1.1 1.2 FELLEISEN, Matthias. How to Design Programs: an introduction to programming and computing. MIT Press, 2001.