Skip to content

A grasshopper plugin to create joints between timber panels and export CNC toolpath and robot trajectories for fully automated workflow from design to fabrication to assembly.

License

Notifications You must be signed in to change notification settings

ibois-epfl/Manis-timber-plate-joinery-solver

Repository files navigation

Manis

A collaborative design tool for integrally-attached timber plate structures.

Introduction

Tool purpose

Manis is a grasshopper plugin developed at the laboratory for timber constructions (IBOIS, EPFL) for creating joints between timber panels . The tool allows:

  • generating joints geometry according to topological constraints and assembly sequence
  • generating CNC cutting toolpath to automate the fabrication of the plates
  • generating robotic trajectories to automate the assembly of the plates
  • generating finite element models suitable for structural analysis

As images are often more powerfull than words, have a look at our short trailer if you didn't see it yet!

Reference

For research applications, please refer to the following publication. It includes a detailed description of the algorithms behind the code:

Nicolas Rogeau, Pierre Latteur, Yves Weinand, An integrated design tool for timber plate structures to generate joints geometry, fabrication toolpath, and robot trajectories, Automation in Construction, Volume 130, October 2021 https://doi.org/10.1016/j.autcon.2021.103875

For users

Plugin installation

  1. Download the file Manis.x.ghpy and place it inside Grasshopper Components folder C:\Users\yourname\AppData\Roaming\Grasshopper\Libraries or Grasshopper -> File -> Special folders -> Components folder.
  2. Download the files inside the folder Gh user objects and place them inside the Grasshopper User Object folder C:\Users\yourname\AppData\Roaming\Grasshopper\UserObjects or Grasshopper -> File -> Special folders -> User Object folder.
  3. Verify that all files are unblocked: Right-click on the file -> Properties -> General -> Unblock.
  4. Restart Rhino and open Grasshopper. There should be a new tab in Grasshopper named Manis.

Plugin dependencies

Robots: To simulate robot trajectories generated by Manis, we rely on the plugin "Robots". The latest release of robots is available here. Once the plugin is installed, download the folder "Robots" from Manis repository and place it in your "Documents" folder: C:\Users\yourname\Documents\Robots. It contains the xml file and 3D model of our robot at IBOIS, EPFL. It is the one we use in the example file but you can of course use your own robot instead.

Compas and Abaqus: To run the structural analysis, we rely on Compas, an open-source framework developed by our colleagues at the NCCR Digital Fabrication to foster collaboration between AEC stakeholders. If you want to use this part of Manis, you will first need to install Compas and the module Compas_fea. You will also need to have a valid license of Abaqus in order to perform the analysis. Once both are installed, go to C:\Users\yourname\AppData\Roaming\McNeel\Rhinoceros\7.0\scripts\compas_fea\cad\ and open rhino.py. We need to bring a small change to this file for our Grasshopper component to work. At line 236, replace mesh = RhinoMesh.from_guid(guid).to_compas() with those two lines: mesh = rs.coercerhinoobject(guid) and mesh = RhinoMesh.from_object(mesh).to_compas()

Plugin structure

The plugin has 9 different tabs:

  • Adjacency: where you can get useful data about how the plates of the model are connected.
  • Assembly: where you can create your own insertion constraints and access plate modules properties.
  • FEM: where you can create a simplified model and run a structural analysis using Compas_fea and Abaqus.
  • Joints: where you can create different kind of joints between adjacent plates.
  • Properties: where you can access the geometric properties of each plate (contour, face, thickness...).
  • Robotics: where you can generate robotic trajectories and simulate the robotic assembly of the plates using Robots plugin.
  • Solver: where you can find the component to build the model and other computationally intensive solvers.
  • Transform: where you can rearrange the plates in the 3D space (for example for fabrication or assembly purposes).
  • Utility: where you can find other components that couldn't find a place in the other tabs...

Example files and tutorials

The file manis_demo.gh contains some examples showing different applications of the joinery solver. A video tutorial is also available on IBOIS vimeo channel. The first part focuses on the 3D modeling of the joints and the concept of modular assemblies while the second part covers the generation of CNC toolpath and robot trajectories.

For a general overview of Manis workflow, you can refer to this video in which the solver is applied to a boxed vault of 36 plates. We also recorded a detailed explanation of the code that is behind the grasshopper component we use to perform the structural analysis of this doubly-curved timber vault. You can test it yourself by downloading the file manis_annen.gh

For developers

Improving the code

The source code consists of one single python file: platesjoinery.py. It is not necessary to recompile the Grasshopper plugin when debugging or developing new functions. Instead, you can test your modifications directly inside a custom Grasshopper python component. You need to execute the following steps to be able to call the functions from the python file inside the Grasshopper environment:

  1. Download the file platesjoinery.py.
  2. Place the file inside Rhinoceros IronPython folder C:\Users\yourname\AppData\Roaming\McNeel\Rhinoceros\7.0\Plug-ins\IronPython\settings\lib.
  3. Verify that the path is correctly specified in Rhino: Type _EditPythonScript -> Tools -> Options -> Files -> Add to search path (if necessary).
  4. Restart Rhino and open Grasshopper. You should now be able to import the module platesjoinery inside a Grasshopper python component and access its classes and functions.

Code structure

The source code is split in 4 classes:

  • PlateModel: The main class of the solver. A plate model instance is created for each new timber plate structures. Adjacencies and insertion vectors are computed during the instanciation of the plate model. This class also containts methods to create timber joints and generate fabrication toolpath.
  • PlateModule: A sub-class of the plate model to deal with modular assemblies. For each group of plates specified by the user, a new module is created.
  • Plate: A sub-class of the plate model containing the information about a single element of the structure. An instance of the plate class contains geometric information such as the plate thickness or the plate contours.
  • Toolbox: A list of methods extending the Rhino framework.

Re-compiling a new version of the plugin

Once the modifications brought to the source code have been validated, a new version of the plugin can be generated.

  1. Download the folder Grasshopper compilation files.
  2. Open the file build.py in an editor and replace the 4 classes with their new version from the updated source code.
  3. If necessary, update the parameters and/or the definition of the plugin components (each file corresponds to a single component of the plugin).
  4. In Rhino, run the command _EditPythonScript and run the file main.py. It will create a file Manis.x.ghpy in the folder Grasshopper compilation files.
  5. Move the newly created file to the Grasshopper Components folder C:\Users\yourname\AppData\Roaming\Grasshopper\Libraries or Grasshopper -> File -> Special folders -> Components folder.
  6. Restart Rhino and open Grasshopper. The plugin should be updated.

For further information about how to create a custom grasshopper component with python, you can refer to this tutorial.

About

A grasshopper plugin to create joints between timber panels and export CNC toolpath and robot trajectories for fully automated workflow from design to fabrication to assembly.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages