Explore the design space of modular fabrication machines
machineagency / machine-o-matic Goto Github PK
View Code? Open in Web Editor NEWExplore the design space of modular fabrication machines
Explore the design space of modular fabrication machines
Create world axes and allow the user to snap stages to them to determine stage axis.
Do this after getting back into the codebase and handling other issues. Establish a clean interface for the following constructs:
It's probably not going to be this simple, and may involve a huge refactor. So post comments and updates here.
Add functionality to add and delete stages, while keeping a clear list of existing stages in a menu.
Click on a stage highlights the menu item, and clicking on the menu item highlights the stage in the GUI.
Support:
Keeping all of these in a nice data structure, or writing a function that takes in the scene graph and returns the list of stages.
Given an instruction like:
{ "x1": 300, "x2": 300, "y": 170}
meaning "turn the x1 stage motor 300 steps" etc., and given a mapping of virtual stage motors to physical motors:
{ "x1": PHYS_X, "x2": PHYS_Y, "y" PHYS_Z }
spin the physical motors synchronously.
This is potentially the hardest issue, but the most important. Implement connections, so that the user can attach one stage to the platform of another. See the picture:
Given stage A which will be connected to stage B, let's assume that we can only connect stage A to stage B's platform. In the MOM DSL, that would be
A.PLACE -> B.platform
PLACE
can be one of the following:
MIDDLE
: the bottom of A (facing opposite the platform) right in the middleLEFT
: the bottom of A at the left endRIGHT
: the bottom of A at the right endLEFT_EDGE
: the short side of A on the left, think making a 3D printer and attaching a stage to the z-axis stagesRIGHT_EDGE
: same as above, but on the right.To replace the abstract red cylinder, add three different tools that you can switch between, for example:
Each tool should come with a set of default actions based on actuating the motor.
Add graphical control elements for:
Add a layer of indirection by prompting the user questions like "which motor is for stage x1
?". Say the user presses the button corresponding to the Y motor on the Arduino shield. Then calls to virtual motor x1
should be sent to the Y motor.
Ideally the user should be able to reset this virtual -> physical mapping.
If the user changes the machine configuration, we must prompt the user for a new mapping since the virtual motors or their kinematics may have changed.
Make things move.
Right now stages are green rectangular prisms PLUS the prisms' outlines. Given a prism, we group it with its outline:
machine-o-matic/frontend/script.js
Lines 25 to 37 in eeca9f1
But we also want to have a little platform on the stage. We can add another prism, as well as more lines.
Given a mom program, parse it into our nice AST.
Add controls so that users can rotate the stages on any of the three rotational axes. There is already a rotation controller implementation in THREE.TransformControls
but I don't currently call it because it gets mixed up with the translate controller thingy.
Note: the stages must snap to 90 degree angles.
Optional: add controls to move the camera.
Implement kinematics for rotary stages. Will likely involve some math.
Finish implementing the solver to take a handmade AST and return a working interpreter.
[Jasper will handle this. There are a lot more details here but he knows them in his head.]
Right now the code is hacked from some of the examples on the three.js page. It would be nice to have functions be more modular. Perhaps use a functional programming paradigm, or at least clean things up.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.