Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1718:sandkastensimulation_eines_koerpers

Kommentar (Stefan Born):

Der Verlauf des Projekts lässt sich sehr gut der Dokumentation entnehmen, ebenso die Ziele und die Gliederung. Aus der Perspektive eines Studierenden, der eure Dokumentation liest, fehlt jedoch die Darstellung der drei Bereiche, an denen ihr gearbeitet habt, nämlich

  • der physikalischen Modellierung, bzw. deren numerischer Näherung.
  • die Modellierung räumlicher Objekte, bzw. der 3d-Darstellung (Koordinaten, Kameramodelle, OpenGL)
  • der Programmstruktur selbst (bzw. auch der Struktur des 'vollen' Programms, das es noch nicht gibt.)

Man könnte all das indirekt aus euren Programmen herausholen, aber ist gerade der Sinn dieses Teils der Dokumentation, Lesern in einer übersichtlichen und strukturierten Weise einen Zugang zu eurem Projekt zu geben. – Ansonsten wäre noch kleinere Fehler (Rechtschreibung, Zeichensetzung) zu verbessern, aber in der Hinsicht sind wir nicht so pingelig (obwohl es in fast allen anderen Zusammenhängen der Universität und außerhalb wichtig ist, auf so etwas zu achten.)

Mir ist bewusst, dass euer Team zusammengeschrumpft ist, aber vielleicht könnt ihr ja die Dokumentation noch etwas ausbauen … ?

Gruppenmitglieder:

  • Kai Schildknecht
  • Max Mustermann - echter Name wird auf Wunsch nicht genannt
  • (Leila Albrecht)
  • (Merle Duwe)
  • (Aljoscha Fröhlich)

*Unsere Gruppe löste sich leider aufgrund neuer Studienziele während der Entwicklungsphase auf, weshalb die ()-Name nicht mehr aktiv am Projekt mitarbeiten.

PROJEKTPLANUNG

Einleitung

In dem Projekt „Sandkastensimulation eines Körpers“ ist das primäre Ziel einen Körper zu erstellen, der sich in einem virtuellen begrenzten Raum befindet. Dieser Körper soll der Idee nach ein roter Ball (oder ein Affenkopf) sein. Der Körper soll in seinem Raum den Gesetzten der Physik ausgesetzt sein und sich dementsprechend bewegen. Als fertiggestelltes Projekt haben wir eine Art „digitale Welt“, in der der Benutzer den Körper bewegen kann und der Körper realitätsnah fällt, geworfen wird und „rollt“. Unsere Arbeitsgruppe hat dieses Projekt deshalb in drei Arbeitsbereiche unterteilt: Es gilt die Gesetze der Physik zu implementieren und auf den Körper anzuwenden. Das muss möglichst effektiv, also mit einer geringen Laufzeit, und realitätsnah geschehen, wobei geringe Abweichungen der Bewegungen gegenüber der Wirklichkeit hinzunehmen sind. Um dem Nutzer ein Bild von der Simulation zu geben, benötigen wir einen dargestellten Raum, der den aktuellen Zustand des Körpers und seiner Umgebung anzeigt und sich nach den Befehlen des Nutzers auch entsprechend verändert. Hier müssen wir mit Sicherheit auf Arbeiten anderer Python-Entwickler zurückgreifen. Zuletzt ist eine ordentliche und nachvollziehbare Programmstruktur wichtig, die es ermöglicht dem „Primärteil“ beliebig zu erweitern und weiterführende Ideen, wie ein Desktop-Extension umzusetzen.

Also dann Butter bei die Fische!

Hautpziel:

  • Möglichst realitätsnahe Simulation eines Körpers in einem begrenzten virtuellen Raum

gleich der physikalischen Gegebenheiten auf der Erde.

Weitere Ziele:

  • Desktop-Extension
  • Game-App

Arbeitsbereiche:

  • Gesetze der Physik
  • Virtueller Raum
  • Übersichtliche und nachvollziehbare Programmstruktur

VERLAUF DES PROJEKTS

Die Arbeit an unserem Projekt „Sandkastensimulation eines Körpers“ sollte jedem Spaß machen, daher konnte jeder seinen Interessen proaktiv nachgehen. Es gab zwar sowohl konkrete „Hausaufgaben“ für die einzelnen Teammitgieder, als auch Zwischenziele, jedoch orientierten sich alle Studenten in der Gruppe aufgrund des Orientierungsstudiums neu und investierten unterschiedlich viel Arbeit in das Projekt. Merle Duwe legte die Grundlagen für die Implementierung der physikalischen Gesetze und Aljoscha Fröhlich untersuchte Möglichkeiten zur Darstellung eines virtuellen Raums. Kai Schildknecht arbeitete an der main-function und erstellte so den virtuellen Raum, die Darstellung und die Steuerung des Körpers. Max Mustermann implementierte mehrere einzelne Funktionen wie „freier Fall“, „vector“ und „teilung“, die die Gesetze der Physik und das „Werfen“ des Körpers möglich machen sollten.

PROTOKOLL

30.11.2017:

Zu aller erst haben wir eine Mind-Map erstellt, die unsere Aufgabenstellung in Teilprobleme unterteilt: Grafik, also Darstellung des 3D-Raums, In- und Output des Programms und die Implementierung der Regeln der Physik.

Als wichtigste Punkt haben wir uns mit der Darstellung des 3D-Raums und der Implementierung der Regeln der Physik beschäftigt. –> Teilziel: Eine Kraft wirkt auf eine Körper in einem 3D-Raum Bei der Darstellung des 3D-Raums suchen wir zum nächsten Termin ein geeignetes Modul. Zur Auswahl stehen zurzeit z.B. PyGame oder Blender. Mithilfe von Blender können wir sehr schöne Grafiken erzeugen, allerdings ist das Programm an sich sehr umfangreich. Die Regeln der Physik werden wird anhand des Tafelwerks einen einfachen Programmcode entwickeln, der über das Terminal Eingabewerte erwartet und z. B. die passende Kraft berechnet. Der berechnete Wert soll dann später die Bewegung des Körpers beeinflussen, bzw. auslösen.

07.12.2017:

Herr Born hat uns zur Realisierung des 3D-Raums einige Codeschnipsel zur Verfügung gestellt mit denen wir uns dem Problem nähern können. PyGame hat sich als nicht geeignet herausgestellt, da das Modul eher für 2D-Simulationen geeignet ist. Außerdem haben wir begonnen mit Pyglet zu arbeiten, da Pyglet interessante Möglichkeiten durch die Verwendung von OpenGL bietet.

14.12.2017:

Wir haben mit der Bearbeitung der Teilaufgaben begonnen. Merle und Max haben mit der Implementierung der physikalischen Gesetze begonnen. In unserer tubIT-Cloud erstellen wir zurzeit auch eine Übersicht der, für uns relevanten, Kräfte und Gesetze. Da wir bei der Simulation eines 3D-Raums noch nicht weitergekommen sind haben Aljoscha und Kai mit der Verarbeitung der Signale von Maus und Tastatur begonnen. Da Python viele Module bietet gestaltet sich diese Arbeit relativ problemlos.

11.01.2018:

Neues Jahr, neue Motivation: Wir haben mit Hilfe von Herrn Born eine Lösung für das Problem der Simulation eines 3D-Raums gefunden. Mithilfe der Python-Module PyOpenGL, Pyglet und ratcave ist es uns gelungen einen Körper in einem 3D-Raum zu simulieren. Der nächste Schritt ist nun einen Boden zu kreieren.

18.01.2018:

Wir haben ein Problem, die nötigen Module für eine 3D-Simulation auf allen Computern zum Laufen zu bringen… Zur Realisierung unseres Projekts haben sich drei Lösungswege aufgetan:

  1. Die Arbeit mit Python-Modulen und der Manipulation der Bewegungs-Updates mithilfe unserer Physik-

Implementation.

  1. Die qualitativ hochwertige aber schwierige Arbeit mit Blender.
  2. Die Kreation einer eigenen Physik-Engine nach einen Tutorial, das eine benutzerdefinierte Engine gebastelt aus mehreren Programmschnipseln erläutert.

Wir werden erst einmal mit der 1. Variante fortfahren…

08.02.2018:

Die Implementierung einiger Funktionen, die zuvor nur als Pseudocode vorhanden waren, ist abgeschlossen. Die Funktion teilung und warten sind abgeschlossen und die Kameraperspektive innerhalb pyglet-Umgebung kann jetzt beliebig eingestellt werden. Damit ist auch das Problem der dritten Dimension, der z-Achse, gelöst. Ein Vektor kann nun mit der Maus in 2D gezeichnet und durch function teilung umgesetzt werden. Die z-Koordinate entspricht jeweils den Blickwinkel der Kamera. Wir blicken also auf eine 2D-Ebene in einem 3D-Raum.

15.02.2018:

Die Maus-Eingabe wurde erfolgreich implementiert und ein 2D Vektor/Tupel wird erstellt. Einzelne Python Dateien sind hinzugekommen, die die Lösung einiger Teilprobleme beinhalten, sie müssen aber noch in den Code eingefügt werden, bzw eine neue Main funktion soll diese abrufen.

03.03.2018:

Die Implementierung von function freier_fall ist abgeschlossen. Der Versuch eine main-Funktion zu kreieren ist allerdings fehlgeschlagen, da die Loops nicht durch erneutes Aufrufen innerhalb der Main-Funktion laufen, sondern nur durch die programmierte Schleife.

Anmerkung: Das Problem war nicht die Programmstruktur der main-function, sondern ein Fehler in function freier fall.

08.03.2018:

Da sich das Projektlabor dem Ende neigt, fassen wir unser Projekt heute zusammen und bewerten den Zwischenstand unserer Arbeit. Sechs „Codeschnipsel“ sind vorhanden, wobei die main-function allein arbeitet und die Darstellung eines Körpers in einem 3D-Raum und dessen Bewegung über Tastatur oder Controller ermöglicht. Die Umsetzung der Gesetze der Physik ist nicht abgeschlossen, ein Konzept wurde zwar entwickelt, jedoch bisher nur teilweise umgesetzt und arbeitet auch noch nicht mit dem eigentlichen Programm zusammen. Funkcion freier Fall ist zwar fertiggestellt, konnte aber nicht in die main-function integriert werden, da wir ein Problem mit den Loops haben (siehe letzter Eintrag). Das „Werfen“ eines Körpers ist auch nur in Teilen umgesetzt worden.

FAZIT UND AUSBLICK

sandkastensimulation.zip

Auch wenn wir in unserem Projekt nicht den gewünschten Fortschritt erreicht haben, haben wir uns doch mit den grundlegenden Problemen beschäftigt: Dem Aufbau einer main-function, dem Zusammenspiel einzelner Funktionen und der Implementierung der physikalischen Gesetze. Die fehlende Organisation und die Vielzahl von Baustellen haben das Projekt leider sehr verlangsamt, jedoch sind wir der Meinung, das wir das Projekt nach ein wenig Grundlagenarbeit (feste Arbeitszeiten, funktionierende Computersysteme und neuer Gliederung) fertigstellen können. Die Kreation eines Desktop-Extensions ist auch weiterhin unser Ziel, das wir in Zukunft verfolgen wollen. Die Idee ist ein Affenkopf, der sich auf dem eigenen Desktop „hin und her werfen“ lässt und als Open-Source-Gadget in der Community zur Verfügung gestellt werden soll. Wichtig ist uns dabei vor allem eine geringe Laufzeit, da so der größte Lerneffekt bei der Implementierung von physikalischen Gesetzen und eine Verbesserung der derzeitigen Desktop-Extensions erreicht würde. Bereits existierende Extensions leiden unserer Meinung nach häufig unter „unsauberer“ Programmierung und der daraus resultierenden hohen Laufzeit.

LITERATURANGABEN UND VERWENDETE SOFTWARE

Quellenverzeichnis:

Verwendete Software:

  • Geany
  • Ipython
  • Evernote
  • Slack
  • Tub-Cloud
  • Programmiersprache Python (inklusive Module pyglet, ratcave und math)
ws1718/sandkastensimulation_eines_koerpers.txt · Zuletzt geändert: 2018/04/02 20:23 von stefanborn