---
title: 'Project documentation bamboo-code'
disqus: hackmd
---
Bamboo-Code
===
#### Projektdateien
https://fh-muenster.sciebo.de/s/xh6GQX7fohsWwfA
#### Slack: diglabmsa
Channel: bamboo-scanner
## Table of Contents
[TOC]

## Abstract
Bambus ist ein schnell wachsender, nachhaltiger Rohstoff, der extrem gut für Bauaufgaben eingesetzt werden kann. Allerdings ist auf Grund des natürlichen Aufbaus des Bambus, die Anordnung von Längen auf dem Rohlängen schwierig. Die Schnitte können nur in 8-12cm Entfernung der Quernuten ausgeführt werden, hier ist der Bambus schneidfähig und gleichzeitig statisch belastbar. Das führt zu großem Verschnitt, da die benötigten Längen nicht beliebig auf dem Rohlängen angeordnet werden können.
Dieses Abstract versucht, diese Problematik zu optimieren. Dazu sind folgende Schnitte notwendig.
1. Analyse des vorhandenen Bambus, auf Position der Nuten
2. Export der benötigten Längen aus einem CAD-Modell
3. Anordnung der Längen auf möglichst wenig Rohlängen -> OR-Problem (Operation Research) // Knapsack
4. Optimierung der Position der Längen auf der Bambus-Rohlänge
## Analyse der Bambusstäbe
Um einen möglichst genaues Bild von den vorhandenen Stäben zu bekommen, und diese maschinell zu verarbeiten zu können, wird mit Computer Vision gearbeitet. Der OpenCV-Algorithmus ist in der Lage, Kanten und Konturen auf Pixel-Bildern zu erkennen.

Bei diesem Ansatz erkennt der Algorithmus, die äußere Kontur des Bambus und kann so eine Reihe von Punkten exportieren, mittels derer eine Polylinie erzeugt werden.
| Original| Points | Polyline |Konturlinien | mit Nuten |
|---------| -------- | -------- |--------|---------|
||  | || 
An der Polylinie ist zu erkennen, dass die Nuten eine deutliche Wölbung nach außen erzeugen. Diese Aufweitung wird genutzt um die entsprechenden Schnittbereiche zu definieren.
>TODO: Prüfen ob die Ermittlung der Nuten auch über die negativen und positiven X-Extrema erfolgen kann.
## Export der benötigten Längen
Aus einem bestehenden Grasshopper-Modell werden nun die benötigten Längen in eine csv-Datei exportiert, um diese mit Hilfe eines Knapsack-Optiermierungsalgorithmus zu verarbeiten.
> Das Rucksackproblem (auch englisch knapsack problem) ist ein Optimierungsproblem der Kombinatorik. Aus einer Menge von Objekten, die jeweils ein Gewicht und einen Nutzwert haben, soll eine Teilmenge ausgewählt werden, deren Gesamtgewicht eine vorgegebene Gewichtsschranke nicht überschreitet. Unter dieser Bedingung soll der Nutzwert der ausgewählten Objekte maximiert werden.

Abb: https://de.wikipedia.org/wiki/Rucksackproblem
Diese Längen werden in ein Python-Skript importiert, hier wird versucht eine möglichst optimal Lösung zu finden. In dem Skript muss zur Zeit noch, die gewünschte Bambus-Rohlänge spezifiziert werden.

Am Ende des Prozesses wird eine xlsx-Datei abgespeichert, in der spezifiziert wird, welche Länge auf welche Rohlänge angeordnet werden soll.
## Optimierung der Position der Längen auf der Bambus-Rohlänge
Die erwähnte xlsx-Datei wird nun in Grasshopper eingelesen und formatiert. Anschließend werden die Längen den entsprechenden Bambus-Rohlängen zu geordnet.

Als nächstes folgt der Optimierungsschritt, in dem mit Hilfe von Grasshoppers Optimierungsalgorithmus Galapagos die Positionierung der Längen auf der Bambus-Rohlänge überprüft und angepasst wird.


Die Anordnung erfolgt noch nicht optimal, verspricht allerdings gegenüber klassischer händischer Anordnung der Längen einiges an Einsparpotential.
