Donnerstag, 13. August 2015

OpenSCAD - kannst Du nicht mal einen Kurs dazu geben?

Ende Mai bin ich während eines 3D Drucker-Abends im OpenLab Augsburg gefragt worden, ob ich mein Wissen nicht mal an Andere weitergeben möchte. Auslöser war die Bitte, mal schnell einen "Winkelhalter" zu konstruieren. In der Tat war der schnell in OpenSCAD fertig:

In knapp 30 Zeilen beschreibt man die Einzelteile und wie sie zusammengefügt werden:

//
// Winkelhalter
//

hoehe=40;
nut_h=8;
nut_l=11;
laenge=56.8;
dicke=6;
offset=-0.1;

difference()
{
 union()
 {
  cube([laenge, dicke, hoehe]);
  cube([dicke, laenge, hoehe]);
  linear_extrude(dicke)
   polygon(points=[[dicke + offset, dicke + offset], 
                   [dicke + offset, laenge], 
                   [laenge, dicke + offset]], 
            paths=[[0, 1, 2]]);
 }
 for(i=[1/5, 3/5])
 {
  translate([laenge*i, -0.5, hoehe/2 - nut_h / 2])
   cube([nut_l, dicke+1, nut_h]);
  translate([-0.5, laenge*i, hoehe/2 - nut_h / 2])
   cube([dicke+1, nut_l, nut_h]);
 }
}

Meine Behauptung, dass das eine relativ einfache Aufgabenstellung gewesen sei, löste die Frage nach dem Kurs aus.

Also habe ich mich hingesetzt und überlegt, wie man sowas machen könnte. Ich bin kein Freund von "Frontunterricht". Ich weiß aber auch, dass die ersten paar Stunden in OpenSCAD ziemlich frustrierend sein können. Die originale Dokumentation beschränkt sich leider auf das reine Auflisten von Funktionen und lässt dabei auch noch wesentliche Dinge aus. Im Internet gibt es einige Unterlagen, die man als Kursmaterial verwenden könnte. Auch Videos sind reichlich verfügbar - das meiste jedoch in englisch. Ich werde also nicht darum herum kommen, wesentliche Teile der Dokumentation zu wiederholen - dabei aber möglichst vollständig.
Anstelle der schlechten Beispiele wollte ich Aufgaben stellen, die nach etwa einer Woche durch Musterlösungen von mir abgeschlossen werden. Die Teilnehmer sollen die Aufgaben in dem Tempo lösen, welches ihnen angenehm ist - wahlweise auch in der Gruppe oder einzeln zu Hause. Zwischen den Aufgaben gibt's Erklärungen und nachfolgende Aufgaben sollen das bisher vermittelte Wissen zur Anwendung bringen.
Eine weitere Herausforderung war, nicht jeder der teilnehmen wollte, hatte zu den Drucker-Abenden auch immer Zeit. Deshalb ist jetzt der Kurs so geworden, dass man ihn auch zu Hause mitverfolgen kann. Die einzelnen Teile gibt's als PDF-Datei und meine Musterlösungen stehen ebenfalls zum Download bereit.

Inhaltlich wollte ich von Anfang an sinnvolle Beispiele und Aufgaben haben. Das ist zu Beginn, wenn noch der Großteil der OpenSCAD-Fähigkeiten unbekannt ist, eine extra Herausforderung. Dennoch ist es mir gelungen, schon auf der dritten Seite - am Ende des ersten Teils - 2 Aufgaben zu platzieren, die die implizierte Vereinigungsmenge von OpenSCAD ausnutzt, obwohl dieser Umstand zu diesem Zeitpunkt noch nicht erklärt wurde.

Im Original stört mich ganz besonders das Weglassen von Möglichkeiten. Erst durch Kombination von Dingen wie z.B. $fn=20 (Anzahl der Facetten eines runden Körpers) und cylinder(d=10, h=20) (Zylinder mit dem Durchmesser 10 und Höhe 20) zu cylinder(d=10, h=20, $fn=6) erhält man ein 6-eckiges Prisma. Auf ähnliche Art kann man pyramidenartige Teile konstruieren. Im Original wird dagegen eine Pyramide mit der ungleich schwierigeren Funktion polyhedron()erzeugt:


polyhedron(
  points=[ [10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], // the four points at base
           [0,0,10]  ],                                 // the apex point 
  faces=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4],              // each triangle side
              [1,0,3],[2,1,3] ]                         // two triangles for square base
 );

In meinem Script kommt diese Funktion erst dann vor, wenn man sie wirklich benötigt. Dagegen wird nach der Einführung von Berechnungsmöglichkeiten und Konstanten eine maßstabsgetreue Cheops-Pyramide zur Aufgabe gestellt. Die Teilnehmer sollen hier auch alle zur Berechnung nötigen Angaben aus Quellen im Internet beschaffen.

Berechnungen von Durchnmessern ... Satz des Pythargoras ... das ist lange her als das mal in der Schule ein Thema war. Ich kann mich auch nicht erinnern, dass ich während meines Berufslebens jemals solche Berechnungen anstellen musste. Es schadet aber auch nicht, die grauen Zellen mal wieder ein wenig arbeiten zu lassen. Später im Script kommen auch noch trigonometrische Berechnungen vor und an einem Kreissegment soll gerechnet werden - komplizierter wird es aber nicht.
Die Alternative zu den Berechnungen wäre, Näherungswerte zu schätzen. Dummerweise sind diese Schätzwerte bei einer Veränderung von Maßen unbrauchbar. Gerade das ist aber die herausragende Eigenschaft von OpenSCAD - alles anhand von numerischen Werten zu beschreiben und den Rest dazu passend mit den richtigen Formeln auszurechnen. Letztlich ist es jedem selbst überlassen, ob er sich den mathematischen "Ballast" erspart und die Möglichkeiten nicht voll ausschöpft.

Im zweiten Teil werden auch die Operationen aus der Mengenlehre eingeführt und anhand von Beispielen erläutert. Am Ende werden diese Mengenoperationen benötigt, um Rohlinge einer M20 Mutter und M20 Hutmutter zu konstruieren.

Der dritte Teil führt die noch fehlenden 3D-Objekte und Transformationen ein und geht dann in eine mehrseitige Aufgabensammlung zur Konstruktion eines Regals aus Aluminium Strangprofilen über. Dabei werden 2D-Objekte und deren Extrusion gezeigt.


Im letzten Teil des Kurses werden Module, Funktionen und Bibliotheken benutzt um Teilkonstruktionen noch flexibler einzusetzen. Im Ergebnis wird in Aufgabe 18 das Regal konstruiert:


Bei derartigen Konstruktionen ist es wichtig, die richtige Menge an Material im Auge zu behalten. OpenSCAD kann den Anwender dabei unterstützen, eine Einkaufsliste zu erzeugen. Ein paar echo() Anweisungen in der Konstruktion erzeugen nach Filterung durch grep, sort, sed und uniq so eine Teileliste:


Zum Abschluss des letzten Teils soll ein Raspberry Pi in ein 19" Rack geschraubt werden. Die Aufgabe hört sich einfach an - die Probleme stecken in den Details. Es geht los mit den Abmessungen eines solchen Racks. Die Lochabstände, freizuhaltende Bereiche, umzurechnende Zollangaben - einzelne Kleinigkeiten zwar, aber am Ende sollte es halt passen. Einen Raspberry Pi zu befestigen ist einfach - es so zu tun, dass zumindest die Netzwerkbuchse bedienbar bleibt ist schon schwieriger.

Rückblickend muss ich feststellen, dass die Teilnehmer leider nicht so mitgemacht haben, wie ich mir das gedacht habe. Anfangs habe ich sehr viele Lösungen bekommen - teils sogar mehrere Varianten pro Aufgabe. Im Laufe des Kurses wurden es aber immer weniger. Vielleicht gibt es ein paar Neu- / Wiedereinsteiger nach Veröffentlichung dieses Eintrags - mal sehen. Jedenfalls ist es möglich, jederzeit zu beginnen und wer nicht in die Musterlösungen spickt, wird jede Menge dabei lernen.

Zu guter Letzt hier noch die Dateien zum Kurs:

Workshop OpenSCAD Seite 1-3.pdf
Workshop OpenSCAD Seite 4-7.pdf
Workshop OpenSCAD Seite 8-10.pdf
Workshop OpenSCAD Seite 11-16.pdf
Musterloesungen.zip










1 Kommentar: