MetaVoxels
Tools for the design and simulation of metavoxels (meta-metarial voxel lattice structures). The objective is the inverse design of metavoxels using the base voxels studied in DM3.
Demos
- Whale Simulation
- Hierarical multi-material 3*3 Base Voxel
- Precomputed 3*3 Base Voxel
- Precomputed 5*5 Base Voxel
- Precomputed 2*2 Chiral Voxel
- Precomputed 3*3 Chiral Voxel
- (Computation & visualization) 5*5 Base Voxel
- Old Demo chiral voxel (Computation & visualization)
Desired Milestones
- 3D visualization tool
- One voxel simulation
- Multi-voxel simulation
- Physical simulation/Oasis simulation comparison
- Parallel dynamic ODE solver
- Hierarchical simulation
- One voxel optimization based on desired deformation
- Inverse Design of Large Structures
- Growing and Evolving structures (Path planing + simulation)
Structural Mechanics Models
Code Structure
-
191115_NodeJsJulia: current wip folder
-
demos
- html interactive demos of simulation results
- contains all html and styling information
-
fea
- folder containing the structure and physcis simulation
-
barFea.js
- FEA of truss structures (only axial forces transfered) where each element (bar element) has 6 degrees of freedom ( F_{x1}, F_{y1}, F_{z1}, F_{x2} ,F_{y2}, F_{z2}).
- This is used when it is assumed that the nodes are hinges (they don't transfer moments)
- FEA of truss structures (only axial forces transfered) where each element (bar element) has 6 degrees of freedom (
-
beamFea.js
- FEA of frame structures where each element (beam element) has 12 degrees of freedom ( F_{x1}, F_{y1}, F_{z1}, M_{x1}, M_{y1}, M_{z1}andF_{x2} ,F_{y2}, F_{z2}, M_{x2} ,M_{y2}, M_{z2}).
- To solve for the stresses and displacement the euler bernoulli equations are used.
- FEA of frame structures where each element (beam element) has 12 degrees of freedom (
-
parallelFea.js
- solving for the stresses and displacement using DEM method ODE
- it's similar to mass spring but instead of the spring equation I use euler bernouli equations were each beam has 12 degrees of freedom
- hence I don't have to create a giant matrix to solve for stresses and displacements which make the code highly parallizable
- Here I am able as well to accomodate for non-linear behaviour
-
flight.js
- physcis simulation code for drone flight simulation and control
-
json
- folder containing structures that are precomputed (either geometry or fea)
- example of json
setup
:-
{ "nodes": [ { "id": "n0", "parent": "11", "degrees_of_freedom":[0,1,2,3,4,5] , "restrained_degrees_of_freedom":[true,true,true,true,true,true], "position": { "x": 0, "y":0,"z":0 }, "force":{ "x": 0, "y": 10, "z":0 }, "displacement": { "x": 0, "y": 0,"z":0 }, "angle": { "x": 0, "y": 0,"z":0 }, }, ], "edges": [ { "id": "e0", "source": 0, "target": 1 , "area":1.0, "density":0.284, "stiffness":30.0e6, "stress":0, }, ], "animation" : { "showDisplacement" : true, "exageration" : 10, "speed":3.0 }, "viz" : { "minStress":-500, "maxStress": 500, "colorMaps":["YlGnBu", "winter", "coolwarm","jet"], "colorMap":0, } }
- useful if needed to create the geometry using python or any other software
-
-
julia:
- folder containing trial code for the migration of the structure simulation to julia to do parallel computation and
-
lib
- contains all external libraries used
-
visualization
- Contains all 3D visualization and design code
-
draw.js
- where i call all the high level commands for drawing voxels and simulation
-
geometry.js
- contains low lever useful functions to create geometry (
addNode
,addEdge
,checkAndAdd
,createLattice
..) - I am using
rhino3dm
library in javascript to facilitate buidling intrecate geometries
- contains low lever useful functions to create geometry (
-
main.js
- contains all
three.js
scene building and animation
- contains all
-
app.js
- contains code to run the simulation headless (either in javascript or julia) using nodejs
-
Test Cases
Whale Simulation
Using the dynamic Model, I wanted to simulate the undulatory swimming motion based on (3):
I modeled the equation in this colab notebook:
Demo:
Live Demo Link.
TODO
-
One voxel simulation
- 2D truss
- 2D Euler-Bernoulli for one bar
- 3D truss
- 3D Euler-Bernoulli
- Port code to javascript
- Import geometry from stl/rhino
- intergrate tensorflow.js
- check previous nodes
- multiple voxel/lattice simulation
Demos
-
different kinds of voxels
- add chiral voxel
- add auxetic voxel
- add compliant voxel
- search for one way bendy voxel
- Demo and .gif different types of voxels beside each other
-
for ARL meeting
- compliant voxel simulation
- dog leg simulation
- bridge building visualization
-
more movements
-
fly? based on forces
- (ODE version first!)
- bend actuaton
-
fly? based on forces
- Fillipos 3d printed structures
Scaling
- Node js independent implementation (computation vs visualization)
-
julia integration
- julia trials
- small example in julia
-
Parallel ODE Implementation
-
re-run previous implementations
- see performance
- document results
-
continue implementation
- find best dt
-
fine best number of timesteps
- do convergence graph
- non linear deformation
- check javascript parallel webworkers implementation
-
re-run previous implementations
-
Hierarchical simulation
-
besise each other two
- show blown up voxel simulation of 5*5
- do 5*5
-
besise each other two
Interface and visualization
-
feedback code/simulation running
- check a better way
- see way to show current timestep
- slider down for displacement instead of animation
- menu down to chose which example to upload
Differentiation and Search
- inverse matrix forward methods/parameter estimation
- adjoint linear solve
- Amanda's code
Documentation
- Explain Code Structure
- More info about simulation and physics
Code Cleaning
- create closures for threejs
- create closure for fea
- create closure for geometry
- remove double nodes
Code Structure
- create shared data structure for parallel simulation
-
boudary conditions
- create a box for loads
- create box for restraints
- add default material
- add box for second material
- when two nodes different materials use hiller method to get E
- use parent data to get hierarchy information