Skip to content
Snippets Groups Projects
Commit c8b4c8e8 authored by Leon Michel Gorißen's avatar Leon Michel Gorißen
Browse files

Chore: Update diagram and docs

parent 235df89f
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,25 @@ Acknowledgement ...@@ -11,6 +11,25 @@ Acknowledgement
.. image:: docs/resources/IoP_Logo.png .. image:: docs/resources/IoP_Logo.png
Concept
-------
This project aims to explore the following aspects:
* Data-to-knowledge pipelines within the World Wide Lab
* Automated research data storage and management, especially meta data
* Continous multi-instance dynamics learning for Franka Emika Robot
.. image:: diagrams/diagram.png
Three instances of Franka Emika Robots are present within the RWTH Aachen University Cluster of Excellence Internet of Production.
To generate meaningful knowledge from data gather on these three instances--situtated at the Chair for Laser Technology (LLT), Chair for Machine Tools (WZL MT) and the Institute for Textile Technology (ITA)--automated data storage and management is required.
Thus, automated data generation procedures have been implemented and are conducted on each robot instances. Data is automatically tagged with meta data on pushed to NRW RDS by means of RWTH Aachen University `meta data platform coscine <https://coscine.rwth-aachen.de/p/iop-ws-a.iii-fer-wwl-demo-80937714/>`_.
This platform both provides the generated data (Trajectory Data resource) as well as imporant metadata such as the source code used for data generation and the universal unique identfier of the robot instance.
This data is used to train an inverse dynamics model of the robotic systems. Agents registered to a weight and biases sweep server continously get send new model hyperparameter sets from the sweep server, pull up to date data from NRW RDS and push well performing models back to NRW RDS (Inverse Dynamics Models resource)
Train models may be used at the participating institutions fully embracing the Data-to-knowledge pipeline demonstrated within the World Wide Lab.
.. TODO Update this according to acutal deep learning implementation
Setup Setup
----- -----
......
...@@ -13,6 +13,7 @@ import signal ...@@ -13,6 +13,7 @@ import signal
import sys import sys
# TODO create new coscine resource with new application profile once available # TODO create new coscine resource with new application profile once available
# TODO add git commit to data
app = Flask(__name__) # Create a new Flask application app = Flask(__name__) # Create a new Flask application
......
diagram/diagram.png

294 KiB

...@@ -9,79 +9,85 @@ from diagrams.programming.language import Python, Cpp ...@@ -9,79 +9,85 @@ from diagrams.programming.language import Python, Cpp
from diagrams.generic.storage import Storage from diagrams.generic.storage import Storage
from diagrams.onprem.vcs import Gitlab from diagrams.onprem.vcs import Gitlab
from diagrams.saas.chat import RocketChat from diagrams.saas.chat import RocketChat
from diagrams.programming.framework import Flask
with Diagram("Franka Emika Robot World Wide Lab Demonstrator", show=False): white = "white"
black = "#5b5a5c"
custom_color = "#ddcaed"
# Edge styles: dashed, dotted, solid, invis, bold, tapered with Diagram("Multi-instance Franka Emika Robot dynamics learning for digital shadows in the World Wide Lab", filename="diagram", show=False, direction="TB"):
# dashed: publish subscribe
# dotted: RDM
# solid: request response
# bold:
# tapered: RDS interaction
coscine = Custom("Metadata Platform", "./images/coscine.png") coscine = Custom("Metadata Platform", "./images/coscine.png")
watched = []
rocket = RocketChat("IoP Chat")
watched.append(rocket)
with Cluster("FER @ LLT"):
ferLLT = Custom("Robot", "./images/FER.png")
with Cluster("FER @ WZL MT"): gitlab = Gitlab("IoP Team")
ferWZL = Custom("Robot", "./images/FER.png") vcs = []
with Cluster("FER @ ITA"): watched = []
ferITA = Custom("Robot", "./images/FER.png") #rocket = RocketChat("IoP Chat")
#watched.append(rocket)
watched.append(gitlab)
FERs = []
with Cluster("FER @ LLT") as c:
c.dot.graph_attr["fontcolor"] = white
c.dot.graph_attr["bgcolor"] = black
ferLLT = Custom("Robot", "./images/FER.png", fontcolor=white)
FERs.append(ferLLT)
with Cluster("FER @ WZL MT") as c:
c.dot.graph_attr["fontcolor"] = white
c.dot.graph_attr["bgcolor"] = black
ferWZL = Custom("Robot", "./images/FER.png", fontcolor=white)
FERs.append(ferWZL)
with Cluster("FER @ ITA") as c:
c.dot.graph_attr["bgcolor"] = black
c.dot.graph_attr["fontcolor"] = white
ferITA = Custom("Robot", "./images/FER.png", fontcolor=white)
FERs.append(ferITA)
with Cluster("RWTH RDS") as c:
c.dot.graph_attr["bgcolor"] = custom_color
storageTrajectory = Storage("Trajectory Data")
storageModels = Storage("Models")
#storageDocuments = Storage("Documents")
[watched.append(i) for i in [storageModels, storageTrajectory]]#, storageDocuments]]
with Cluster("Edge Node"): for fer in FERs:
with Cluster(
f"Edge Node @ {str(fer._cluster.label).split('@ ')[1]}"):
with Cluster("Docker Frankalockunlock"): with Cluster("Docker Frankalockunlock"):
gitlab3 = Gitlab("IoP Team")
franka = Python("CLI for Franka Control") franka = Python("CLI for Franka Control")
watched.append(gitlab3) vcs.append(franka)
with Cluster("Docker ROS"): with Cluster("Docker ROS"):
gitlab1 = Gitlab("IoP Team") panda_autodynamics = Custom("Panda\nAutodynamics\nPackage", "./images/ros+python.png")
with Cluster("franka_autodynamics"): vcs.append(panda_autodynamics)
taskController = Python("Task Controller")
motionGeneration = Python("Motion Generation")
motionExecution = Cpp("Motion Execution")
dataHandling = Python("Data Handling")
watched.append(gitlab1)
franka >> Edge(color="", style="solid") >> taskController # label="Initialize Data Generation",
franka << Edge(color="", style="solid") << taskController # label="Data Generation Concluded (SIGTERM)",
taskController >> Edge(style="solid") >> motionGeneration # label="Plan Motion",
taskController << Edge(style="solid") << motionGeneration # label="Motion Concluded",
motionGeneration >> Edge(style="solid") >> [motionExecution, dataHandling] # label="Execute Motion",
motionExecution - Edge(style="dashed") - [ferLLT, ferWZL, ferITA] # libfranka interaction
[ferLLT, ferWZL, ferITA] - Edge(style="dashed") - dataHandling # libfranka interaction
[motionExecution, dataHandling] >> Edge(style="solid") >> motionGeneration # label="Execution Concluded",
with Cluster("Docker Coscine"): franka >> Edge(color="", style="tapered") >> panda_autodynamics
gitlab4 = Gitlab("IoP Team") panda_autodynamics - Edge(style="dashed") - fer # libfranka interaction
coscine_client = Python("Coscine Client") fer - Edge(style="dashed") - panda_autodynamics
watched.append(gitlab4)
dataHandling >> Edge(style="solid") >> coscine_client # label="Send Data", with Cluster("Docker Coscine"):
dataHandling << Edge(style="solid") << coscine_client # label="Sending Concluded", coscine_client = Flask("Coscine Client")
vcs.append(coscine_client)
with Cluster("RWTH RDS"): panda_autodynamics >> Edge(style="solid") >> coscine_client # label="Send Data",
storageTrajectory = Storage("Trajectory Data") panda_autodynamics << Edge(style="solid") << coscine_client # label="Sending Concluded",
storageModels = Storage("Models")
storageDocuments = Storage("Documents")
[watched.append(i) for i in [storageDocuments, storageModels, storageTrajectory]]
coscine_client >> Edge(style="tapered") >> storageTrajectory # label="Upload Data", coscine_client >> Edge(style="solid") >> storageTrajectory # label="Upload Data",
with Cluster("RWTH HPC / LLT Compute / KBSG Compute"): with Cluster("RWTH HPC / LLT Compute / KBSG Compute") as c:
c.dot.graph_attr["bgcolor"] = custom_color
with Cluster("Docker"): with Cluster("Docker"):
gitlab2 = Gitlab("IoP Team")
framework = Custom("TF worker agent","./images/tf.png") framework = Custom("TF worker agent","./images/tf.png")
watched.append(gitlab2) vcs.append(framework)
storageTrajectory >> Edge(style="tapered") >> framework # label="Download Data", storageTrajectory >> Edge(style="tapered") >> framework # label="Download Data",
framework >> Edge(style="tapered") >> [storageTrajectory, storageModels] # label="Upload Data", framework >> Edge(style="tapered") >> [storageTrajectory, storageModels] # label="Upload Data",
with Cluster("Weights and Biases Servers") as c:
c.dot.graph_attr["bgcolor"] = custom_color
wandb = Custom("Sweep server", "./images/wandb.png") wandb = Custom("Sweep server", "./images/wandb.png")
watched.append(wandb) watched.append(wandb)
...@@ -91,3 +97,6 @@ with Diagram("Franka Emika Robot World Wide Lab Demonstrator", show=False): ...@@ -91,3 +97,6 @@ with Diagram("Franka Emika Robot World Wide Lab Demonstrator", show=False):
for element in watched: for element in watched:
coscine - Edge(style="dotted") - element #label="RDM", coscine - Edge(style="dotted") - element #label="RDM",
for element in vcs:
gitlab - Edge(style="dotted") - element
diagram/franka_emika_robot_world_wide_lab_demonstrator.png

272 KiB

File added
File added
diagram/images/python.jpeg

5.94 KiB

diagram/images/ros+python.png

55.5 KiB

diagram/images/ros.png

38.9 KiB

requests requests
rich rich==13.6
black black
flake8 flake8
isort isort
......
...@@ -6,7 +6,7 @@ setup( ...@@ -6,7 +6,7 @@ setup(
author='Leon Gorissen', author='Leon Gorissen',
author_email='leon.gorissen@llt.rwth-aachen.de', author_email='leon.gorissen@llt.rwth-aachen.de',
description='A tool to lock/unlock the Franka Emika Panda robot', description='A tool to lock/unlock the Franka Emika Panda robot',
long_description=open('README.md').read(), long_description=open('README.rst').read(),
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
url='https://git-ce.rwth-aachen.de/llt_dpp/all/franka_wwl_demonstrator', url='https://git-ce.rwth-aachen.de/llt_dpp/all/franka_wwl_demonstrator',
packages=find_packages(), packages=find_packages(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment