Python library for designing timber structures with integral timber joints.

This repo is part of the Robotic Assembled Timber Structures with Integral Timber Joints project.

Design Goals

The goal of the python library is to be able to achieve the following high-level functions:

  • Classes and Data Structure for describing:
  • Timber elements
  • Integral joints (Subtractive machining joint)
  • Process tools (Grippers, Clamps, Pickup Station)
  • Process action (Actions and Movements)
  • Algorithms for assembly design
  • Creating beams from Rhino geometry
  • Creating joint pairs from beam intersection
  • Algorithms for process design
  • Computing assembly process information (assembly sequence, gripper type, clamp type, grasp pose, clamp attachment pose)
  • From user input as guide
  • Automatic deduction (Auto Sequence, Auto Lap Joint Direction)
  • Computing robotic movements
  • Key positions
  • Robotic Path (Path Planning)

Installation (library)

Conda environment (optional)

Create a new environment with python 3.7 and install this package in the new environment

conda create --name itj python=3.7
conda activate itj

One of the dependency from compas is planarity, which depends of cython. You will need to install this manually:

pip install cython --install-option="--no-cython-compile"


conda install cython

Clone and update submodules

Install this library from source by cloning this repo to local and install from source.

git clone --recursive
cd integral_timber_joints

The --recursive flag when cloning above is used for initializing all the git submodules. You can learn more about submodules here.

Later in the development, whenever you need to update the submodules, issue the following:

git submodule update --init --recursive

Install libraries

Run this the following in terminal from the root folder of this repo. All libraries are installed from source (in the editable mode).

# Install the submodule libraries from source
pip install -e .\external\compas
pip install -e .\external\compas_fab
pip install -e .\external\compas_fab_pychoreo

# install `integral_timber_joints` from source 
pip install -e .

# Run the following code add the python library paths to Rhino / Grasshopper:
python -m compas_rhino.install -p compas compas_fab compas_ghpython roslibpy compas_rhino jsonpickle integral_timber_joints geometric_blocking

Alternatively if development is intended you can install with developer tools:

# replace `pip install -e .` above with
pip install -r requirements-dev.txt
invoke add-to-rhino

Python dependencies, explained

The following python dependency are installed in the above process. See requirements.txt for more info on the specific versions pinned.

The following libraries are installed "automatically" (via pip or conda, learn about their difference here)

  • compas (Library for geometrical modeling and graph relationship)
  • compas_fab (Library for modelling Tools and Robots, functions to call ROS backend for path planning)
  • jsonpickle (Serialization library for Tools, Assembly, Process)
  • trimesh (Call Openscad in the background to perform Mesh Boolean)
  • pycddlib (Computation of blocking direction analysis)

The following two libraries are installed manually from git submodules, to better keep track of our development cycles:

  • pybullet_planning (Library for planning utilities in pybullet)
  • compas_fab_pychoreo (Library for providing pybullet_planning functionalities through a compas_fab-friendly API)

Installation (external software dependency)

Install the following software:

  • Rhino V6 (Design interface for demo file)
  • Grasshopper plugin
  • Elefront (Handles clickable mesh interface)
  • Openscad (This will be running in the background. Start the software at least once after installing)

Module Structure

See this markdown file regarding the organization of the code and how it relates to dependency and compas core libraries.

Sequence and Motion Planning

See this file for instructions on running the planning.

GitHub - gramaziokohler/integral_timber_joints: Robotic Assembled Timber Structures with Integral Timber Joints
Robotic Assembled Timber Structures with Integral Timber Joints - GitHub - gramaziokohler/integral_timber_joints: Robotic Assembled Timber Structures with Integral Timber Joints