Skip to content
Snippets Groups Projects
Select Git revision
  • b2033373c07ec89f2d77ba88702f244c2ca4966b
  • master default protected
2 results

metavoxels

user avatar
Amira Abdel-Rahman authored
b2033373
History

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


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)
      • 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}
          and
          F_{x2} ,F_{y2}, F_{z2}, M_{x2} ,M_{y2}, M_{z2}
          ).
        • To solve for the stresses and displacement the euler bernoulli equations are used.
      • 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
      • main.js
        • contains all three.js scene building and animation
    • 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
  • 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
  • Hierarchical simulation
    • besise each other two
      • show blown up voxel simulation of 5*5
      • do 5*5

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

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