commit 8e6b292fe1381e51c0ff8c9a9186937700c8907e Author: yenon Date: Fri Apr 7 03:11:00 2023 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..74fc0de --- /dev/null +++ b/.gitignore @@ -0,0 +1,315 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/latex +# Edit at https://www.toptal.com/developers/gitignore?templates=latex + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs +*.lzo +*.lzs +*.slg +*.slo +*.sls + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplot +*.gnuplot +*.table + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.glog +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files +# *.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# newpax +*.newpax + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# svg +svg-inkscape/ + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# titletoc +*.ptc + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices and outlines +*.xyc +*.xyd + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# gummi +.*.swp + +# KBibTeX +*~[0-9]* + +# TeXnicCenter +*.tps + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# Makeindex log files +*.lpz + +# xwatermark package +*.xwm + +# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib +# option is specified. Footnotes are the stored in a file with suffix Notes.bib. +# Uncomment the next line to have this generated file ignored. +#*Notes.bib + +### LaTeX Patch ### +# LIPIcs / OASIcs +*.vtc + +# glossaries +*.glstex + +# End of https://www.toptal.com/developers/gitignore/api/latex diff --git a/.kile/mechforsch.kilepr.gui b/.kile/mechforsch.kilepr.gui new file mode 100644 index 0000000..7d28de3 --- /dev/null +++ b/.kile/mechforsch.kilepr.gui @@ -0,0 +1,51 @@ +[General] +kile_livePreviewEnabled=true +kile_livePreviewStatusUserSpecified=true +kile_livePreviewTool=LivePreview-PDFLaTeX +lastDocument=main.tex + +[document-settings,item:main.bib] +Bookmarks= +Encoding=UTF-8 +Highlighting=BibTeX +Highlighting Set By User=false +Indentation Mode=normal +Mode=BibTeX +Mode Set By User=false + +[document-settings,item:main.tex] +Bookmarks= +Encoding=UTF-8 +Highlighting=LaTeX +Highlighting Set By User=false +Indentation Mode=normal +Mode=LaTeX +Mode Set By User=false + +[item:main.bib] +open=true +order=1 + +[item:main.tex] +open=true +order=0 + +[item:mechforsch.kilepr] +open=false +order=-1 + +[view-settings,view=0,item:main.bib] +CursorColumn=37 +CursorLine=112 +Dynamic Word Wrap=false +JumpList= +TextFolding={"checksum":"cb71bb47ec4a72f8446e70ca886b18c3c2c08129","ranges":[]} +ViMarks= + +[view-settings,view=0,item:main.tex] +CursorColumn=96 +CursorLine=11 +Dynamic Word Wrap=false +JumpList= +TextFolding={"checksum":"f4caf9757786962cf6187282471f06ce0896d120","ranges":[]} +ViMarks= diff --git a/Aufgabenstellung.pdf b/Aufgabenstellung.pdf new file mode 100644 index 0000000..5a6493b Binary files /dev/null and b/Aufgabenstellung.pdf differ diff --git a/Deckblatt.pdf b/Deckblatt.pdf new file mode 100644 index 0000000..1117c9a Binary files /dev/null and b/Deckblatt.pdf differ diff --git a/demo.pdf b/demo.pdf new file mode 100644 index 0000000..0a9eefe Binary files /dev/null and b/demo.pdf differ diff --git a/gazebo.png b/gazebo.png new file mode 100644 index 0000000..be5ea60 Binary files /dev/null and b/gazebo.png differ diff --git a/htwk.eps b/htwk.eps new file mode 100644 index 0000000..183c530 Binary files /dev/null and b/htwk.eps differ diff --git a/main.bib b/main.bib new file mode 100644 index 0000000..a7e42fe --- /dev/null +++ b/main.bib @@ -0,0 +1,120 @@ + +@misc{moveitProgress, + title = {Fortschritt der Entwicklung von MoveIt 2}, + url = {https://docs.google.com/spreadsheets/d/1aPb3hNP213iPHQIYgcnCYh9cGFUlZmi_06E_9iTSsOI/edit#gid=0}, + note = {letzter Zugriff: 5.4.2022}, +} + +@misc{quaternion, + title = {Humane Rigging 03 - 3D Bouncy Ball 05 - Quaternion Rotation}, + url = {https://www.youtube.com/watch?v=4mXL751ko0w}, + note = {letzter Zugriff: 5.4.2022}, +} + +@misc{trianglestrip, + title = {Android Lesson Eight: An Introduction to Index Buffer Objects (IBOs)}, + url = {https://www.learnopengles.com/tag/triangle-strips/}, + note = {letzter Zugriff: 5.4.2022}, +} + +@misc{octomap, + title = {OctoMap}, + url = {https://octomap.github.io}, + note = {letzter Zugriff: 13.4.2022}, +} + +@misc{gazeborosport, + title = {Port gazebo\_ros\_pkgs to ROS 2.0}, + url = {https://github.com/ros-simulation/gazebo_ros_pkgs/issues/512}, + note = {letzter Zugriff: 13.4.2022}, +} + +@misc{moveit_docs, + title = {MoveIt 2 Documentation}, + url = {https://moveit.picknik.ai/galactic/index.html}, + note = {letzter Zugriff: 13.4.2022}, +} + +@misc{sdf, + title = {SDFormat Specification}, + url = {http://sdformat.org/spec}, + note = {letzter Zugriff: 13.4.2022}, +} + +@misc{urdf, + title = {Tutorial: Using a URDF in Gazebo}, + url = {http://gazebosim.org/tutorials/?tut=ros_urdf}, + note = {letzter Zugriff: 13.4.2022}, +} + +@article{AngleraudHoubrePieters+2019+318+329, + author = {Alexandre Angleraud and Quentin Houbre and Roel Pieters}, + doi = {doi:10.1515/pjbr-2019-0025}, + url = {https://doi.org/10.1515/pjbr-2019-0025}, + title = {Teaching semantics and skills for human-robot collaboration}, + journal = {Paladyn, Journal of Behavioral Robotics}, + number = {1}, + volume = {10}, + year = {2019}, + pages = {318--329} +} + +@INPROCEEDINGS{6907656, + author={Marzinotto, Alejandro and Colledanchise, Michele and Smith, Christian and Ögren, Petter}, + booktitle={2014 IEEE International Conference on Robotics and Automation (ICRA)}, + title={Towards a unified behavior trees framework for robot control}, + year={2014}, + volume={}, + number={}, + pages={5420-5427}, + doi={10.1109/ICRA.2014.6907656} +} + +@misc{isla2005handling, + title={Handling complexity in the halo 2 ai. GDC 2005 Proceedings}, + author={Isla, D}, + year={2005} +} + +@misc{iisy, + title={LBR iisy}, + url={https://www.kuka.com/de-de/produkte-leistungen/robotersysteme/industrieroboter/lbr-iisy}, + note = {letzter Zugriff: 18.4.2022}, +} + +@misc{cobot, + title={Cobots: der intelligente Roboter als Kollege}, + url={https://www.kuka.com/de-de/future-production/mensch-roboter-kollaboration/cobots}, + note = {letzter Zugriff: 18.4.2022}, +} + +@misc{mrk, + title={Mensch-Roboter-Kollaboration: Willkommen, Kollege Roboter!}, + url={https://www.kuka.com/de-de/future-production/mensch-roboter-kollaboration}, + note = {letzter Zugriff: 18.4.2022}, +} + +@article{ + doi:10.1126/scirobotics.abm6074, + author = {Steven Macenski and Tully Foote and Brian Gerkey and Chris Lalancette and William Woodall }, + title = {Robot Operating System 2: Design, architecture, and uses in the wild}, + journal = {Science Robotics}, + volume = {7}, + number = {66}, + pages = {eabm6074}, + year = {2022}, + doi = {10.1126/scirobotics.abm6074}, + URL = {https://www.science.org/doi/abs/10.1126/scirobotics.abm6074} +} + +@misc{ros-git, + title={GitHub - ros2/ros2: The Robot Operating System, is a meta operating system for robots.}, + url={https://github.com/ros2/ros2}, + note = {letzter Zugriff: 02.04.2023}, +} + +@misc{colcon, + title={colcon - collective construction}, + url={https://colcon.readthedocs.io/en/released/}, + note = {letzter Zugriff: 02.04.2023}, +} diff --git a/main.ist b/main.ist new file mode 100644 index 0000000..fd884fe --- /dev/null +++ b/main.ist @@ -0,0 +1,31 @@ +% makeindex style file created by the glossaries package +% for document 'main' on 2022-4-3 +actual '?' +encap '|' +level '!' +quote '"' +keyword "\\glossaryentry" +preamble "\\glossarysection[\\glossarytoctitle]{\\glossarytitle}\\glossarypreamble\n\\begin{theglossary}\\glossaryheader\n" +postamble "\%\n\\end{theglossary}\\glossarypostamble\n" +group_skip "\\glsgroupskip\n" +item_0 "\%\n" +item_1 "\%\n" +item_2 "\%\n" +item_01 "\%\n" +item_x1 "\\relax \\glsresetentrylist\n" +item_12 "\%\n" +item_x2 "\\relax \\glsresetentrylist\n" +delim_0 "\{\\glossaryentrynumbers\{\\relax " +delim_1 "\{\\glossaryentrynumbers\{\\relax " +delim_2 "\{\\glossaryentrynumbers\{\\relax " +delim_t "\}\}" +delim_n "\\delimN " +delim_r "\\delimR " +headings_flag 1 +heading_prefix "\\glsgroupheading\{" +heading_suffix "\}\\relax \\glsresetentrylist " +symhead_positive "glssymbols" +numhead_positive "glsnumbers" +page_compositor "." +suffix_2p "" +suffix_3p "" diff --git a/main.out.ps b/main.out.ps new file mode 100644 index 0000000..24275e2 --- /dev/null +++ b/main.out.ps @@ -0,0 +1,81 @@ +%! +/pdfmark where{pop} +{/globaldict where{pop globaldict}{userdict}ifelse/pdfmark/cleartomark load put} +ifelse +[ +/Title(\376\377\000E\000i\000n\000l\000e\000i\000t\000u\000n\000g) +/Action/GoTo/Dest(chapter.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000A\000u\000f\000g\000a\000b\000e) +/Action/GoTo/Dest(chapter.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000L\000\366\000s\000u\000n\000g\000s\000k\000o\000n\000z\000e\000p\000t) +/Count -4 +/Action/GoTo/Dest(chapter.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000R\000O\000S) +/Count -2 +/Action/GoTo/Dest(section.3.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000o\000v\000e\000I\000t) +/Action/GoTo/Dest(subsection.3.1.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000r\000\040\000T\000r\000e\000e) +/Action/GoTo/Dest(subsection.3.1.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000G\000a\000z\000e\000b\000o) +/Count -1 +/Action/GoTo/Dest(section.3.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000S\000e\000n\000s\000o\000r\000e\000n) +/Action/GoTo/Dest(subsection.3.2.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000R\000o\000b\000o\000t\000e\000r) +/Action/GoTo/Dest(section.3.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000Z\000u\000s\000a\000m\000m\000e\000n\000f\000a\000s\000s\000u\000n\000g) +/Action/GoTo/Dest(section.3.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000U\000m\000s\000e\000t\000z\000u\000n\000g) +/Count -1 +/Action/GoTo/Dest(chapter.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000R\000O\000S) +/Count -4 +/Action/GoTo/Dest(section.4.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000A\000u\000s\000w\000a\000h\000l\000\040\000d\000e\000r\000\040\000R\000O\000S\000-\000U\000m\000g\000e\000b\000u\000n\000g) +/Action/GoTo/Dest(subsection.4.1.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000G\000a\000z\000e\000b\000o) +/Action/GoTo/Dest(subsection.4.1.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000o\000v\000e\000I\000t) +/Action/GoTo/Dest(subsection.4.1.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000u\000r\000-\000T\000r\000e\000e\000s) +/Action/GoTo/Dest(subsection.4.1.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000E\000r\000g\000e\000b\000n\000i\000s\000s\000e) +/Action/GoTo/Dest(chapter.5)cvn +/OUT pdfmark +[ +/Title(\376\377\000D\000i\000s\000k\000u\000s\000s\000i\000o\000n) +/Action/GoTo/Dest(chapter.6)cvn +/OUT pdfmark diff --git a/main.pdf b/main.pdf new file mode 100644 index 0000000..5bdba9f Binary files /dev/null and b/main.pdf differ diff --git a/main.tex b/main.tex new file mode 100644 index 0000000..9f78138 --- /dev/null +++ b/main.tex @@ -0,0 +1,425 @@ +\documentclass[paper=a4, +ngerman, +captions=tableabove, +fontsize=11pt, +numbers=noenddot, +parskip=half, +]{scrreprt} +\usepackage[ngerman]{babel} +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{csquotes} +\usepackage[includehead,includefoot, left=3.0cm, right=2.5cm, top=1.5cm, bottom=1.5cm]{geometry} +\usepackage{acro} +\usepackage{listings} +\usepackage[style=numeric,backend=biber]{biblatex} +\usepackage{pdfpages} +\usepackage{scrhack} +\usepackage{xcolor} +\usepackage{enumitem} +\usepackage{hyperref} +\usepackage{tabularray} + +\usepackage[letterspace=150]{microtype} +\usepackage[onehalfspacing]{setspace} +\usepackage[page]{totalcount} +\usepackage[automark,headsepline=.4pt,plainheadsepline]{scrlayer-scrpage} % Erstellung von selbst definierten Kopfzeilen +\clearpairofpagestyles%\clearscrheadfoot veraltet +\renewcommand*{\chaptermarkformat}{ + \chaptername~\thechapter\autodot\enskip +} + +\ihead*{\rightmark} +\ohead*{\thepage} +\setkomafont{pageheadfoot}{\normalfont} + +\pagestyle{scrheadings} + +\pdfminorversion=7 + +\addbibresource{main.bib} + +% Title Page +\title{} +\subtitle{mechatronisches Forschungsprojekt} +\author{Bastian Maximilian Hofmann} + + +\DeclareAcronym{ros}{ + short=ROS, + long=Robot Operating System, +} +\DeclareAcronym{fsm}{ + short=FSM, + long=Finite-State-Machine, +} +\DeclareAcronym{mrk}{ + short=MRK, + long=Mensch-Roboter-Kollaboration, +} + + +\begin{document} + +\setcounter{page}{1} +\pagenumbering{Roman} + +\begin{titlepage} + +\includepdf[pages=-]{Deckblatt.pdf} + +\end{titlepage} + +\tableofcontents + +\includepdf[pages=-]{Aufgabenstellung.pdf} + +\setcounter{page}{1} +\pagenumbering{arabic} + + +\chapter{Einleitung} +\section{Motivation} +Das Feld der Mensch-Roboter-Kollaboration entwickelt sich mit zunehmender Geschwindigkeit fort. +Viele Unternehmen bieten neue Lösungen für die unterschiedlichsten Einsatzszenarien der Endanwender. + +Dabei ist eine Prüfung des Anwendungsfalls sinnvoll, um etwaige Probleme der Interaktion früh erkennen und beheben zu können. +Diese Prüfung kann durch eine Simulation, in welcher der konkrete Anwendungsfall abgebildet wird, vereinfacht werden. + +Außerdem bietet eine Simulation die Möglichkeit, die Aufgabe des Roboters, ohne dessen Anschaffung, evaluieren zu können. +Das so gefertigte Modell des Anwendungsfalls könnte später auch als Grundlage für einen digitalen Zwilling dienen. +Dieser kann später zur Wartung und Fehlerdiagnose des Systems dienen. + +-MRK häufiger ein Thema +-Anwendungsfälle sollen evaluiert werden +-Erprobung von Szenarien ohne Roboter + +->Simulation eine kompletten Szenarios mit Roboter und Mensch +\section{Stand der Wissenschaft} +Aktuelle Arbeiten: + +-Planung von Interaktionen + +-Parametervergrleiche von maschinellen und menschlichen Bewegungen + +-Vermeidung von Kollisionen und Strategie + +-Steuerung von Robotern mit Behavior Trees + +-> Keine allgemeine Simulation einen gesamten Szenarios mit Mensch. + +\url{https://www.sciencedirect.com/science/article/pii/S2351978918311442} +\url{https://www.researchgate.net/publication/319888916_Interactive_Simulation_of_Human-robot_Collaboration_Using_a_Force_Feedback_Device} +\url{https://elib.dlr.de/120687/1/human_motion_projection.pdf} +\url{https://www.researchgate.net/publication/220065749_Human-Robot_Collaboration_a_Survey} + +\section{Welche Szenarien} +Die drei Szenarien sollten so gewählt werden, dass vorher genutzte Bestandteile in späteren, komplexeren Szenarien weiter genutzt werden können. +Hierfür kommen bestimmte Aufgaben, wie zum Beispiel die Manipulation von Objekten, besonders in Frage, da diese viele ähnliche Bestandteile haben, jedoch mehrere Szenarien denkbar sind. + +Das erste abgebildete Szenario soll sich mit der Simulation einer bereits vollautomatisierten Fertigungsaufgabe handeln, in welcher ein Roboter im Arbeitsbereich eines Menschen Teile fertigt. +Die zu erwartende Interaktion beschränkt sich hierbei auf die Anpassung der Fahrgeschwindigkeit bei Annäherung des Menschen. + +Bei dem zweiten Szenario soll der Roboter Teile sortieren und auf ein Fließband legen, falls diese weiter genutzt werden können. +Der Mensch muss nun nur noch den Ausschuss beseitigen, welcher vom Roboter in eine besondere Zone gelegt wird. + +Die dritte simulierte Aufgabe stellt ein Colaborationsszenario dar, in welchem Mensch und Roboter an der selben Aufgabe arbeiten. +Hierbei soll eine Palette entladen werden, wobei der Roboter nicht jedes Objekt ausreichend manipulieren kann. +In diesen Fällen muss nun ein Mensch aushelfen, wodurch er mit dem Roboter in Interaktion tritt. +\section{Welcher Nutzen / Contributions} +- Erkennen von konzeptionellen Problemen vor Ersteinsatz + +- Definition von Interaktion mit einfacheren Strukturen als State-Machines +\chapter{Konzept} +Die zu entwickelnde Simulation soll die bisher meißt separaten Zweige der Roboter- und Menschensimulation verbinden. +Um die beiden Akteuren in der simulierten Umgebung zu steuern, werden Befehle von außerhalb der Simulation eingesetzt. +Diese Befehle werden dabei von externer Software unter der Verwendung von Behavior Trees und Feedback aus der Simulation generiert. + +Die zu erarbeitende Softwareumgebung soll einfach erweiterbar sein, um weitere Modifikationen und die Umsetzung anderer Projekte zuzulassen. +Hierzu zählt die Austauschbarkeit und Erweiterbarkeit von Komponenten wie der simulierten Welt, dem Roboter oder dem simulierten Mensch. +Um diese Möglichkeiten zu schaffen, sind die Systeme modular aufgebaut. + +-Mensch und Roboter in Simulation +-Austauschbare Welt +-Beliebig erweiterbar +\section{Simulation des Roboters} +Der simulierte Roboter soll für viele unterschiedliche Szenarien nutzbar sein, was spezialisierte Robotertypen ausschließt. +Außerdem ist die enge Interaktion mit Menschen interessant, was einen für Mensch-Roboter-Kollaboration ausgelegten Roboter spricht. +Für diese beschriebenen Kriterien eignet sich der KUKA LBR iisy, welcher als Cobot vermarktet wird. +Cobot ist dabei ein Portemanteau aus Collaborative und Robot, was die besondere Eignung für MRK-Szenarien noch einmal unterstreicht. +Er besitzt auch einen modifizierbaren Endeffektor, um unterschiedlichste Aufgaben erfüllen zu können. + +Um den Kuka iisy in der Simulation verwenden zu können, muss ein Modell des Roboterarms erstellt werden. +Anhand dieses Modells kann der Roboter dann in der Simulation dargestellt werden und mit anderen Objekten interagieren. + +-Beruhend auf echtem Roboter (Kuka iisy) +-Kollision +\section{Simulation des Menschen} +Der Mensch soll in der Simulation typische Aufgaben erledigen und häufiges Verhalten abbilden können. +Hierzu werden Animationen verwendet, welche die aktuelle Tätigkeit darstellen. +Für komplexere Verhaltensweisen können Animationen und andere Aktionen, wie zum Beispiel eine Bewegung und Rotation kombiniert werden, um zum Beispiel die Aktion ``laufen'' auszuführen. + +Auch hier wird ein Modell der Person für die Simulation benötigt. +Außerdem werden mehrere Animationen und Übergänge zwischen diesen benötigt, um bestimmte Bewegungen darstellen zu können. +Hinzu kommt noch eine Komponente, welche diese Animationen und andere Parameter von außen entgegennehmen kann, um sie in der Simulation ausführen zu können. +Um die spätere Steuerung des Menschen von außerhalb zu erleichtern, müssen diese Aktionen im Fortschritt überwacht und abgebrochen werden können. + +-Dynamische Ausführung von Befehlen +-Erkennbare Bewegungsabläufe +\section{Behavior Trees} +-Steuerung von Mensch und Roboter +-Vermeidung der Nachteile von großen State-Machines +\chapter{Komponenten-/Softwareauswahl} +\section{Dienstumgebung (ROS2)} +\subsection{Auswahl} +\subsection{Beschreibung} +ROS2\cite{doi:10.1126/scirobotics.abm6074}, später auch einfach nur ROS genannt, beschreibt sich selbst als ``a meta operating system for robots''\cite{ros-git}. +Hierbei ist ``operating system'' nicht in seiner herkömmlichen Bedeutung eines vollständigen Betriebssystems zu verstehen. +Es handelt sich um eine gemeinsame Basis für Programme und Daten, welche durch ROS bereitgestellt wird. +Einzelne Bestandteile sind dabei in Pakete gegliedert. +Ein Paket kann dabei beliebig viele Daten und Programme beinhalten. +Programme, welche mit anderen Programmen in der Umgebung interagieren, werden in ROS ``Nodes'' genannt. + +Zu den Aufgaben von ROS gehören dabei: +\begin{description} + \item[Buildumgebung]\hfill \\ + ROS benutzt colcon \cite{colcon}, um Pakete in den Workspaces reproduzierbar zu erstellen. + Hierfür werden CMake und einige Erweiterungen, wie z.B. ament\_cmake eingesetzt. + + \item[Workspaceverwaltung]\hfill \\ + Pakete können in verschiedenen Verzeichnissen installiert werden und müssen für andere Pakete auffindbar sein. + ROS nutzt hierfür von colcon generierte Skripte, welche beim Erstellen eines Pakets mit angelegt werden. + Das Ausführen eines solchen Skripts fügt alle Pakete im Workspace der aktuellen Konsolenumgebung hinzu. + + \item[Abhängigkeitsverwaltung]\hfill \\ + ROS kann durch die in den Paketen deklarierten Abhängigkeiten prüfen, ob diese in der aktuellen Umgebung verfügbar sind. + Dies vermeidet Abstürze und undefiniertes Verhalten in der Ausführung von Nodes. + + \item[Datenübertragung]\hfill \\ + Nodes müssen miteinander auf einem festgelegten Weg kommunizieren können, um beliebige Verbindungen dieser zu unterstützen. + Dieser wird durch ROS in Form mehrerer Bibliotheken für unterschiedliche Sprachen bereitgestellt. + + \item[Parameterübergabe]\hfill \\ + Nodes benötigen häufig problemspezifische Konfiguration, um in vorher nicht bedachten Szenarien eingesetzt werden zu können. + ROS stellt diese durch deklarierfähige und integrierte Argumente bereit. + + \item[Startverwaltung]\hfill \\ + In sogenannten ``launch''-Files können verschiedene Nodes und andere ``launch''-Files zu komplexen Startvorgängen zusammengefasst werden. +\end{description} + + +\section{Simulationsumgebung (Gazebo)} +\subsection{Auswahl} +Als Simulationsumgebung können verschiedene Programme genutzt werden, welche sich in ihrem Funktionsumfang stak unterscheiden. +Hierfür kommen dedizierte Werkzeuge zur Robotersimulation, aber auch zum Beispiel universell einsetzbare Gameengines in Frage. +Diese Werkzeuge müssen hierfür auf ihre Tauglichkeit für die gesetzte Aufgabe geprüft werden. +Auch andere Aspekte sind hierbei zu betrachten, wie Lizenzen oder schwer bewertbare Aspekte wie Nutzerfreundlichkeit. +Für die Auswahl kommen verschiedene Prgramme in Frage, welche im folgenden weiter beleuchtet werden. + +CoppeliaSim: +Gute Robotersimulation +Keine Simulation von Menschen +Library ist Open Source, jedoch nicht kostenfrei kommerziell einsetzbar. + +Gazebo: +Gute Robotersimulation +Einfache Simulation von Menschen integriert, jedoch nicht für Aufgabe ausreichend. +Open Source, keine Beschränkungen + +Unity: +Offizielles Roboterframework und 3rd-Party Lösung verfügbar. +Gute Dokumentation +Gute Werkzeuge für Menschensimulation. +Robotersimulation möglich, jedoch mit anderem Aufbau. +Lizenzen einfach gestaltet, jedoch nicht offen. + +Unreal: +3rd Party Lösung verfügbar +Gute Dokumentation +Gute Werkzeuge für Menschensimulation. +Lizenz komplex, nicht offen. + +Godot: +3rd Party Lösung verfügbar +Dokumentation stark im Wandel +Gute Werkzeuge für Menschensimulation. +Lizenz offen +Keine explizite Robotersimulation, wäre nachzurüsten + +\section{Robotersimulation} +-URDF-Dateiformat + +-Einteilung in Kollisions- und Anzeigemesh +\section{Menschensimulation} +-Nur vorprogrammierte Bewegungen möglich + +-Nur einige vorgefertigte Animationen verfügbar + +\section{Roboterumgebung (MoveIt2)} +-populärste Umgebung für Bewegungsplanung in ROS2 + +-Integration mit ros\_control + +-Integration von ros\_control in gazebo ignition möglich +\chapter{Umsetzung} +\section{Grundlegender Systemaufbau} +-BehaviorTree -> ActorPluginServer -> ActorPluginServer + +-BehaviorTree -> MoveIt -> ros\_control -> Gazebo +\section{Mensch} +\subsection{Übersicht (Diagramme)} +\subsection{Modellierung} +Rerigging des Actor-Modells +Animation in eigenem Rig +Konflikte durch 'verschiedene' Rigs in Animationen +Erstellung eines neuen Rigify-Rigs +Erneutes Erstellen von Animationen +Disconnect Bones in Rig +Flatten Hierarchy +\subsection{Programmierung} +\subsubsection{Message Queue} +-2 rclcpp Instanzen kollidieren + +-Anderes Protokoll nötig + +-Möglichst einfach, von anderen Sprachen verwendbar und schnell + +-Websocket zu langsam + +-Shared memory schwer zu synchronisieren + +-Message Queue guter Mix aus beiden +\subsubsection{ROS-Server} +-Transformieren von ROS2 action server in Message Queue + +-Eigene state machine +\subsubsection{Gazebo Plugin} +-Relativ einfache Implementation + +-Reagiert nur auf Nachrichten, kein Konzept der gesamten Abfolge +\section{Roboter} +\subsection{Übersicht (Diagramme)} +\subsection{Modellierung} +Erstellung der Robotermodelle aus Herstellerdaten + +Kollision und Visualisierung +\subsection{Details} +\chapter{Szenarienbasierte Evaluation} +\section{Simulation des Menschen} +-Animationen und Bewegungen funktionieren + +-Kollisionen möglich, aber mit Animationen schwer zu synchronisieren +\section{Bewegung des Roboters} +-Roboter kann sich bewegen + +-Kollisionen verfügbar + +-Interaktion technisch möglich, nicht implementiert. (Kooperation MoveIt/Gazebo nötig) +\section{BehaviorTrees} +\subsection{Nodes} +-Nodes für implementierte Funktionen verfügbar + +-Einige andere, technisch relevante Nodes auch implementiert +\subsection{Kombinieren von Nodes zu einer Request} +-MoveIt Planung benötigt mehrere Parameter, sollen aber in einzelnen Nodes gesetzt werden + +-Kombination nötig, Beschreibung hier +\chapter{Diskussion} +\section{Lessons Learned bei der Umsetzung} +-Viele kleine Unannehmlichkeiten, kombiniert ein großes Problemen + +-Dokumentation für spätere Projekte +\subsection{Erstellung des Robotermodells} +-Keine direkten technischen Daten zum Roboter von Kuka + +-Nur CAD-Dateien der Außenhülle + +-Schätzung von Spezifikationen anhand Marketingmaterial +\subsection{Gazebo} +\subsubsection{Upgrade auf Ignition} +Gazebo ist zu diesem Zeitpunkt in mehreren, teilweise gleichnamigen Versionen verfügbar, welche sich jedoch grundlegend unterscheiden. +Ein altes Projekt mit dem früheren Namen Gazebo, welches nun in Gazebo Classic umbenannt wurde, +die Neuimplementation der Simulationssoftware mit dem Namen Gazebo Ignition und +die nächste Version, welche nur noch den Namen Gazebo tragen soll. +Dies ist darauf zurückzuführen, dass Gazebo Classic und Ignition eine Zeit lang gleichzeitig existierten, jedoch unterschiedliche Funktionen und interne Schnittstellen besitzen. + +Das Upgrade von Gazebo Classic auf Gazebo Ignition gestaltete sich aus mehreren Gründen schwierig. +Dies ist am leichtesten an der geänderten Nutzeroberfläche sichtbar, welche in Ignition nun modular ausgeführt ist. +Um dieses neue modulare System nutzen zu können, wurde das Dateiformat für die Simulationen angepasst. +In diesem werden die benötigten Physikparameter, Nutzeroberflächen, Plugins und die Simulationswelt definiert. + +Um alte Simulationsdateien zu migieren, empfiehlt sich die Erstellung einer neuen, leeren Welt in Gazebo Ignition, +sodass alle benötigten Physik, Nuteroberflächen und Pluginreferenzen erstellt werden. +Danach kann die Welt Stück für Stück in das neue Format übertragen werden, wobei nach jedem Eintrag ein Test zur Funktionsfähigkeit gemacht werden sollte, da sich bestimmte Parameterdeklarationen geändert haben. +Die Arbeit in kleine Stücke aufzuteilen ist hierbei hilfreich, da Fehler während des Ladevorgangs im Log nicht weiter beschrieben werden. + +Auch das alte Plugin musste auf das neue System angepasst werden, was auch hier zu einer kompletten Neuimplementation führte, da die internen Systeme zu große Unterschiede aufwiesen. +Darunter fallen eine grundlegende Strukturänderung der unterliegenden Engine, welche auf ein Entity-Component-System umstellte, aber auch sahlreiche kleinere Änderungen +\subsubsection{Pluginarchitektur} +-Plugins werden im selben Kontext geladen, verwendung von Librarys mit globalem Kontext schwer +\subsubsection{Doppelte Messagedienste} +-Duplizierung von Messagediensten in ROS und Gazebo + +-Potentielle Lösung in einer Präsentation angekündigt (mal sehen, ob ich die wiederfinde) +\subsubsection{Fehlende Animationsgrundlagen} +-Animationen werden als .col bereitgestellt + +-Enthalten Textur, Mesh und Bones, jedoch nicht verbunden -> schlecht für Animation +\subsection{ROS2} +\subsubsection{Nachrichten und deren Echtzeitfähigkeit} +-TCP und UDP verfügbar, jedoch nicht sofort kompatibel +\subsubsection{Änderung der Compilertoolchain} +-Änderung des Buildsystems von rosbuild auf catkin + +-Benötigte Änderungen in CMakeFile und package +\subsection{MoveIt2} +\subsubsection{Upgrade auf MoveIt2} +-Unterschiede in der Deklaration des Roboters selbst + +-Änderungen der Deklaration der ros\_control Anbindung + +-Vorerst kein Setup, manuelle Migration erforderlich + +->Lesson learned: Projekte häufig auf Updates prüfen +\subsubsection{Fehlerhafte Generierung der Roboter} +-Einige Aspekte der Generierung nicht erforderlich oder falsch +\subsubsection{Controller} +-Controller benötigte Anpassungen und manuelle Tests +\section{Lessons Learned bei den Szenarien} +\subsection{Debugging} +-async tty Option + +-gdb ist ein Muss + +-``Aufhängen'' von trees +\chapter{Zusammenfassung und Ausblick} +\section{Ergebnisse} +\subsection{Graphische Repräsentation der Szenarien} +-Szenarien graphisch abgebildet +\subsection{Anpassung der Behavior Trees an Szenarien} +-Trees angepasst +\section{Diskussion} +-Viele Iterationen benötigt + +-Funktionstüchtige Simulation der Szenarien + +-Bewegung der Objekte schwerer als gedacht + +-Synchronisationsmechanismus Gazebo <-> MoveIt benötigt +\section{Ausblick} +\subsection{Umsetzung in anderem Simulator} +-Einfachere ROS Anbindung +-Potentiell einfacher ausbaubar auf Basis einer erweiterbaren Gameengine +-Mangelhafte Dokumentation von Gazebo +\subsection{Simulation bewegter Objekte} +-Aufgrund von Komplexität des Prozesses nicht integriert +\subsection{Ergänzung von Umgebungserkennung} +-MoveIt hat Unterstützung + +-Daten aus Gazebo extrahieren und in MoveIt einbinden + +-Person in OctoMap erkennen + +\printbibliography + +\end{document} diff --git a/mechforsch.kilepr b/mechforsch.kilepr new file mode 100644 index 0000000..85f6df3 --- /dev/null +++ b/mechforsch.kilepr @@ -0,0 +1,37 @@ +[General] +bib_extensions=.bib +bibliographyBackendAutoDetected=Biber +bibliographyBackendUserOverride= +def_graphic_ext=pdf +img_extIsRegExp=false +img_extensions=.eps .jpg .jpeg .png .pdf .ps .fig .gif +kileprversion=3 +kileversion=2.9.93 +masterDocument= +name=Masterarbeit +pkg_extIsRegExp=false +pkg_extensions=.cls .sty .bbx .cbx .lbx +src_extIsRegExp=false +src_extensions=.tex .ltx .latex .dtx .ins + +[Tools] +MakeIndex= +QuickBuild= + +[item:main.bib] +archive=true +encoding=UTF-8 +highlight=BibTeX +mode=BibTeX + +[item:main.tex] +archive=true +encoding=UTF-8 +highlight=LaTeX +mode=LaTeX + +[item:mechforsch.kilepr] +archive=true +encoding= +highlight= +mode= diff --git a/moveConnection.pdf b/moveConnection.pdf new file mode 100644 index 0000000..2804172 Binary files /dev/null and b/moveConnection.pdf differ diff --git a/overview.pdf b/overview.pdf new file mode 100644 index 0000000..703f746 Binary files /dev/null and b/overview.pdf differ diff --git a/robot.pdf b/robot.pdf new file mode 100644 index 0000000..e07af4f Binary files /dev/null and b/robot.pdf differ diff --git a/robot_new.pdf b/robot_new.pdf new file mode 100644 index 0000000..d872236 Binary files /dev/null and b/robot_new.pdf differ diff --git a/user.pdf b/user.pdf new file mode 100644 index 0000000..e171282 Binary files /dev/null and b/user.pdf differ diff --git a/user_new.pdf b/user_new.pdf new file mode 100644 index 0000000..d5cb163 Binary files /dev/null and b/user_new.pdf differ