diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 74fc0de..0000000 --- a/.gitignore +++ /dev/null @@ -1,315 +0,0 @@ - -# 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 index 09b175d..faf7294 100644 --- a/.kile/mechforsch.kilepr.gui +++ b/.kile/mechforsch.kilepr.gui @@ -77,8 +77,8 @@ Mode=LaTeX Mode Set By User=false [item:main.bib] -open=false -order=1 +open=true +order=5 [item:main.tex] open=true @@ -113,27 +113,27 @@ TextFolding={"checksum":"","ranges":[]} ViMarks= [view-settings,view=0,item:main.bib] -CursorColumn=14 -CursorLine=109 +CursorColumn=39 +CursorLine=124 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"4af487415133a6dcd896d70e042ef9ac694f0ea6","ranges":[]} +TextFolding={"checksum":"739b41a3d0418be76fb9832856bf61b41b8246a1","ranges":[]} ViMarks= [view-settings,view=0,item:main.tex] -CursorColumn=0 -CursorLine=111 +CursorColumn=45 +CursorLine=176 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"86fedba94f6f431aca10df7e7ffc4fd7dd3eac24","ranges":[]} +TextFolding={"checksum":"158329202f028c3e1d1437e81256f8ab37c5f9c3","ranges":[]} ViMarks= [view-settings,view=0,item:tex/1_Einleitung.tex] -CursorColumn=42 -CursorLine=26 +CursorColumn=0 +CursorLine=19 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"7f68313ac5accbbfe63bf0c2f33b5f2b97851ec3","ranges":[]} +TextFolding={"checksum":"8adc2060163a9c199c7a904534fb248831564ce4","ranges":[]} ViMarks= [view-settings,view=0,item:tex/2_Konzept.tex] @@ -141,23 +141,23 @@ CursorColumn=0 CursorLine=0 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"daf7cac8e4765460806a7139b3eb9171fb011da3","ranges":[]} +TextFolding={"checksum":"0c6fe8907e6bb50811600d85d72851fe402f8c80","ranges":[]} ViMarks= [view-settings,view=0,item:tex/3_Auswahl.tex] -CursorColumn=0 -CursorLine=164 +CursorColumn=157 +CursorLine=266 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"04558a693eba7702df7000723ab69b6eb36166ba","ranges":[]} +TextFolding={"checksum":"e90e925eeab38e92c6b17256a2993fc4a01f29c8","ranges":[]} ViMarks= [view-settings,view=0,item:tex/4_Umsetzung.tex] -CursorColumn=0 -CursorLine=216 +CursorColumn=27 +CursorLine=138 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"93fb61d8448ada79778cce2b5e34a55776abbb30","ranges":[]} +TextFolding={"checksum":"d54709e0d3b00c46d9571f297ab62aa6064e7f7c","ranges":[]} ViMarks= [view-settings,view=0,item:tex/Einleitung.tex] diff --git a/Aufgabenstellung.pdf b/Aufgabenstellung.pdf deleted file mode 100644 index 5a6493b..0000000 Binary files a/Aufgabenstellung.pdf and /dev/null differ diff --git a/Deckblatt.pdf b/Deckblatt.pdf deleted file mode 100644 index 1117c9a..0000000 Binary files a/Deckblatt.pdf and /dev/null differ diff --git a/htwk-eps-converted-to.pdf b/htwk-eps-converted-to.pdf new file mode 100644 index 0000000..7c80a6d Binary files /dev/null and b/htwk-eps-converted-to.pdf differ diff --git a/img/Konzept_Overview.pdf b/img/Konzept_Overview.pdf deleted file mode 100644 index eb0c9ab..0000000 Binary files a/img/Konzept_Overview.pdf and /dev/null differ diff --git a/img/MA-Konzept-Übersicht.drawio.pdf b/img/MA-Konzept-Übersicht.drawio.pdf new file mode 100644 index 0000000..501a58c Binary files /dev/null and b/img/MA-Konzept-Übersicht.drawio.pdf differ diff --git a/img/MA-Roboter-Kollision.png b/img/MA-Roboter-Kollision.png new file mode 100644 index 0000000..2ba0222 Binary files /dev/null and b/img/MA-Roboter-Kollision.png differ diff --git a/img/MA-Roboter-Rohdaten.png b/img/MA-Roboter-Rohdaten.png new file mode 100644 index 0000000..b47ac66 Binary files /dev/null and b/img/MA-Roboter-Rohdaten.png differ diff --git a/img/MA-Roboter-Visuell.png b/img/MA-Roboter-Visuell.png new file mode 100644 index 0000000..19f31d2 Binary files /dev/null and b/img/MA-Roboter-Visuell.png differ diff --git a/img/MA-Umsetzung-Welt-Blender.png b/img/MA-Umsetzung-Welt-Blender.png new file mode 100644 index 0000000..ef1b754 Binary files /dev/null and b/img/MA-Umsetzung-Welt-Blender.png differ diff --git a/img/MA-Umsetzung-Welt-Plan.drawio.pdf b/img/MA-Umsetzung-Welt-Plan.drawio.pdf new file mode 100644 index 0000000..2b766dc Binary files /dev/null and b/img/MA-Umsetzung-Welt-Plan.drawio.pdf differ diff --git a/img/Umsetzung_Overview.pdf b/img/MA-Umsetzung-Übersicht.drawio.pdf similarity index 93% rename from img/Umsetzung_Overview.pdf rename to img/MA-Umsetzung-Übersicht.drawio.pdf index 45cba05..6456967 100644 Binary files a/img/Umsetzung_Overview.pdf and b/img/MA-Umsetzung-Übersicht.drawio.pdf differ diff --git a/demo.pdf b/img/tree_demo.pdf similarity index 100% rename from demo.pdf rename to img/tree_demo.pdf diff --git a/main.bbl b/main.bbl new file mode 100644 index 0000000..f796275 --- /dev/null +++ b/main.bbl @@ -0,0 +1,145 @@ +% $ biblatex auxiliary file $ +% $ biblatex bbl format version 3.2 $ +% Do not modify the above lines! +% +% This is an auxiliary file used by the 'biblatex' package. +% This file may safely be deleted. It will be recreated by +% biber as required. +% +\begingroup +\makeatletter +\@ifundefined{ver@biblatex.sty} + {\@latex@error + {Missing 'biblatex' package} + {The bibliography requires the 'biblatex' package.} + \aftergroup\endinput} + {} +\endgroup + + +\refsection{0} + \datalist[entry]{nty/global//global/global} + \entry{colcon}{misc}{} + \field{sortinit}{c} + \field{sortinithash}{4d103a86280481745c9c897c925753c0} + \field{labeltitlesource}{title} + \field{note}{letzter Zugriff: 02.04.2023} + \field{title}{colcon - collective construction} + \verb{urlraw} + \verb https://colcon.readthedocs.io/en/released/ + \endverb + \verb{url} + \verb https://colcon.readthedocs.io/en/released/ + \endverb + \endentry + \entry{ros-git}{misc}{} + \field{sortinit}{G} + \field{sortinithash}{32d67eca0634bf53703493fb1090a2e8} + \field{labeltitlesource}{title} + \field{note}{letzter Zugriff: 02.04.2023} + \field{title}{GitHub - ros2/ros2: The Robot Operating System, is a meta operating system for robots.} + \verb{urlraw} + \verb https://github.com/ros2/ros2 + \endverb + \verb{url} + \verb https://github.com/ros2/ros2 + \endverb + \endentry + \entry{doi:10.1126/scirobotics.abm6074}{article}{} + \name{author}{5}{}{% + {{hash=7b84d10a03303cd00f198fefb38a5da3}{% + family={Macenski}, + familyi={M\bibinitperiod}, + given={Steven}, + giveni={S\bibinitperiod}}}% + {{hash=0d11ace6e44e4742ea1692d7ddf4819e}{% + family={Foote}, + familyi={F\bibinitperiod}, + given={Tully}, + giveni={T\bibinitperiod}}}% + {{hash=a8ad4a5f43253f69552460c946e34e49}{% + family={Gerkey}, + familyi={G\bibinitperiod}, + given={Brian}, + giveni={B\bibinitperiod}}}% + {{hash=4e2c9f9d04cf548117105f50a9c8a7a1}{% + family={Lalancette}, + familyi={L\bibinitperiod}, + given={Chris}, + giveni={C\bibinitperiod}}}% + {{hash=fe838d86b89f8983167a3747e11998bb}{% + family={Woodall}, + familyi={W\bibinitperiod}, + given={William}, + giveni={W\bibinitperiod}}}% + } + \strng{namehash}{4a195e02383364d4009f77ca22451e11} + \strng{fullhash}{c321d95ccac4f92536f0f1ed99f34d05} + \strng{bibnamehash}{4a195e02383364d4009f77ca22451e11} + \strng{authorbibnamehash}{4a195e02383364d4009f77ca22451e11} + \strng{authornamehash}{4a195e02383364d4009f77ca22451e11} + \strng{authorfullhash}{c321d95ccac4f92536f0f1ed99f34d05} + \field{sortinit}{M} + \field{sortinithash}{4625c616857f13d17ce56f7d4f97d451} + \field{labelnamesource}{author} + \field{labeltitlesource}{title} + \field{journaltitle}{Science Robotics} + \field{number}{66} + \field{title}{Robot Operating System 2: Design, architecture, and uses in the wild} + \field{volume}{7} + \field{year}{2022} + \field{pages}{eabm6074} + \range{pages}{-1} + \verb{doi} + \verb 10.1126/scirobotics.abm6074 + \endverb + \verb{urlraw} + \verb https://www.science.org/doi/abs/10.1126/scirobotics.abm6074 + \endverb + \verb{url} + \verb https://www.science.org/doi/abs/10.1126/scirobotics.abm6074 + \endverb + \endentry + \entry{moveitpython}{misc}{} + \field{sortinit}{M} + \field{sortinithash}{4625c616857f13d17ce56f7d4f97d451} + \field{labeltitlesource}{title} + \field{note}{letzter Zugriff: 10.04.2023} + \field{title}{MoveIt Commander with ROS2 - Issue \#337 - ros-planning/moveit2_tutorials} + \verb{urlraw} + \verb https://github.com/ros-planning/moveit2_tutorials/issues/337 + \endverb + \verb{url} + \verb https://github.com/ros-planning/moveit2_tutorials/issues/337 + \endverb + \endentry + \entry{moveitpipeline}{misc}{} + \field{sortinit}{m} + \field{sortinithash}{4625c616857f13d17ce56f7d4f97d451} + \field{labeltitlesource}{title} + \field{note}{letzter Zugriff: 02.04.2023} + \field{title}{moveit2_tutorials/moveit_pipeline.png at humble - ros-planning/moveit2_tutorials} + \verb{urlraw} + \verb https://github.com/ros-planning/moveit2_tutorials/blob/humble/_static/images/moveit_pipeline.png + \endverb + \verb{url} + \verb https://github.com/ros-planning/moveit2_tutorials/blob/humble/_static/images/moveit_pipeline.png + \endverb + \endentry + \entry{rospackages}{misc}{} + \field{sortinit}{P} + \field{sortinithash}{ff3bcf24f47321b42cb156c2cc8a8422} + \field{labeltitlesource}{title} + \field{note}{letzter Zugriff: 10.04.2023} + \field{title}{Packages - /ros2/ubuntu/pool/main/ :: Oregon State University Open Source Lab} + \verb{urlraw} + \verb http://packages.ros.org/ros2/ubuntu/pool/main/ + \endverb + \verb{url} + \verb http://packages.ros.org/ros2/ubuntu/pool/main/ + \endverb + \endentry + \enddatalist +\endrefsection +\endinput + diff --git a/main.bcf b/main.bcf new file mode 100644 index 0000000..3728ade --- /dev/null +++ b/main.bcf @@ -0,0 +1,2411 @@ + + + + + + output_encoding + utf8 + + + input_encoding + utf8 + + + debug + 0 + + + mincrossrefs + 2 + + + minxrefs + 2 + + + sortcase + 1 + + + sortupper + 1 + + + + + + + alphaothers + + + + + extradatecontext + labelname + labeltitle + + + labelalpha + 0 + + + labelnamespec + shortauthor + author + shorteditor + editor + translator + + + labeltitle + 0 + + + labeltitlespec + shorttitle + title + maintitle + + + labeltitleyear + 0 + + + labeldateparts + 0 + + + labeldatespec + date + year + eventdate + origdate + urldate + nodate + + + julian + 0 + + + gregorianstart + 1582-10-15 + + + maxalphanames + 3 + + + maxbibnames + 3 + + + maxcitenames + 3 + + + maxsortnames + 3 + + + maxitems + 3 + + + minalphanames + 1 + + + minbibnames + 1 + + + mincitenames + 1 + + + minsortnames + 1 + + + minitems + 1 + + + nohashothers + 0 + + + noroman + 0 + + + nosortothers + 0 + + + pluralothers + 0 + + + singletitle + 0 + + + skipbib + 0 + + + skipbiblist + 0 + + + skiplab + 0 + + + sortalphaothers + + + + + sortlocale + ngerman + + + sortingtemplatename + nty + + + sortsets + 0 + + + uniquelist + false + + + uniquename + false + + + uniqueprimaryauthor + 0 + + + uniquetitle + 0 + + + uniquebaretitle + 0 + + + uniquework + 0 + + + useprefix + 0 + + + useafterword + 1 + + + useannotator + 1 + + + useauthor + 1 + + + usebookauthor + 1 + + + usecommentator + 1 + + + useeditor + 1 + + + useeditora + 1 + + + useeditorb + 1 + + + useeditorc + 1 + + + useforeword + 1 + + + useholder + 1 + + + useintroduction + 1 + + + usenamea + 1 + + + usenameb + 1 + + + usenamec + 1 + + + usetranslator + 0 + + + useshortauthor + 1 + + + useshorteditor + 1 + + + + + + extradatecontext + labelname + labeltitle + + + labelalpha + 0 + + + labelnamespec + shortauthor + author + shorteditor + editor + translator + + + labeltitle + 0 + + + labeltitlespec + shorttitle + title + maintitle + + + labeltitleyear + 0 + + + labeldateparts + 0 + + + labeldatespec + date + year + eventdate + origdate + urldate + nodate + + + maxalphanames + 3 + + + maxbibnames + 3 + + + maxcitenames + 3 + + + maxsortnames + 3 + + + maxitems + 3 + + + minalphanames + 1 + + + minbibnames + 1 + + + mincitenames + 1 + + + minsortnames + 1 + + + minitems + 1 + + + nohashothers + 0 + + + noroman + 0 + + + nosortothers + 0 + + + singletitle + 0 + + + skipbib + 0 + + + skipbiblist + 0 + + + skiplab + 0 + + + uniquelist + false + + + uniquename + false + + + uniqueprimaryauthor + 0 + + + uniquetitle + 0 + + + uniquebaretitle + 0 + + + uniquework + 0 + + + useprefix + 0 + + + useafterword + 1 + + + useannotator + 1 + + + useauthor + 1 + + + usebookauthor + 1 + + + usecommentator + 1 + + + useeditor + 1 + + + useeditora + 1 + + + useeditorb + 1 + + + useeditorc + 1 + + + useforeword + 1 + + + useholder + 1 + + + useintroduction + 1 + + + usenamea + 1 + + + usenameb + 1 + + + usenamec + 1 + + + usetranslator + 0 + + + useshortauthor + 1 + + + useshorteditor + 1 + + + + + datamodel + labelalphanametemplate + labelalphatemplate + inheritance + translit + uniquenametemplate + sortingnamekeytemplate + sortingtemplate + extradatespec + extradatecontext + labelnamespec + labeltitlespec + labeldatespec + controlversion + alphaothers + sortalphaothers + presort + texencoding + bibencoding + sortingtemplatename + sortlocale + language + autolang + langhook + indexing + hyperref + backrefsetstyle + block + pagetracker + citecounter + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + labeldate + labeltime + dateera + date + time + eventdate + eventtime + origdate + origtime + urldate + urltime + alldatesusetime + alldates + alltimes + gregorianstart + autocite + notetype + uniquelist + uniquename + refsection + refsegment + citereset + sortlos + babel + datelabel + backrefstyle + arxiv + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + debug + loadfiles + safeinputenc + sortcase + sortupper + terseinits + abbreviate + dateabbrev + clearlang + sortcites + sortsets + backref + backreffloats + trackfloats + parentracker + labeldateusetime + datecirca + dateuncertain + dateusetime + eventdateusetime + origdateusetime + urldateusetime + julian + datezeros + timezeros + timezones + seconds + autopunct + punctfont + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + pluralothers + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + defernumbers + locallabelwidth + bibwarn + useprefix + skipbib + skipbiblist + skiplab + dataonly + defernums + firstinits + sortfirstinits + sortgiveninits + labelyear + isbn + url + doi + eprint + related + subentry + bibtexcaseprotection + mincrossrefs + minxrefs + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + maxparens + dateeraauto + + + alphaothers + sortalphaothers + presort + indexing + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + terseinits + abbreviate + dateabbrev + clearlang + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + useprefix + skipbib + skipbiblist + skiplab + dataonly + skiplos + labelyear + isbn + url + doi + eprint + related + subentry + bibtexcaseprotection + labelalphatemplate + translit + sortexclusion + sortinclusion + extradatecontext + labelnamespec + labeltitlespec + labeldatespec + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + + + noinherit + nametemplates + labelalphanametemplatename + uniquenametemplatename + sortingnamekeytemplatename + presort + indexing + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + terseinits + abbreviate + dateabbrev + clearlang + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + useprefix + skipbib + skipbiblist + skiplab + dataonly + skiplos + isbn + url + doi + eprint + related + subentry + bibtexcaseprotection + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + + + nametemplates + labelalphanametemplatename + uniquenametemplatename + sortingnamekeytemplatename + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + terseinits + nohashothers + nosortothers + useprefix + + + nametemplates + labelalphanametemplatename + uniquenametemplatename + sortingnamekeytemplatename + uniquename + familyinits + giveninits + prefixinits + suffixinits + terseinits + useprefix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + prefix + family + + + + + shorthand + label + labelname + labelname + + + year + + + + + + labelyear + year + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + prefix + family + given + + + + + prefix + family + + + given + + + suffix + + + prefix + + + mm + + + + sf,sm,sn,pf,pm,pn,pp + family,given,prefix,suffix + boolean,integer,string,xml + default,transliteration,transcription,translation + + + article + artwork + audio + bibnote + book + bookinbook + booklet + collection + commentary + customa + customb + customc + customd + custome + customf + dataset + inbook + incollection + inproceedings + inreference + image + jurisdiction + legal + legislation + letter + manual + misc + movie + music + mvcollection + mvreference + mvproceedings + mvbook + online + patent + performance + periodical + proceedings + reference + report + review + set + software + standard + suppbook + suppcollection + suppperiodical + thesis + unpublished + video + xdata + + + sortyear + volume + volumes + abstract + addendum + annotation + booksubtitle + booktitle + booktitleaddon + chapter + edition + eid + entrysubtype + eprintclass + eprinttype + eventtitle + eventtitleaddon + gender + howpublished + indexsorttitle + indextitle + isan + isbn + ismn + isrn + issn + issue + issuesubtitle + issuetitle + issuetitleaddon + iswc + journalsubtitle + journaltitle + journaltitleaddon + label + langid + langidopts + library + mainsubtitle + maintitle + maintitleaddon + nameaddon + note + number + origtitle + pagetotal + part + relatedstring + relatedtype + reprinttitle + series + shorthandintro + subtitle + title + titleaddon + usera + userb + userc + userd + usere + userf + venue + version + shorthand + shortjournal + shortseries + shorttitle + sorttitle + sortshorthand + sortkey + presort + institution + lista + listb + listc + listd + liste + listf + location + organization + origlocation + origpublisher + publisher + afterword + annotator + author + bookauthor + commentator + editor + editora + editorb + editorc + foreword + holder + introduction + namea + nameb + namec + translator + shortauthor + shorteditor + sortname + authortype + editoratype + editorbtype + editorctype + editortype + bookpagination + nameatype + namebtype + namectype + pagination + pubstate + type + language + origlanguage + crossref + xref + date + endyear + year + month + day + hour + minute + second + timezone + yeardivision + endmonth + endday + endhour + endminute + endsecond + endtimezone + endyeardivision + eventdate + eventendyear + eventyear + eventmonth + eventday + eventhour + eventminute + eventsecond + eventtimezone + eventyeardivision + eventendmonth + eventendday + eventendhour + eventendminute + eventendsecond + eventendtimezone + eventendyeardivision + origdate + origendyear + origyear + origmonth + origday + orighour + origminute + origsecond + origtimezone + origyeardivision + origendmonth + origendday + origendhour + origendminute + origendsecond + origendtimezone + origendyeardivision + urldate + urlendyear + urlyear + urlmonth + urlday + urlhour + urlminute + urlsecond + urltimezone + urlyeardivision + urlendmonth + urlendday + urlendhour + urlendminute + urlendsecond + urlendtimezone + urlendyeardivision + doi + eprint + file + verba + verbb + verbc + url + xdata + ids + entryset + related + keywords + options + relatedoptions + pages + execute + + + abstract + annotation + authortype + bookpagination + crossref + day + doi + eprint + eprintclass + eprinttype + endday + endhour + endminute + endmonth + endsecond + endtimezone + endyear + endyeardivision + entryset + entrysubtype + execute + file + gender + hour + ids + indextitle + indexsorttitle + isan + ismn + iswc + keywords + label + langid + langidopts + library + lista + listb + listc + listd + liste + listf + minute + month + namea + nameb + namec + nameatype + namebtype + namectype + nameaddon + options + origday + origendday + origendhour + origendminute + origendmonth + origendsecond + origendtimezone + origendyear + origendyeardivision + orighour + origminute + origmonth + origsecond + origtimezone + origyear + origyeardivision + origlocation + origpublisher + origtitle + pagination + presort + related + relatedoptions + relatedstring + relatedtype + second + shortauthor + shorteditor + shorthand + shorthandintro + shortjournal + shortseries + shorttitle + sortkey + sortname + sortshorthand + sorttitle + sortyear + timezone + url + urlday + urlendday + urlendhour + urlendminute + urlendmonth + urlendsecond + urlendtimezone + urlendyear + urlhour + urlminute + urlmonth + urlsecond + urltimezone + urlyear + usera + userb + userc + userd + usere + userf + verba + verbb + verbc + xdata + xref + year + yeardivision + + + set + entryset + + + article + addendum + annotator + author + commentator + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + issn + issue + issuetitle + issuesubtitle + issuetitleaddon + journalsubtitle + journaltitle + journaltitleaddon + language + note + number + origlanguage + pages + pubstate + series + subtitle + title + titleaddon + translator + version + volume + + + bibnote + note + + + book + author + addendum + afterword + annotator + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + maintitle + maintitleaddon + mainsubtitle + note + number + origlanguage + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + mvbook + addendum + afterword + annotator + author + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + foreword + introduction + isbn + language + location + note + number + origlanguage + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + inbook + bookinbook + suppbook + addendum + afterword + annotator + author + booktitle + bookauthor + booksubtitle + booktitleaddon + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + part + publisher + pages + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + booklet + addendum + author + chapter + editor + editortype + eid + howpublished + language + location + note + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + + + collection + reference + addendum + afterword + annotator + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + mvcollection + mvreference + addendum + afterword + annotator + author + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + foreword + introduction + isbn + language + location + note + number + origlanguage + publisher + pubstate + subtitle + title + titleaddon + translator + volume + volumes + + + incollection + suppcollection + inreference + addendum + afterword + annotator + author + booksubtitle + booktitle + booktitleaddon + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + pages + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + dataset + addendum + author + edition + editor + editortype + language + location + note + number + organization + publisher + pubstate + series + subtitle + title + titleaddon + type + version + + + manual + addendum + author + chapter + edition + editor + editortype + eid + isbn + language + location + note + number + organization + pages + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + type + version + + + misc + software + addendum + author + editor + editortype + howpublished + language + location + note + organization + pubstate + subtitle + title + titleaddon + type + version + + + online + addendum + author + editor + editortype + language + note + organization + pubstate + subtitle + title + titleaddon + version + + + patent + addendum + author + holder + location + note + number + pubstate + subtitle + title + titleaddon + type + version + + + periodical + addendum + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + issn + issue + issuesubtitle + issuetitle + issuetitleaddon + language + note + number + pubstate + series + subtitle + title + titleaddon + volume + yeardivision + + + mvproceedings + addendum + editor + editortype + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + note + number + organization + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + venue + volumes + + + proceedings + addendum + chapter + editor + editortype + eid + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + organization + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + venue + volume + volumes + + + inproceedings + addendum + author + booksubtitle + booktitle + booktitleaddon + chapter + editor + editortype + eid + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + organization + pages + part + publisher + pubstate + series + subtitle + title + titleaddon + venue + volume + volumes + + + report + addendum + author + chapter + eid + institution + isrn + language + location + note + number + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + version + + + thesis + addendum + author + chapter + eid + institution + language + location + note + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + + + unpublished + addendum + author + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + howpublished + language + location + note + pubstate + subtitle + title + titleaddon + type + venue + + + abstract + addendum + afterword + annotator + author + bookauthor + booksubtitle + booktitle + booktitleaddon + chapter + commentator + editor + editora + editorb + editorc + foreword + holder + institution + introduction + issuesubtitle + issuetitle + issuetitleaddon + journalsubtitle + journaltitle + journaltitleaddon + location + mainsubtitle + maintitle + maintitleaddon + nameaddon + note + organization + origlanguage + origlocation + origpublisher + origtitle + part + publisher + relatedstring + series + shortauthor + shorteditor + shorthand + shortjournal + shortseries + shorttitle + sortname + sortshorthand + sorttitle + subtitle + title + titleaddon + translator + venue + + + article + book + inbook + bookinbook + suppbook + booklet + collection + incollection + suppcollection + manual + misc + mvbook + mvcollection + online + patent + periodical + suppperiodical + proceedings + inproceedings + reference + inreference + report + set + thesis + unpublished + + + date + year + + + + + set + + entryset + + + + article + + author + journaltitle + title + + + + book + mvbook + + author + title + + + + inbook + bookinbook + suppbook + + author + title + booktitle + + + + booklet + + + author + editor + + title + + + + collection + reference + mvcollection + mvreference + + editor + title + + + + incollection + suppcollection + inreference + + author + editor + title + booktitle + + + + dataset + + title + + + + manual + + title + + + + misc + software + + title + + + + online + + title + + url + doi + eprint + + + + + patent + + author + title + number + + + + periodical + + editor + title + + + + proceedings + mvproceedings + + title + + + + inproceedings + + author + title + booktitle + + + + report + + author + title + type + institution + + + + thesis + + author + title + type + institution + + + + unpublished + + author + title + + + + + isbn + + + issn + + + ismn + + + gender + + + + + + + main.bib + + + rospackages + doi:10.1126/scirobotics.abm6074 + ros-git + colcon + moveitpython + moveitpipeline + moveitpipeline + + + + + presort + + + sortkey + + + sortname + author + editor + translator + sorttitle + title + + + sorttitle + title + + + sortyear + year + + + volume + 0 + + + + + + diff --git a/main.bib b/main.bib index 4af4874..fe08f02 100644 --- a/main.bib +++ b/main.bib @@ -35,12 +35,6 @@ 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}, @@ -142,3 +136,27 @@ url = {https://unity.com/solutions/automotive-transportation-manufacturing/robotics}, note = {letzter Zugriff: 10.04.2023}, } + +@misc{freecad, + title = {FreeCAD: Ihr parametrischer 3D-Modellierer}, + url = {https://www.freecad.org/index.php?lang=de}, + note = {letzter Zugriff: 21.04.2023}, +} + +@misc{xacro, + title = {FreeCAD: Ihr parametrischer 3D-Modellierer}, + url = {https://github.com/ros/xacro}, + note = {letzter Zugriff: 21.04.2023}, +} + +@misc{gazebo-app, + title = {Gazebo}, + url = {https://app.gazebosim.org/dashboard}, + note = {letzter Zugriff: 23.04.2023}, +} + +@misc{sdf-format, + title = {SDFormat Specification}, + url = {https://sdformat.org/spec}, + note = {letzter Zugriff: 23.04.2023}, +} diff --git a/main.blg b/main.blg new file mode 100644 index 0000000..58c4e63 --- /dev/null +++ b/main.blg @@ -0,0 +1,15 @@ +[0] Config.pm:307> INFO - This is Biber 2.19 +[0] Config.pm:310> INFO - Logfile is 'main.blg' +[44] biber:340> INFO - === Sa Apr 15, 2023, 22:14:36 +[51] Biber.pm:419> INFO - Reading 'main.bcf' +[88] Biber.pm:979> INFO - Found 6 citekeys in bib section 0 +[95] Biber.pm:4419> INFO - Processing section 0 +[100] Biber.pm:4610> INFO - Looking for bibtex file 'main.bib' for section 0 +[101] bibtex.pm:1713> INFO - LaTeX decoding ... +[107] bibtex.pm:1519> INFO - Found BibTeX data source 'main.bib' +[131] UCollate.pm:68> INFO - Overriding locale 'de-DE' defaults 'variable = shifted' with 'variable = non-ignorable' +[131] UCollate.pm:68> INFO - Overriding locale 'de-DE' defaults 'normalization = NFD' with 'normalization = prenormalized' +[131] Biber.pm:4239> INFO - Sorting list 'nty/global//global/global' of type 'entry' with template 'nty' and locale 'de-DE' +[131] Biber.pm:4245> INFO - No sort tailoring available for locale 'de-DE' +[136] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8' +[137] bbl.pm:763> INFO - Output to main.bbl diff --git a/main.dvi b/main.dvi new file mode 100644 index 0000000..8755308 Binary files /dev/null and b/main.dvi differ diff --git a/main.log b/main.log new file mode 100644 index 0000000..197b965 --- /dev/null +++ b/main.log @@ -0,0 +1,1428 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Arch Linux) (preloaded format=pdflatex 2023.4.3) 18 APR 2023 22:26 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**main.tex +(./main.tex +LaTeX2e <2022-11-01> patch level 1 +L3 programming layer <2023-02-22> +(/usr/share/texmf-dist/tex/latex/koma-script/scrreprt.cls +Document Class: scrreprt 2022/10/12 v3.38 KOMA-Script document class (report) +(/usr/share/texmf-dist/tex/latex/koma-script/scrkbase.sty +Package: scrkbase 2022/10/12 v3.38 KOMA-Script package (KOMA-Script-dependent b +asics and keyval usage) + +(/usr/share/texmf-dist/tex/latex/koma-script/scrbase.sty +Package: scrbase 2022/10/12 v3.38 KOMA-Script package (KOMA-Script-independent +basics and keyval usage) + +(/usr/share/texmf-dist/tex/latex/koma-script/scrlfile.sty +Package: scrlfile 2022/10/12 v3.38 KOMA-Script package (file load hooks) + +(/usr/share/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty +Package: scrlfile-hook 2022/10/12 v3.38 KOMA-Script package (using LaTeX hooks) + + +(/usr/share/texmf-dist/tex/latex/koma-script/scrlogo.sty +Package: scrlogo 2022/10/12 v3.38 KOMA-Script package (logo) +))) +(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks16 +) +Applying: [2021/05/01] Usage of raw or classic option list on input line 252. +Already applied: [0000/00/00] Usage of raw or classic option list on input line + 368. +)) +(/usr/share/texmf-dist/tex/latex/koma-script/tocbasic.sty +Package: tocbasic 2022/10/12 v3.38 KOMA-Script package (handling toc-files) +\scr@dte@tocline@numberwidth=\skip48 +\scr@dte@tocline@numbox=\box51 +) +Package tocbasic Info: omitting babel extension for `toc' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `toc' on input line 137. +Class scrreprt Info: File `scrsize11pt.clo' used to setup font sizes on input l +ine 2614. + +(/usr/share/texmf-dist/tex/latex/koma-script/scrsize11pt.clo +File: scrsize11pt.clo 2022/10/12 v3.38 KOMA-Script font size class option (11pt +) +) +(/usr/share/texmf-dist/tex/latex/koma-script/typearea.sty +Package: typearea 2022/10/12 v3.38 KOMA-Script package (type area) +\ta@bcor=\skip49 +\ta@div=\count185 +\ta@hblk=\skip50 +\ta@vblk=\skip51 +\ta@temp=\skip52 +\footheight=\skip53 +Package typearea Info: These are the values describing the layout: +(typearea) DIV = 10 +(typearea) BCOR = 0.0pt +(typearea) \paperwidth = 597.50793pt +(typearea) \textwidth = 418.25555pt +(typearea) DIV departure = -6% +(typearea) \evensidemargin = 17.3562pt +(typearea) \oddsidemargin = 17.3562pt +(typearea) \paperheight = 845.04694pt +(typearea) \textheight = 595.80026pt +(typearea) \topmargin = -25.16531pt +(typearea) \headheight = 17.0pt +(typearea) \headsep = 20.40001pt +(typearea) \topskip = 11.0pt +(typearea) \footskip = 47.6pt +(typearea) \baselineskip = 13.6pt +(typearea) on input line 1767. +) +\c@part=\count186 +\c@chapter=\count187 +\c@section=\count188 +\c@subsection=\count189 +\c@subsubsection=\count190 +\c@paragraph=\count191 +\c@subparagraph=\count192 +\scr@dte@chapter@maxnumwidth=\skip54 +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\chapter on input line 5902. +\scr@dte@section@maxnumwidth=\skip55 +Class scrreprt Info: using compatibility default `runin=bysign' +(scrreprt) for `\section on input line 5913. +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\section on input line 5913. +\scr@dte@part@maxnumwidth=\skip56 +Class scrreprt Info: using compatibility default `afterindent=true' +(scrreprt) for `\part on input line 5922. +\scr@dte@subsection@maxnumwidth=\skip57 +Class scrreprt Info: using compatibility default `runin=bysign' +(scrreprt) for `\subsection on input line 5932. +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\subsection on input line 5932. +\scr@dte@subsubsection@maxnumwidth=\skip58 +Class scrreprt Info: using compatibility default `runin=bysign' +(scrreprt) for `\subsubsection on input line 5942. +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\subsubsection on input line 5942. +\scr@dte@paragraph@maxnumwidth=\skip59 +Class scrreprt Info: using compatibility default `runin=bysign' +(scrreprt) for `\paragraph on input line 5953. +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\paragraph on input line 5953. +\scr@dte@subparagraph@maxnumwidth=\skip60 +Class scrreprt Info: using compatibility default `runin=bysign' +(scrreprt) for `\subparagraph on input line 5963. +Class scrreprt Info: using compatibility default `afterindent=bysign' +(scrreprt) for `\subparagraph on input line 5963. +\abovecaptionskip=\skip61 +\belowcaptionskip=\skip62 +\c@pti@nb@sid@b@x=\box52 +Package tocbasic Info: omitting babel extension for `lof' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `lof' on input line 7140. +\scr@dte@figure@maxnumwidth=\skip63 +\c@figure=\count193 +Package tocbasic Info: omitting babel extension for `lot' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `lot' on input line 7157. +\scr@dte@table@maxnumwidth=\skip64 +\c@table=\count194 +Class scrreprt Info: Redefining `\numberline' on input line 7328. +\bibindent=\dimen140 +) +(/usr/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2023/02/13 3.86 The Babel package +\babel@savecnt=\count195 +\U@D=\dimen141 +\l@unhyphenated=\language87 + +(/usr/share/texmf-dist/tex/generic/babel/txtbabel.def) +\bbl@readstream=\read2 +\bbl@dirlevel=\count196 + +(/usr/share/texmf-dist/tex/generic/babel-german/ngerman.ldf +Language: ngerman 2021/02/27 v2.13 German support for babel (post-1996 orthogra +phy) + +(/usr/share/texmf-dist/tex/generic/babel-german/ngermanb.ldf +Language: ngermanb 2021/02/27 v2.13 German support for babel (post-1996 orthogr +aphy) +Package babel Info: Making " an active character on input line 122. +))) +(/usr/share/texmf-dist/tex/generic/babel/locale/de/babel-ngerman.tex +Package babel Info: Importing font and identification data for ngerman +(babel) from babel-de.ini. Reported on input line 11. +) +(/usr/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2021/04/29 v2.0v Standard LaTeX package +) +(/usr/share/texmf-dist/tex/latex/lm/lmodern.sty +Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. +LaTeX Font Info: Overwriting symbol font `letters' in version `normal' +(Font) OML/cmm/m/it --> OML/lmm/m/it on input line 23. +LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' +(Font) OMS/cmsy/m/n --> OMS/lmsy/m/n on input line 24. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 25. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 26. +LaTeX Font Info: Overwriting symbol font `letters' in version `bold' +(Font) OML/cmm/b/it --> OML/lmm/b/it on input line 27. +LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' +(Font) OMS/cmsy/b/n --> OMS/lmsy/b/n on input line 28. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 29. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 31. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' +(Font) OT1/cmss/m/n --> OT1/lmss/m/n on input line 32. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' +(Font) OT1/cmr/m/it --> OT1/lmr/m/it on input line 33. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 34. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 35. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' +(Font) OT1/cmss/bx/n --> OT1/lmss/bx/n on input line 36. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' +(Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. +) +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.sty +Package: csquotes 2022-09-14 v5.2n context-sensitive quotations (JAW) + +(/usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count197 +) +\csq@reset=\count198 +\csq@gtype=\count199 +\csq@glevel=\count266 +\csq@qlevel=\count267 +\csq@maxlvl=\count268 +\csq@tshold=\count269 +\csq@ltx@everypar=\toks17 + +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.def +File: csquotes.def 2022-09-14 v5.2n csquotes generic definitions (JAW) +) +Package csquotes Info: Trying to load configuration file 'csquotes.cfg'... +Package csquotes Info: ... configuration file loaded successfully. + +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.cfg +File: csquotes.cfg +)) +(/usr/share/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2020/01/02 v5.9 Page Geometry + +(/usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. + +(/usr/share/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2022/02/03 v1.0f TeX engine tests +)) +\Gm@cnth=\count270 +\Gm@cntv=\count271 +\c@Gm@tempcnt=\count272 +\Gm@bindingoffset=\dimen142 +\Gm@wd@mp=\dimen143 +\Gm@odd@mp=\dimen144 +\Gm@even@mp=\dimen145 +\Gm@layoutwidth=\dimen146 +\Gm@layoutheight=\dimen147 +\Gm@layouthoffset=\dimen148 +\Gm@layoutvoffset=\dimen149 +\Gm@dimlist=\toks18 +) +(/usr/share/texmf-dist/tex/latex/acro/acro.sty +(/usr/share/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +(/usr/share/texmf-dist/tex/latex/l3kernel/expl3.sty +Package: expl3 2023-02-22 L3 programming layer (loader) + +(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count273 +\l__pdf_internal_box=\box53 +)) +Package: l3keys2e 2023-02-02 LaTeX2e option processing using LaTeX3 keys +) +Package: acro 2022/04/01 v3.8 typeset acronyms and other abbreviations (CN) +\l__acro_tmpa_int=\count274 +\l__acro_tmpb_int=\count275 +\l__acro_tmpc_int=\count276 +\l__acro_tmpd_int=\count277 +Loading module `base' ... +Loading module `interface' ... +Loading module `aux' ... +Loading module `properties' ... +Loading module `acronyms' ... +Loading module `formatting' ... +Loading module `ppfixes' ... +Loading module `tools' ... +\l__acro_minimal_usage_int=\count278 +\l__acro_nest_int=\count279 +\g_acro_barrier_int=\count280 +\g_acro_barrier_total_int=\count281 +Loading module `commands' ... +\l_acro_nest_level_int=\count282 +Loading module `templates' ... +Loading module `list' ... +Loading module `pages' ... +\l__acro_pages_seq_threshold_int=\count283 +Loading module `locale' ... + +(/usr/share/texmf-dist/tex/latex/translations/translations.sty +Package: translations 2022/02/05 v1.12 internationalization of LaTeX2e packages + (CN) + +(/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO +) + +(/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) +(/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) +) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +)) +Loading module `pdfsupport' ... +Loading module `patch' ... +Loading module `definitions' ... +Loading module `upgrade' ... +) +(/usr/share/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count284 +\lst@gtempboxa=\box54 +\lst@token=\toks19 +\lst@length=\count285 +\lst@currlwidth=\dimen150 +\lst@column=\count286 +\lst@pos=\count287 +\lst@lostspace=\dimen151 +\lst@width=\dimen152 +\lst@newlines=\count288 +\lst@lineno=\count289 +\lst@maxwidth=\dimen153 + +(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) +\c@lstnumber=\count290 +\lst@skipnumbers=\count291 +\lst@framebox=\box55 +) +(/usr/share/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2023/02/27 1.9 listings configuration +)) +Package: listings 2023/02/27 1.9 (Carsten Heinz) + +(/usr/share/texmf-dist/tex/latex/biblatex/biblatex.sty +Package: biblatex 2023/03/05 v3.19 programmable bibliographies (PK/MW) + +(/usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) + +(/usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) +)) +(/usr/share/texmf-dist/tex/latex/logreq/logreq.sty +Package: logreq 2010/08/04 v1.0 xml request logger +\lrq@indent=\count292 + +(/usr/share/texmf-dist/tex/latex/logreq/logreq.def +File: logreq.def 2010/08/04 v1.0 logreq spec v1.0 +)) +(/usr/share/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2022/04/13 v1.1d Standard LaTeX ifthen package (DPC) +) +(/usr/share/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip16 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +\c@tabx@nest=\count293 +\c@listtotal=\count294 +\c@listcount=\count295 +\c@liststart=\count296 +\c@liststop=\count297 +\c@citecount=\count298 +\c@citetotal=\count299 +\c@multicitecount=\count300 +\c@multicitetotal=\count301 +\c@instcount=\count302 +\c@maxnames=\count303 +\c@minnames=\count304 +\c@maxitems=\count305 +\c@minitems=\count306 +\c@citecounter=\count307 +\c@maxcitecounter=\count308 +\c@savedcitecounter=\count309 +\c@uniquelist=\count310 +\c@uniquename=\count311 +\c@refsection=\count312 +\c@refsegment=\count313 +\c@maxextratitle=\count314 +\c@maxextratitleyear=\count315 +\c@maxextraname=\count316 +\c@maxextradate=\count317 +\c@maxextraalpha=\count318 +\c@abbrvpenalty=\count319 +\c@highnamepenalty=\count320 +\c@lownamepenalty=\count321 +\c@maxparens=\count322 +\c@parenlevel=\count323 +\blx@tempcnta=\count324 +\blx@tempcntb=\count325 +\blx@tempcntc=\count326 +\c@blx@maxsection=\count327 +\blx@maxsegment@0=\count328 +\blx@notetype=\count329 +\blx@parenlevel@text=\count330 +\blx@parenlevel@foot=\count331 +\blx@sectionciteorder@0=\count332 +\blx@sectionciteorderinternal@0=\count333 +\blx@entrysetcounter=\count334 +\blx@biblioinstance=\count335 +\labelnumberwidth=\skip65 +\labelalphawidth=\skip66 +\biblabelsep=\skip67 +\bibitemsep=\skip68 +\bibnamesep=\skip69 +\bibinitsep=\skip70 +\bibparsep=\skip71 +\bibhang=\skip72 +\blx@bcfin=\read3 +\blx@bcfout=\write3 +\blx@langwohyphens=\language88 +\c@mincomprange=\count336 +\c@maxcomprange=\count337 +\c@mincompwidth=\count338 +Package biblatex Info: Trying to load biblatex default data model... +Package biblatex Info: ... file 'blx-dm.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-dm.def +File: blx-dm.def 2023/03/05 v3.19 biblatex localization (PK/MW) +) +Package biblatex Info: Trying to load biblatex style data model... +Package biblatex Info: ... file 'numeric.dbx' not found. +Package biblatex Info: Trying to load biblatex custom data model... +Package biblatex Info: ... file 'biblatex-dm.cfg' not found. +\c@afterword=\count339 +\c@savedafterword=\count340 +\c@annotator=\count341 +\c@savedannotator=\count342 +\c@author=\count343 +\c@savedauthor=\count344 +\c@bookauthor=\count345 +\c@savedbookauthor=\count346 +\c@commentator=\count347 +\c@savedcommentator=\count348 +\c@editor=\count349 +\c@savededitor=\count350 +\c@editora=\count351 +\c@savededitora=\count352 +\c@editorb=\count353 +\c@savededitorb=\count354 +\c@editorc=\count355 +\c@savededitorc=\count356 +\c@foreword=\count357 +\c@savedforeword=\count358 +\c@holder=\count359 +\c@savedholder=\count360 +\c@introduction=\count361 +\c@savedintroduction=\count362 +\c@namea=\count363 +\c@savednamea=\count364 +\c@nameb=\count365 +\c@savednameb=\count366 +\c@namec=\count367 +\c@savednamec=\count368 +\c@translator=\count369 +\c@savedtranslator=\count370 +\c@shortauthor=\count371 +\c@savedshortauthor=\count372 +\c@shorteditor=\count373 +\c@savedshorteditor=\count374 +\c@labelname=\count375 +\c@savedlabelname=\count376 +\c@institution=\count377 +\c@savedinstitution=\count378 +\c@lista=\count379 +\c@savedlista=\count380 +\c@listb=\count381 +\c@savedlistb=\count382 +\c@listc=\count383 +\c@savedlistc=\count384 +\c@listd=\count385 +\c@savedlistd=\count386 +\c@liste=\count387 +\c@savedliste=\count388 +\c@listf=\count389 +\c@savedlistf=\count390 +\c@location=\count391 +\c@savedlocation=\count392 +\c@organization=\count393 +\c@savedorganization=\count394 +\c@origlocation=\count395 +\c@savedoriglocation=\count396 +\c@origpublisher=\count397 +\c@savedorigpublisher=\count398 +\c@publisher=\count399 +\c@savedpublisher=\count400 +\c@language=\count401 +\c@savedlanguage=\count402 +\c@origlanguage=\count403 +\c@savedoriglanguage=\count404 +\c@pageref=\count405 +\c@savedpageref=\count406 +\shorthandwidth=\skip73 +\shortjournalwidth=\skip74 +\shortserieswidth=\skip75 +\shorttitlewidth=\skip76 +\shortauthorwidth=\skip77 +\shorteditorwidth=\skip78 +\locallabelnumberwidth=\skip79 +\locallabelalphawidth=\skip80 +\localshorthandwidth=\skip81 +\localshortjournalwidth=\skip82 +\localshortserieswidth=\skip83 +\localshorttitlewidth=\skip84 +\localshortauthorwidth=\skip85 +\localshorteditorwidth=\skip86 +Package biblatex Info: Trying to load compatibility code... +Package biblatex Info: ... file 'blx-compat.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-compat.def +File: blx-compat.def 2023/03/05 v3.19 biblatex compatibility (PK/MW) +) +Package biblatex Info: Trying to load generic definitions... +Package biblatex Info: ... file 'biblatex.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/biblatex.def +File: biblatex.def 2023/03/05 v3.19 biblatex compatibility (PK/MW) +\c@textcitecount=\count407 +\c@textcitetotal=\count408 +\c@textcitemaxnames=\count409 +\c@biburlbigbreakpenalty=\count410 +\c@biburlbreakpenalty=\count411 +\c@biburlnumpenalty=\count412 +\c@biburlucpenalty=\count413 +\c@biburllcpenalty=\count414 +\biburlbigskip=\muskip17 +\biburlnumskip=\muskip18 +\biburlucskip=\muskip19 +\biburllcskip=\muskip20 +\c@smartand=\count415 +) +Package biblatex Info: Trying to load bibliography style 'numeric'... +Package biblatex Info: ... file 'numeric.bbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx +File: numeric.bbx 2023/03/05 v3.19 biblatex bibliography style (PK/MW) +Package biblatex Info: Trying to load bibliography style 'standard'... +Package biblatex Info: ... file 'standard.bbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/bbx/standard.bbx +File: standard.bbx 2023/03/05 v3.19 biblatex bibliography style (PK/MW) +\c@bbx:relatedcount=\count416 +\c@bbx:relatedtotal=\count417 +)) +Package biblatex Info: Trying to load citation style 'numeric'... +Package biblatex Info: ... file 'numeric.cbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/cbx/numeric.cbx +File: numeric.cbx 2023/03/05 v3.19 biblatex citation style (PK/MW) +Package biblatex Info: Redefining '\cite'. +Package biblatex Info: Redefining '\parencite'. +Package biblatex Info: Redefining '\footcite'. +Package biblatex Info: Redefining '\footcitetext'. +Package biblatex Info: Redefining '\smartcite'. +Package biblatex Info: Redefining '\supercite'. +Package biblatex Info: Redefining '\textcite'. +Package biblatex Info: Redefining '\textcites'. +Package biblatex Info: Redefining '\cites'. +Package biblatex Info: Redefining '\parencites'. +Package biblatex Info: Redefining '\smartcites'. +) +Package biblatex Info: Trying to load configuration file... +Package biblatex Info: ... file 'biblatex.cfg' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/biblatex.cfg +File: biblatex.cfg +) +Package biblatex Info: Input encoding 'utf8' detected. +Package biblatex Info: Document encoding is UTF8 .... +Package biblatex Info: ... and expl3 +(biblatex) 2023-02-22 L3 programming layer (loader) +(biblatex) is new enough (at least 2020/04/06), +(biblatex) setting 'casechanger=expl3'. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-case-expl3.sty +(/usr/share/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +Package: xparse 2023-02-02 L3 Experimental document command parser +) +Package: blx-case-expl3 2023/03/05 v3.19 expl3 case changing code for biblatex +)) +(/usr/share/texmf-dist/tex/latex/pdfpages/pdfpages.sty +Package: pdfpages 2022/12/19 v0.5x Insert pages of external PDF documents (AM) + +(/usr/share/texmf-dist/tex/latex/tools/calc.sty +Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ) +\calc@Acount=\count418 +\calc@Bcount=\count419 +\calc@Adimen=\dimen154 +\calc@Bdimen=\dimen155 +\calc@Askip=\skip87 +\calc@Bskip=\skip88 +LaTeX Info: Redefining \setlength on input line 80. +LaTeX Info: Redefining \addtolength on input line 81. +\calc@Ccount=\count420 +\calc@Cskip=\skip89 +) +(/usr/share/texmf-dist/tex/latex/eso-pic/eso-pic.sty +Package: eso-pic 2020/10/14 v3.0a eso-pic (RN) +\ESO@tempdima=\dimen156 +\ESO@tempdimb=\dimen157 + +(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) + +(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 227. + +(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +) +(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. +Package xcolor Info: Model `RGB' extended on input line 1369. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. +)) +(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. +) +\Gin@req@height=\dimen158 +\Gin@req@width=\dimen159 +) +\AM@pagewidth=\dimen160 +\AM@pageheight=\dimen161 +\AM@fboxrule=\dimen162 + +(/usr/share/texmf-dist/tex/latex/pdfpages/pppdftex.def +File: pppdftex.def 2022/12/19 v0.5x Pdfpages driver for pdfTeX (AM) +) +\pdfpages@includegraphics@status=\count421 +\AM@pagebox=\box56 +\AM@global@opts=\toks20 +\AM@pagecnt=\count422 +\AM@toc@title=\toks21 +\AM@lof@heading=\toks22 +\c@AM@survey=\count423 +\AM@templatesizebox=\box57 +) +(/usr/share/texmf-dist/tex/latex/koma-script/scrhack.sty +Package: scrhack 2022/10/12 v3.38 KOMA-Script package (hacking other packages) + +(/usr/share/texmf-dist/tex/latex/xpatch/xpatch.sty +Package: xpatch 2020/03/25 v0.3a Extending etoolbox patching commands +) +Package scrhack Info: loading listings hack on input line 185. + +(/usr/share/texmf-dist/tex/latex/koma-script/listings.hak +File: listings.hak 2022/10/12 v3.38 KOMA-Script scrhack part (hacking package l +istings) +Package tocbasic Info: setting babel extension for `lol' on input line 143. +Package scrhack Info: redefining \lstlistoflistings on input line 143. +)) +(/usr/share/texmf-dist/tex/latex/enumitem/enumitem.sty +Package: enumitem 2019/06/20 v3.9 Customized lists +\labelindent=\skip90 +\enit@outerparindent=\dimen163 +\enit@toks=\toks23 +\enit@inbox=\box58 +\enit@count@id=\count424 +\enitdp@description=\count425 +) +Package scrhack Info: hyperref hack deactivated because of +(scrhack) detection of KOMA-Script class, that doesn't +(scrhack) need that hack, on input line 21. + +(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2023-02-07 v7.00v Hypertext links for LaTeX + +(/usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) +(/usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) +) +(/usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(/usr/share/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) +) +(/usr/share/texmf-dist/tex/latex/auxhook/auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) +) +(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2022-05-17 v2.50 Cross-referencing by name of section + +(/usr/share/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count426 +) +\@linkdim=\dimen164 +\Hy@linkcounter=\count427 +\Hy@pagecounter=\count428 + +(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2023-02-07 v7.00v Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +(/usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +(/usr/share/texmf-dist/tex/generic/etexcmds/etexcmds.sty +Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) +) +\Hy@SavedSpaceFactor=\count429 + +(/usr/share/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2023-02-07 v7.00v Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Hyper figures OFF on input line 4177. +Package hyperref Info: Link nesting OFF on input line 4182. +Package hyperref Info: Hyper index ON on input line 4185. +Package hyperref Info: Plain pages OFF on input line 4192. +Package hyperref Info: Backreferencing OFF on input line 4197. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4425. +\c@Hy@tempcnt=\count430 +LaTeX Info: Redefining \url on input line 4763. +\XeTeXLinkMargin=\dimen165 + +(/usr/share/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(/usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count431 +\Field@Width=\dimen166 +\Fld@charsize=\dimen167 +Package hyperref Info: Hyper figures OFF on input line 6042. +Package hyperref Info: Link nesting OFF on input line 6047. +Package hyperref Info: Hyper index ON on input line 6050. +Package hyperref Info: backreferencing OFF on input line 6057. +Package hyperref Info: Link coloring OFF on input line 6062. +Package hyperref Info: Link coloring with OCG OFF on input line 6067. +Package hyperref Info: PDF/A mode OFF on input line 6072. + +(/usr/share/texmf-dist/tex/latex/base/atbegshi-ltx.sty +Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi +package with kernel methods +) +\Hy@abspage=\count432 +\c@Item=\count433 +\c@Hfootnote=\count434 +) +Package hyperref Info: Driver (autodetected): hpdftex. + +(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2023-02-07 v7.00v Hyperref driver for pdfTeX + +(/usr/share/texmf-dist/tex/latex/base/atveryend-ltx.sty +Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac +kage +with kernel methods +) +\Fld@listcount=\count435 +\c@bookmark@seq@number=\count436 + +(/usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) + +(/usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +85. +) +\Hy@SectionHShift=\skip91 +) +(/usr/share/texmf-dist/tex/latex/tabularray/tabularray.sty +Package: tabularray 2023-03-01 v2023A Typeset tabulars and arrays with LaTeX3 +\l__tblr_a_int=\count437 +\l__tblr_c_int=\count438 +\l__tblr_r_int=\count439 +\l__tblr_d_dim=\dimen168 +\l__tblr_h_dim=\dimen169 +\l__tblr_o_dim=\dimen170 +\l__tblr_p_dim=\dimen171 +\l__tblr_q_dim=\dimen172 +\l__tblr_r_dim=\dimen173 +\l__tblr_s_dim=\dimen174 +\l__tblr_t_dim=\dimen175 +\l__tblr_v_dim=\dimen176 +\l__tblr_w_dim=\dimen177 +\l__tblr_a_box=\box59 +\l__tblr_b_box=\box60 +\l__tblr_c_box=\box61 +\l__tblr_d_box=\box62 +\g__tblr_table_count_int=\count440 +\c@rownum=\count441 +\c@colnum=\count442 +\c@rowcount=\count443 +\c@colcount=\count444 +\abovesep=\dimen178 +\belowsep=\dimen179 +\leftsep=\dimen180 +\rightsep=\dimen181 +\g_tblr_level_int=\count445 +\g__tblr_data_row_key_count_int=\count446 +\g__tblr_data_column_key_count_int=\count447 +\g__tblr_data_cell_key_count_int=\count448 +\g__tblr_array_int=\count449 +\l__tblr_key_count_int=\count450 +\l__tblr_key_quotient_int=\count451 +\l__tblr_key_quotient_two_int=\count452 +\l__tblr_key_remainder_int=\count453 +\g__tblr_data_str_value_count_int=\count454 +\rulewidth=\dimen182 +\l__tblr_strut_dp_dim=\dimen183 +\l__tblr_strut_ht_dim=\dimen184 +\g__tblr_cell_wd_dim=\dimen185 +\g__tblr_cell_ht_dim=\dimen186 +\g__tblr_cell_head_dim=\dimen187 +\g__tblr_cell_foot_dim=\dimen188 +\l__column_target_dim=\dimen189 +\l__tblr_caption_box=\box63 +\l__tblr_caption_left_box=\box64 +\l__tblr_row_head_box=\box65 +\l__tblr_row_foot_box=\box66 +\l__tblr_row_head_foot_dim=\dimen190 +\tablewidth=\dimen191 +\l__tblr_table_firsthead_box=\box67 +\l__tblr_table_middlehead_box=\box68 +\l__tblr_table_lasthead_box=\box69 +\l__tblr_table_firstfoot_box=\box70 +\l__tblr_table_middlefoot_box=\box71 +\l__tblr_table_lastfoot_box=\box72 +\l__tblr_remain_height_dim=\dimen192 +\l__tblr_long_from_int=\count455 +\l__tblr_long_to_int=\count456 +\l__tblr_curr_i_int=\count457 +\l__tblr_prev_i_int=\count458 +\l__tblr_table_page_int=\count459 +\l__tblr_table_head_box=\box73 +\l__tblr_table_foot_box=\box74 +\l__tblr_table_head_foot_dim=\dimen193 +\l__tblr_table_head_body_foot_dim=\dimen194 +\l__tblr_table_box=\box75 +\l__tblr_table_hlines_box=\box76 +\l__tblr_hline_box=\box77 +\l__tblr_row_box=\box78 +\l__tblr_col_o_wd_dim=\dimen195 +\l__tblr_col_b_wd_dim=\dimen196 +\l__tblr_hline_leftskip_dim=\dimen197 +\l__tblr_hline_rightskip_dim=\dimen198 +\l__tblr_row_ht_dim=\dimen199 +\l__tblr_row_dp_dim=\dimen256 +\l__tblr_row_abovesep_dim=\dimen257 +\l__tblr_row_belowsep_dim=\dimen258 +\l__tblr_row_vlines_box=\box79 +\l__tblr_vline_box=\box80 +\l__tblr_cell_box=\box81 +\l__row_upper_dim=\dimen259 +\l__row_lower_dim=\dimen260 +\l__row_vpace_dim=\dimen261 +\l__tblr_vline_aboveskip_dim=\dimen262 +\l__tblr_vline_belowskip_dim=\dimen263 +\l__tblr_cell_wd_dim=\dimen264 +\l__tblr_cell_ht_dim=\dimen265 +\l__tblr_diag_box=\box82 +) +(/usr/share/texmf-dist/tex/latex/xurl/xurl.sty +Package: xurl 2022/01/09 v 0.10 modify URL breaks + +xurl: Set penalties for biblatex +) (/usr/share/texmf-dist/tex/generic/soul/soul.sty +Package: soul 2023-02-18 v3.0 Permit use of UTF-8 characters in soul (HO) + +(/usr/share/texmf-dist/tex/generic/soul/soul-ori.sty +Package: soul-ori 2023-02-18 v3.0 letterspacing/underlining (mf) +\SOUL@word=\toks24 +\SOUL@lasttoken=\toks25 +\SOUL@syllable=\toks26 +\SOUL@cmds=\toks27 +\SOUL@buffer=\toks28 +\SOUL@token=\toks29 +\SOUL@syllgoal=\dimen266 +\SOUL@syllwidth=\dimen267 +\SOUL@charkern=\dimen268 +\SOUL@hyphkern=\dimen269 +\SOUL@dimen=\dimen270 +\SOUL@dimeni=\dimen271 +\SOUL@minus=\count460 +\SOUL@comma=\count461 +\SOUL@apo=\count462 +\SOUL@grave=\count463 +\SOUL@spaceskip=\skip92 +\SOUL@ttwidth=\dimen272 +\SOUL@uldp=\dimen273 +\SOUL@ulht=\dimen274 +)) +(/usr/share/texmf-dist/tex/latex/underscore/underscore.sty +Package: underscore 2006/09/13 +LaTeX Info: Redefining \_ on input line 42. +) +(/usr/share/texmf-dist/tex/latex/microtype/microtype.sty +Package: microtype 2023/03/13 v3.1a Micro-typographical refinements (RS) +\MT@toks=\toks30 +\MT@tempbox=\box83 +\MT@count=\count464 +LaTeX Info: Redefining \noprotrusionifhmode on input line 1059. +LaTeX Info: Redefining \leftprotrusion on input line 1060. +\MT@prot@toks=\toks31 +LaTeX Info: Redefining \rightprotrusion on input line 1078. +LaTeX Info: Redefining \textls on input line 1368. +\MT@outer@kern=\dimen275 +LaTeX Info: Redefining \textmicrotypecontext on input line 1988. +\MT@listname@count=\count465 + +(/usr/share/texmf-dist/tex/latex/microtype/microtype-pdftex.def +File: microtype-pdftex.def 2023/03/13 v3.1a Definitions specific to pdftex (RS) + +LaTeX Info: Redefining \lsstyle on input line 902. +LaTeX Info: Redefining \lslig on input line 902. +\MT@outer@space=\skip93 +) +Package microtype Info: Loading configuration file microtype.cfg. + +(/usr/share/texmf-dist/tex/latex/microtype/microtype.cfg +File: microtype.cfg 2023/03/13 v3.1a microtype main configuration file (RS) +)) +(/usr/share/texmf-dist/tex/latex/setspace/setspace.sty +Package: setspace 2022/12/04 v6.7b set line spacing +) +Package scrhack Info: loading setspace hack on input line 29. + +(/usr/share/texmf-dist/tex/latex/koma-script/setspace.hak +File: setspace.hak 2022/10/12 v3.38 KOMA-Script scrhack part (hacking package s +etspace) + + +Package scrhack Warning: unknown \onehalfspacing definition found! +(scrhack) Maybe you are using a unsupported setpace version on i +nput line 96. + + +Package scrhack Warning: unknown \doublespacing definition found! +(scrhack) Maybe you are using a unsupported setpace version on i +nput line 118. + +) (/usr/share/texmf-dist/tex/latex/totalcount/totalcount.sty +Package: totalcount 2018/01/21 v1.0a Total values of counters (AR) +\c@totalcount@page=\count466 +) +(/usr/share/texmf-dist/tex/latex/koma-script/scrlayer-scrpage.sty +Package: scrlayer-scrpage 2022/10/12 v3.38 KOMA-Script package (end user interf +ace for scrlayer) + +(/usr/share/texmf-dist/tex/latex/koma-script/scrlayer.sty +Package: scrlayer 2022/10/12 v3.38 KOMA-Script package (defining layers and pag +e styles) +Package scrlayer Info: patching LaTeX kernel macro \pagestyle on input line 217 +6. +) +Package scrlayer-scrpage Info: Makeing stand-alone element `pagehead' from +(scrlayer-scrpage) alias to `pageheadfoot' on input line 1089. +) +1: section +1: chapter +1: chapter +1: section +\c@g@acro@ros@int=\count467 +\c@g@acro@fsm@int=\count468 +\c@g@acro@mrk@int=\count469 +Package csquotes Info: Checking for multilingual support... +Package csquotes Info: ... found 'babel' package. +Package csquotes Info: Adjusting default style. +Package csquotes Info: Redefining alias 'default' -> 'ngerman'. +LaTeX Font Info: Trying to load font information for T1+lmr on input line 75 +. +(/usr/share/texmf-dist/tex/latex/lm/t1lmr.fd +File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) (./main.aux) +\openout1 = `main.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 75. +LaTeX Font Info: ... okay on input line 75. + +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: includehead includefoot +* h-part:(L,W,R)=(85.35826pt, 441.01779pt, 71.13188pt) +* v-part:(T,H,B)=(42.67912pt, 759.68869pt, 42.67912pt) +* \paperwidth=597.50793pt +* \paperheight=845.04694pt +* \textwidth=441.01779pt +* \textheight=674.68867pt +* \oddsidemargin=13.08827pt +* \evensidemargin=13.08827pt +* \topmargin=-29.59087pt +* \headheight=17.0pt +* \headsep=20.40001pt +* \topskip=11.0pt +* \footskip=47.6pt +* \marginparwidth=59.7508pt +* \marginparsep=12.8401pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + + +(/usr/share/texmf-dist/tex/latex/translations/translations-basic-dictionary-ger +man.trsl +File: translations-basic-dictionary-german.trsl (german translation file `trans +lations-basic-dictionary') +) +Package translations Info: loading dictionary `translations-basic-dictionary' f +or `german'. on input line 75. +\c@lstlisting=\count470 +Package biblatex Info: Trying to load language 'ngerman'... +Package biblatex Info: ... file 'ngerman.lbx' found. + (/usr/share/texmf-dist/tex/latex/biblatex/lbx/ngerman.lbx +File: ngerman.lbx 2023/03/05 v3.19 biblatex localization (PK/MW) +Package biblatex Info: Trying to load language 'german'... +Package biblatex Info: ... file 'german.lbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/lbx/german.lbx +File: german.lbx 2023/03/05 v3.19 biblatex localization (PK/MW) +) +Package biblatex Info: Trying to load language 'german'... +Package biblatex Info: ... file 'german.lbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/lbx/german.lbx +File: german.lbx 2023/03/05 v3.19 biblatex localization (PK/MW) +)) +Package biblatex Info: Input encoding 'utf8' detected. +Package biblatex Info: Automatic encoding selection. +(biblatex) Assuming data encoding 'utf8'. +\openout3 = `main.bcf'. + +Package biblatex Info: Trying to load bibliographic data... +Package biblatex Info: ... file 'main.bbl' found. + (./main.bbl) +Package biblatex Info: Reference section=0 on input line 75. +Package biblatex Info: Reference segment=0 on input line 75. + +(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count471 +\scratchdimen=\dimen276 +\scratchbox=\box84 +\nofMPsegments=\count472 +\nofMParguments=\count473 +\everyMPshowfont=\toks32 +\MPscratchCnt=\count474 +\MPscratchDim=\dimen277 +\MPnumerator=\count475 +\makeMPintoPDFobject=\count476 +\everyMPtoPDFconversion=\toks33 +) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf + +(/usr/share/texmf-dist/tex/latex/grfext/grfext.sty +Package: grfext 2019/12/03 v1.3 Manage graphics extensions (HO) +) +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. +Package grfext Info: Graphics extension search list: +(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 504. + +(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +(/usr/share/texmf-dist/tex/latex/pdflscape/pdflscape.sty +Package: pdflscape 2022-10-27 v0.13 Display of landscape pages in PDF + +(/usr/share/texmf-dist/tex/latex/pdflscape/pdflscape-nometadata.sty +Package: pdflscape-nometadata 2022-10-28 v0.13 Display of landscape pages in PD +F (HO) + +(/usr/share/texmf-dist/tex/latex/graphics/lscape.sty +Package: lscape 2020/05/28 v3.02 Landscape Pages (DPC) +) +Package scrhack Info: loading lscape hack on input line 77. + +(/usr/share/texmf-dist/tex/latex/koma-script/lscape.hak +File: lscape.hak 2022/10/12 v3.38 KOMA-Script scrhack part (hacking package lsc +ape) +Package scrhack Info: \landscape patched to make \textheight change optional on + input line 90. +\scrh@LT@textheight=\skip94 +) +Package pdflscape Info: Auto-detected driver: pdftex on input line 81. +)) +Package scrhack Info: undefining \float@addtolists on input line 75. +Package hyperref Info: Link coloring OFF on input line 75. + (./main.out) +(./main.out) +\@outlinefile=\write4 +\openout4 = `main.out'. + +Class scrreprt Info: loading recommended package `bookmark'. +(scrreprt) Using `bookmark' together with `hyperref' is recommended, +(scrreprt) because of handling of possible bookmark level gaps. +(scrreprt) You can avoid loading `bookmark' with KOMA-Script option +(scrreprt) `bookmarkpackage=false' before \begin{document} and +(scrreprt) you can avoid this message adding: +(scrreprt) \usepackage{bookmark} +(scrreprt) before \begin{document} on input line 75. + (/usr/share/texmf-dist/tex/latex/bookmark/bookmark.sty +Package: bookmark 2020-11-06 v1.29 PDF bookmarks (HO) + +(/usr/share/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +File: bkm-pdftex.def 2020-11-06 v1.29 bookmark driver for pdfTeX (HO) +\BKM@id=\count477 +)) +(/usr/share/texmf-dist/tex/latex/ninecolors/ninecolors.sty +Package: ninecolors 2022-02-13 vv2022D Select colors with proper color contrast + +) +LaTeX Info: Redefining \microtypecontext on input line 75. +Package microtype Info: Applying patch `item' on input line 75. +Package microtype Info: Applying patch `toc' on input line 75. +Package microtype Info: Applying patch `eqnum' on input line 75. + + +Package microtype Warning: Unable to apply patch `footnote' on input line 75. + +Package microtype Info: Applying patch `verbatim' on input line 75. +Package microtype Info: Generating PDF output. +Package microtype Info: Character protrusion enabled (level 2). +Package microtype Info: Using default protrusion set `alltext'. +Package microtype Info: Automatic font expansion enabled (level 2), +(microtype) stretch: 20, shrink: 20, step: 1, non-selected. +Package microtype Info: Using default expansion set `alltext-nott'. +LaTeX Info: Redefining \showhyphens on input line 75. +Package microtype Info: No adjustment of tracking. +Package microtype Info: No adjustment of interword spacing. +Package microtype Info: No adjustment of character kerning. +(/usr/share/texmf-dist/tex/latex/microtype/mt-cmr.cfg +File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman +(RS) +) + +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf used on input line 82. +(pdftex.def) Requested size: 597.551pt x 845.07512pt. +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf used on input line 82. +(pdftex.def) Requested size: 597.551pt x 845.07512pt. + +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf , page1 used on input line 82. +(pdftex.def) Requested size: 597.551pt x 845.07512pt. +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf , page1 used on input line 82. +(pdftex.def) Requested size: 597.57834pt x 845.1138pt. +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf , page1 used on input line 82. +(pdftex.def) Requested size: 597.57834pt x 845.1138pt. +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf , page1 used on input line 82. +(pdftex.def) Requested size: 597.57834pt x 845.1138pt. +File: tex/Deckblatt.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Deckblatt.pdf , page1 used on input line 82. +(pdftex.def) Requested size: 597.57834pt x 845.1138pt. + [1 + + + + <./tex/Deckblatt.pdf>] +LaTeX Font Info: Trying to load font information for T1+lmss on input line 8 +6. + (/usr/share/texmf-dist/tex/latex/lm/t1lmss.fd +File: t1lmss.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +Package microtype Info: Loading generic protrusion settings for font family +(microtype) `lmss' (encoding: T1). +(microtype) For optimal results, create family-specific settings. +(microtype) See the microtype manual for details. +Package tocbasic Info: character protrusion at toc deactivated on input line 86 +. + (./main.toc +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 4 +. + +(/usr/share/texmf-dist/tex/latex/lm/ot1lmr.fd +File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OML+lmm on input line 4 +. + +(/usr/share/texmf-dist/tex/latex/lm/omllmm.fd +File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line +4. + +(/usr/share/texmf-dist/tex/latex/lm/omslmsy.fd +File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMX+lmex on input line +4. + +(/usr/share/texmf-dist/tex/latex/lm/omxlmex.fd +File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <10.95> on input line 4. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <8> on input line 4. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <6> on input line 4. + [2{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/usr/share/texmf-dist/fo +nts/enc/dvips/lm/lm-ec.enc} + +]) +\tf@toc=\write5 +\openout5 = `main.toc'. + + +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf used on input line 88. +(pdftex.def) Requested size: 595.50339pt x 844.83423pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf used on input line 88. +(pdftex.def) Requested size: 595.50339pt x 844.83423pt. + +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page1 used on input line 88 +. +(pdftex.def) Requested size: 595.50339pt x 844.83423pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page1 used on input line 88 +. +(pdftex.def) Requested size: 596.2394pt x 845.8784pt. + +[3] +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page1 used on input line 88 +. +(pdftex.def) Requested size: 596.2394pt x 845.8784pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page1 used on input line 88 +. +(pdftex.def) Requested size: 596.2394pt x 845.8784pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page1 used on input line 88 +. +(pdftex.def) Requested size: 596.2394pt x 845.8784pt. + [4 <./tex/Aufgabenstellung.pdf>] + +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page2 used on input line 88 +. +(pdftex.def) Requested size: 594.7922pt x 845.8784pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page2 used on input line 88 +. +(pdftex.def) Requested size: 594.7922pt x 845.8784pt. +File: tex/Aufgabenstellung.pdf Graphic file (type pdf) + +Package pdftex.def Info: tex/Aufgabenstellung.pdf , page2 used on input line 88 +. +(pdftex.def) Requested size: 594.7922pt x 845.8784pt. + [5 <./tex/Aufgabenstellung.pdf>] +(./tex/1_Einleitung.tex +chapter 1. +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 3 +1. +(/usr/share/texmf-dist/tex/latex/lm/t1lmtt.fd +File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +Package microtype Info: Loading generic protrusion settings for font family +(microtype) `lmtt' (encoding: T1). +(microtype) For optimal results, create family-specific settings. +(microtype) See the microtype manual for details. + [1 + +] [2]) (./tex/2_Konzept.tex +[3] +chapter 2. + +LaTeX Warning: No positions in optional float specifier. + Default added (so using `tbp') on input line 10. + + +File: img/Konzept_Overview.pdf Graphic file (type pdf) + +Package pdftex.def Info: img/Konzept_Overview.pdf used on input line 11. +(pdftex.def) Requested size: 351.23132pt x 128.39938pt. +[4 + + <./img/Konzept_Overview.pdf>] [5]) (./tex/3_Auswahl.tex [6] +chapter 3. +[7 + +] [8] [9] [10] [11] [12] [13] [14]) (./tex/4_Umsetzung.tex [15] +chapter 4. + +LaTeX Warning: No positions in optional float specifier. + Default added (so using `tbp') on input line 12. + + +File: img/Umsetzung_Overview.pdf Graphic file (type pdf) + +Package pdftex.def Info: img/Umsetzung_Overview.pdf used on input line 13. +(pdftex.def) Requested size: 441.01779pt x 291.12093pt. + +Overfull \hbox (12.806pt too wide) in paragraph at lines 28--31 +[]\T1/lmr/m/n/10.95 (-20) ist ei-ne Da-ten-struk-tur mit ei-nem Vek-tor an Po-s +i-tio-nen, wel-che ei-ne Zo-ne im 2-Dimensionalen + [] + +[16 + +] [17 <./img/Umsetzung_Overview.pdf>] [18] [19] [20] [21] [22] [23] [24] +Overfull \hbox (8.81113pt too wide) in paragraph at lines 265--267 +[]\T1/lmr/m/n/10.95 (-20) setzt den ak-tu-el-len Called-Status auf den Wert des + über-ge-be-nen []\T1/lmtt/m/n/10.95 state\T1/lmr/m/n/10.95 (-20) -Parameters. + + [] + +[25] [26]) [27] +chapter 5. +[28 + +] +chapter 6. +[29 + +] [30] [31] +chapter 7. +[32 + +] [33] +Package microtype Info: Character `029' is missing +(microtype) in font `T1/lmr/m/sc/10.95'. +(microtype) Ignoring protrusion settings for this character. + +File: img/moveit_pipeline.png Graphic file (type png) + +Package pdftex.def Info: img/moveit_pipeline.png used on input line 224. +(pdftex.def) Requested size: 398.33858pt x 464.73143pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[34 + +] [35 <./img/moveit_pipeline.png>] (./main.aux) +Package rerunfilecheck Info: File `main.out' has not changed. +(rerunfilecheck) Checksum: D41D8CD98F00B204E9800998ECF8427E;0. +Package logreq Info: Writing requests to 'main.run.xml'. +\openout1 = `main.run.xml'. + + ) +Here is how much of TeX's memory you used: + 34834 strings out of 476025 + 713055 string characters out of 5796533 + 1873388 words of memory out of 5000000 + 54600 multiletter control sequences out of 15000+600000 + 556224 words of font info for 125 fonts, out of 8000000 for 9000 + 1143 hyphenation exceptions out of 8191 + 108i,20n,106p,10626b,2447s stack positions out of 5000i,500n,10000p,200000b,80000s + +Output written on main.pdf (40 pages, 890010 bytes). +PDF statistics: + 702 PDF objects out of 1000 (max. 8388607) + 588 compressed objects within 6 object streams + 144 named destinations out of 1000 (max. 500000) + 23581 words of extra memory for PDF output out of 24883 (max. 10000000) + diff --git a/main.out b/main.out new file mode 100644 index 0000000..e69de29 diff --git a/main.out.ps b/main.out.ps index 24275e2..43ec760 100644 --- a/main.out.ps +++ b/main.out.ps @@ -4,78 +4,238 @@ ifelse [ /Title(\376\377\000E\000i\000n\000l\000e\000i\000t\000u\000n\000g) +/Count -4 /Action/GoTo/Dest(chapter.1)cvn /OUT pdfmark [ -/Title(\376\377\000A\000u\000f\000g\000a\000b\000e) +/Title(\376\377\000M\000o\000t\000i\000v\000a\000t\000i\000o\000n) +/Action/GoTo/Dest(section.1.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000S\000t\000a\000n\000d\000\040\000d\000e\000r\000\040\000W\000i\000s\000s\000e\000n\000s\000c\000h\000a\000f\000t) +/Action/GoTo/Dest(section.1.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000W\000e\000l\000c\000h\000e\000\040\000S\000z\000e\000n\000a\000r\000i\000e\000n) +/Action/GoTo/Dest(section.1.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000W\000e\000l\000c\000h\000e\000r\000\040\000N\000u\000t\000z\000e\000n\000\040\000/\000\040\000C\000o\000n\000t\000r\000i\000b\000u\000t\000i\000o\000n\000s) +/Action/GoTo/Dest(section.1.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000K\000o\000n\000z\000e\000p\000t) +/Count -3 /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) +/Title(\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000R\000o\000b\000o\000t\000e\000r\000s) +/Action/GoTo/Dest(section.2.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000M\000e\000n\000s\000c\000h\000e\000n) +/Action/GoTo/Dest(section.2.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000r\000\040\000T\000r\000e\000e\000s) +/Action/GoTo/Dest(section.2.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000K\000o\000m\000p\000o\000n\000e\000n\000t\000e\000n\000-\000/\000S\000o\000f\000t\000w\000a\000r\000e\000a\000u\000s\000w\000a\000h\000l) /Count -4 /Action/GoTo/Dest(chapter.3)cvn /OUT pdfmark [ -/Title(\376\377\000R\000O\000S) +/Title(\376\377\000D\000i\000e\000n\000s\000t\000u\000m\000g\000e\000b\000u\000n\000g\000\040\000\050\000R\000O\000S\0002\000\051) /Count -2 /Action/GoTo/Dest(section.3.1)cvn /OUT pdfmark [ -/Title(\376\377\000M\000o\000v\000e\000I\000t) +/Title(\376\377\000A\000u\000s\000w\000a\000h\000l) /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) +/Title(\376\377\000B\000e\000s\000c\000h\000r\000e\000i\000b\000u\000n\000g) /Action/GoTo/Dest(subsection.3.1.2)cvn /OUT pdfmark [ -/Title(\376\377\000G\000a\000z\000e\000b\000o) -/Count -1 +/Title(\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000s\000u\000m\000g\000e\000b\000u\000n\000g\000\040\000\050\000G\000a\000z\000e\000b\000o\000\051) +/Count -3 /Action/GoTo/Dest(section.3.2)cvn /OUT pdfmark [ -/Title(\376\377\000S\000e\000n\000s\000o\000r\000e\000n) +/Title(\376\377\000A\000u\000s\000w\000a\000h\000l) /Action/GoTo/Dest(subsection.3.2.1)cvn /OUT pdfmark [ -/Title(\376\377\000R\000o\000b\000o\000t\000e\000r) +/Title(\376\377\000R\000o\000b\000o\000t\000e\000r\000s\000i\000m\000u\000l\000a\000t\000i\000o\000n) +/Action/GoTo/Dest(subsection.3.2.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000e\000n\000s\000c\000h\000e\000n\000s\000i\000m\000u\000l\000a\000t\000i\000o\000n) +/Action/GoTo/Dest(subsection.3.2.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000R\000o\000b\000o\000t\000e\000r\000u\000m\000g\000e\000b\000u\000n\000g\000\040\000\050\000M\000o\000v\000e\000I\000t\0002\000\051) /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) +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000r\000\040\000T\000r\000e\000e\000s) /Action/GoTo/Dest(section.3.4)cvn /OUT pdfmark [ /Title(\376\377\000U\000m\000s\000e\000t\000z\000u\000n\000g) -/Count -1 +/Count -4 /Action/GoTo/Dest(chapter.4)cvn /OUT pdfmark [ -/Title(\376\377\000R\000O\000S) -/Count -4 +/Title(\376\377\000G\000r\000u\000n\000d\000l\000e\000g\000e\000n\000d\000e\000r\000\040\000S\000y\000s\000t\000e\000m\000a\000u\000f\000b\000a\000u) /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 +/Title(\376\377\000M\000e\000n\000s\000c\000h) +/Count -3 +/Action/GoTo/Dest(section.4.2)cvn /OUT pdfmark [ -/Title(\376\377\000G\000a\000z\000e\000b\000o) -/Action/GoTo/Dest(subsection.4.1.2)cvn +/Title(\376\377\000\334\000b\000e\000r\000s\000i\000c\000h\000t) +/Action/GoTo/Dest(subsection.4.2.1)cvn /OUT pdfmark [ -/Title(\376\377\000M\000o\000v\000e\000I\000t) -/Action/GoTo/Dest(subsection.4.1.3)cvn +/Title(\376\377\000M\000o\000d\000e\000l\000l\000i\000e\000r\000u\000n\000g) +/Action/GoTo/Dest(subsection.4.2.2)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 +/Title(\376\377\000P\000r\000o\000g\000r\000a\000m\000m\000i\000e\000r\000u\000n\000g) +/Action/GoTo/Dest(subsection.4.2.3)cvn /OUT pdfmark [ -/Title(\376\377\000E\000r\000g\000e\000b\000n\000i\000s\000s\000e) +/Title(\376\377\000R\000o\000b\000o\000t\000e\000r) +/Count -4 +/Action/GoTo/Dest(section.4.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000\334\000b\000e\000r\000s\000i\000c\000h\000t) +/Action/GoTo/Dest(subsection.4.3.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000o\000d\000e\000l\000l\000i\000e\000r\000u\000n\000g) +/Action/GoTo/Dest(subsection.4.3.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000o\000v\000e\000I\000t\000\040\0002\000\040\000K\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) +/Action/GoTo/Dest(subsection.4.3.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000D\000e\000t\000a\000i\000l\000s) +/Action/GoTo/Dest(subsection.4.3.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000r\000\040\000T\000r\000e\000e\000s) +/Count -1 +/Action/GoTo/Dest(section.4.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000A\000s\000y\000n\000c\000h\000r\000o\000n\000e\000\040\000N\000o\000d\000e\000s) +/Action/GoTo/Dest(subsection.4.4.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000S\000z\000e\000n\000a\000r\000i\000e\000n\000b\000a\000s\000i\000e\000r\000t\000e\000\040\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n) +/Count -3 /Action/GoTo/Dest(chapter.5)cvn /OUT pdfmark [ +/Title(\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000M\000e\000n\000s\000c\000h\000e\000n) +/Action/GoTo/Dest(section.5.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000w\000e\000g\000u\000n\000g\000\040\000d\000e\000s\000\040\000R\000o\000b\000o\000t\000e\000r\000s) +/Action/GoTo/Dest(section.5.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000B\000e\000h\000a\000v\000i\000o\000r\000T\000r\000e\000e\000s) +/Count -2 +/Action/GoTo/Dest(section.5.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000N\000o\000d\000e\000s) +/Action/GoTo/Dest(subsection.5.3.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000K\000o\000m\000b\000i\000n\000i\000e\000r\000e\000n\000\040\000v\000o\000n\000\040\000N\000o\000d\000e\000s\000\040\000z\000u\000\040\000e\000i\000n\000e\000r\000\040\000R\000e\000q\000u\000e\000s\000t) +/Action/GoTo/Dest(subsection.5.3.2)cvn +/OUT pdfmark +[ /Title(\376\377\000D\000i\000s\000k\000u\000s\000s\000i\000o\000n) +/Count -2 /Action/GoTo/Dest(chapter.6)cvn /OUT pdfmark +[ +/Title(\376\377\000L\000e\000s\000s\000o\000n\000s\000\040\000L\000e\000a\000r\000n\000e\000d\000\040\000b\000e\000i\000\040\000d\000e\000r\000\040\000U\000m\000s\000e\000t\000z\000u\000n\000g) +/Count -4 +/Action/GoTo/Dest(section.6.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000d\000e\000s\000\040\000R\000o\000b\000o\000t\000e\000r\000m\000o\000d\000e\000l\000l\000s) +/Action/GoTo/Dest(subsection.6.1.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000G\000a\000z\000e\000b\000o) +/Action/GoTo/Dest(subsection.6.1.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000R\000O\000S\0002) +/Action/GoTo/Dest(subsection.6.1.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000M\000o\000v\000e\000I\000t\0002) +/Action/GoTo/Dest(subsection.6.1.4)cvn +/OUT pdfmark +[ +/Title(\376\377\000L\000e\000s\000s\000o\000n\000s\000\040\000L\000e\000a\000r\000n\000e\000d\000\040\000b\000e\000i\000\040\000d\000e\000n\000\040\000S\000z\000e\000n\000a\000r\000i\000e\000n) +/Count -1 +/Action/GoTo/Dest(section.6.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000D\000e\000b\000u\000g\000g\000i\000n\000g) +/Action/GoTo/Dest(subsection.6.2.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000Z\000u\000s\000a\000m\000m\000e\000n\000f\000a\000s\000s\000u\000n\000g\000\040\000u\000n\000d\000\040\000A\000u\000s\000b\000l\000i\000c\000k) +/Count -3 +/Action/GoTo/Dest(chapter.7)cvn +/OUT pdfmark +[ +/Title(\376\377\000E\000r\000g\000e\000b\000n\000i\000s\000s\000e) +/Count -2 +/Action/GoTo/Dest(section.7.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000G\000r\000a\000p\000h\000i\000s\000c\000h\000e\000\040\000R\000e\000p\000r\000\344\000s\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000d\000e\000r\000\040\000S\000z\000e\000n\000a\000r\000i\000e\000n) +/Action/GoTo/Dest(subsection.7.1.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000A\000n\000p\000a\000s\000s\000u\000n\000g\000\040\000d\000e\000r\000\040\000B\000e\000h\000a\000v\000i\000o\000r\000\040\000T\000r\000e\000e\000s\000\040\000a\000n\000\040\000S\000z\000e\000n\000a\000r\000i\000e\000n) +/Action/GoTo/Dest(subsection.7.1.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000D\000i\000s\000k\000u\000s\000s\000i\000o\000n) +/Action/GoTo/Dest(section.7.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000A\000u\000s\000b\000l\000i\000c\000k) +/Count -3 +/Action/GoTo/Dest(section.7.3)cvn +/OUT pdfmark +[ +/Title(\376\377\000U\000m\000s\000e\000t\000z\000u\000n\000g\000\040\000i\000n\000\040\000a\000n\000d\000e\000r\000e\000m\000\040\000S\000i\000m\000u\000l\000a\000t\000o\000r) +/Action/GoTo/Dest(subsection.7.3.1)cvn +/OUT pdfmark +[ +/Title(\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000b\000e\000w\000e\000g\000t\000e\000r\000\040\000O\000b\000j\000e\000k\000t\000e) +/Action/GoTo/Dest(subsection.7.3.2)cvn +/OUT pdfmark +[ +/Title(\376\377\000E\000r\000g\000\344\000n\000z\000u\000n\000g\000\040\000v\000o\000n\000\040\000U\000m\000g\000e\000b\000u\000n\000g\000s\000e\000r\000k\000e\000n\000n\000u\000n\000g) +/Action/GoTo/Dest(subsection.7.3.3)cvn +/OUT pdfmark diff --git a/main.pdf b/main.pdf index b580b0a..90ccf83 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.run.xml b/main.run.xml new file mode 100644 index 0000000..fa45604 --- /dev/null +++ b/main.run.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + latex + + main.bcf + + + main.bbl + + + blx-dm.def + blx-compat.def + biblatex.def + standard.bbx + numeric.bbx + numeric.cbx + biblatex.cfg + german.lbx + ngerman.lbx + + + + biber + + biber + main + + + main.bcf + + + main.bbl + + + main.bbl + + + main.bcf + + + main.bib + + + diff --git a/main.synctex.gz b/main.synctex.gz new file mode 100644 index 0000000..bb8bad2 Binary files /dev/null and b/main.synctex.gz differ diff --git a/main.tex b/main.tex index 86fedba..1583292 100644 --- a/main.tex +++ b/main.tex @@ -13,7 +13,6 @@ parskip=half, \usepackage{acro} \usepackage{listings} \usepackage[style=numeric,backend=biber]{biblatex} -%\usepackage[style=numeric,backend=libbib]{biblatex} \usepackage{pdfpages} \usepackage{scrhack} \usepackage{xcolor} @@ -21,7 +20,9 @@ parskip=half, \usepackage{hyperref} \usepackage{tabularray} \usepackage{xurl} +\usepackage{soul} \usepackage{xcolor} +\usepackage{inconsolata} \usepackage[strings]{underscore} \usepackage[letterspace=150]{microtype} @@ -34,7 +35,13 @@ parskip=half, } \definecolor{light-gray}{gray}{0.95} -\newcommand{\code}[1]{\colorbox{light-gray}{\texttt{#1}}} +%\newcommand{\code}[1]{\colorbox{light-gray}{\texttt{#1}}} +\newcommand{\code}[1]{ + \begingroup% + \sethlcolor{light-gray}% + \hl{\texttt{#1}}% + \endgroup +} \ihead*{\rightmark} \ohead*{\thepage} @@ -120,6 +127,10 @@ parskip=half, -Nur CAD-Dateien der Außenhülle -Schätzung von Spezifikationen anhand Marketingmaterial +\subsection{Erweiterung des Robotermodells mit MoveIt} +-Fehler durch falsche Pfade des Setups + +-Fehler durch fehlerhafte Config (Mal nachsehen, was das genau war) \subsection{Gazebo} \subsubsection{Upgrade auf Ignition} Gazebo ist zu diesem Zeitpunkt in mehreren, teilweise gleichnamigen Versionen verfügbar, welche sich jedoch grundlegend unterscheiden. @@ -141,11 +152,28 @@ Die Arbeit in kleine Stücke aufzuteilen ist hierbei hilfreich, da Fehler währe 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 +Die von Gazebo verwendete Plugininfrastruktur ist ideal, um schnell neue Funktionen in Gazebo zu entwickeln. +Jedoch existiert damit jedes Plugin im selben Prozess, was bei der Nutzung von Bibliotheken, welche nicht für die mehrfache Nutzung im selben Prozess entsprechend ausgelegt wurden, zu Problemen führen kann. + +Zur Kommunikation des ActorPlugins mit dem ROS-ActionServer wurde die benötigte Funktionalität vorerst im Plugin selbst implementiert. +Da diese Funktionalität zuerst entwickelt wurde, konnte sie zu diesem Zeitpunkt nur alleinstehend getestet werden. +Diese Tests verliefen vorerst erfolgreich, jedoch scheiterten sie bei der Integration des Robotermodells, welches über die \code{ros_control}-Integration ebenfalls \code{rclcpp} nutzt. + +Um dieses Problem zu umgehen, sind mehrere Lösungsansätze denkbar. +\begin{description} + \item[Separater Nachrichtendienst] + Ein solcher losgelöster Dienst kann die Nachrichten mit einem anderen Programm auszutauschen, welches die Kommunikation nach außen übernimmt. + \item[Nutzung der gleichen ROS-Instanz] + Um dem Problem zu begegnen, könnte auch eine globale ROS-Instanz von Gazebo verwaltet werden, welche dann von den Plugins genutzt werden kann. + Dies könnte als ein Plugin realisiert werden, welches diese anderen Plugins zur Verfügung stellt, jedoch müssten die anderen Plugins zur Nutzung dieser Schnittstelle modifiziert werden. + \item[Gazebo-ROS-Brücke] + Die Gazebo-ROS-Brücke kann Nachrichten, welche in beiden Formaten definiert wurden, ineinander umwandeln. + Dies ermöglicht die Kommunikation über die Brücke als Mittelmann. + Dabei müssten Anpassungen an der Architektur vorgenommen werden, da Gazebo kein Äquivalent zum ActionServer besitzt. +\end{description} +Die Entscheidung fiel auf einen separaten Nachrichtendienst, da dessen Implementation losgelöst von anderen Systemen funktioniert. +Natürlich ist die Einführung eines weiteren Nachrichtendienstes ein Bruch der Philosophie, jedoch die einzige Methode, die garantiert funktioniert, weswegen sie letztendlich implementiert wurde. --Potentielle Lösung in einer Präsentation angekündigt (mal sehen, ob ich die wiederfinde) \subsubsection{Fehlende Animationsgrundlagen} -Animationen werden als .col bereitgestellt @@ -203,11 +231,18 @@ Darunter fallen eine grundlegende Strukturänderung der unterliegenden Engine, w -Daten aus Gazebo extrahieren und in MoveIt einbinden --Person in OctoMap erkennen +-Person in OctoMap\cite{octomap} erkennen +\subsection{Zusammenbringen von ActorPlugin und ActorServer} +-Mechanismus für Datenaustausch zwischen ROS und Gazebo überdenken/überarbeiten + +-Geteilte ROS Instanz zwischen Plugins? Wie? + +-Potentielle Integration von ROS als Messagedients in Gazebo + \printbibliography \markboth{Anhang}{Anhang} -\begin{figure}[h] +\begin{figure}[ht] \includegraphics[width=14cm]{img/moveit_pipeline} \caption{Visualisierung der MoveIt Pipeline\cite{moveitpipeline}} \label{moveitpipeline} diff --git a/main.toc b/main.toc new file mode 100644 index 0000000..0503091 --- /dev/null +++ b/main.toc @@ -0,0 +1,79 @@ +\acswitchoff +\babel@toc {ngerman}{}\relax +\contentsline {chapter}{\numberline {1}Einleitung}{1}{chapter.1}% +\contentsline {section}{\numberline {1.1}Motivation}{1}{section.1.1}% +\contentsline {section}{\numberline {1.2}Stand der Wissenschaft}{1}{section.1.2}% +\contentsline {section}{\numberline {1.3}Welche Szenarien}{2}{section.1.3}% +\contentsline {section}{\numberline {1.4}Welcher Nutzen / Contributions}{2}{section.1.4}% +\contentsline {chapter}{\numberline {2}Konzept}{4}{chapter.2}% +\contentsline {section}{\numberline {2.1}Simulation des Roboters}{4}{section.2.1}% +\contentsline {section}{\numberline {2.2}Simulation des Menschen}{5}{section.2.2}% +\contentsline {section}{\numberline {2.3}Behavior Trees als Beschreibungssprache}{5}{section.2.3}% +\contentsline {section}{\numberline {2.4}Virtualisierungsumgebung als Platform}{6}{section.2.4}% +\contentsline {chapter}{\numberline {3}Komponenten-/Softwareauswahl}{7}{chapter.3}% +\contentsline {section}{\numberline {3.1}Dienstumgebung (ROS2)}{7}{section.3.1}% +\contentsline {subsection}{\numberline {3.1.1}Auswahl}{7}{subsection.3.1.1}% +\contentsline {subsection}{\numberline {3.1.2}Beschreibung}{8}{subsection.3.1.2}% +\contentsline {section}{\numberline {3.2}Simulationsumgebung (Gazebo)}{9}{section.3.2}% +\contentsline {subsection}{\numberline {3.2.1}Auswahl}{9}{subsection.3.2.1}% +\contentsline {subsection}{\numberline {3.2.2}Robotersimulation}{10}{subsection.3.2.2}% +\contentsline {subsection}{\numberline {3.2.3}Menschensimulation}{11}{subsection.3.2.3}% +\contentsline {section}{\numberline {3.3}Roboterumgebung (MoveIt2)}{12}{section.3.3}% +\contentsline {section}{\numberline {3.4}Behavior Trees}{13}{section.3.4}% +\contentsline {subsection}{\numberline {3.4.1}Asynchrone Nodes}{14}{subsection.3.4.1}% +\contentsline {section}{\numberline {3.5}Docker-Compose als Virtualisierungsumgebung}{15}{section.3.5}% +\contentsline {chapter}{\numberline {4}Umsetzung}{16}{chapter.4}% +\contentsline {section}{\numberline {4.1}Grundlegender Systemaufbau}{16}{section.4.1}% +\contentsline {section}{\numberline {4.2}Verwendete Datentypen}{16}{section.4.2}% +\contentsline {section}{\numberline {4.3}Mensch}{18}{section.4.3}% +\contentsline {subsection}{\numberline {4.3.1}Übersicht}{18}{subsection.4.3.1}% +\contentsline {subsection}{\numberline {4.3.2}Modellierung}{18}{subsection.4.3.2}% +\contentsline {subsection}{\numberline {4.3.3}Programmierung}{19}{subsection.4.3.3}% +\contentsline {subsubsection}{\nonumberline Message Queue}{19}{subsubsection*.3}% +\contentsline {subsubsection}{\nonumberline Nachrichten}{21}{subsubsection*.5}% +\contentsline {subsubsection}{\nonumberline ActorServer}{21}{subsubsection*.7}% +\contentsline {subsubsection}{\nonumberline Gazebo Plugin}{22}{subsubsection*.9}% +\contentsline {section}{\numberline {4.4}Roboter}{22}{section.4.4}% +\contentsline {subsection}{\numberline {4.4.1}Übersicht}{22}{subsection.4.4.1}% +\contentsline {subsection}{\numberline {4.4.2}Modellierung}{22}{subsection.4.4.2}% +\contentsline {subsection}{\numberline {4.4.3}MoveIt 2 Konfiguration}{23}{subsection.4.4.3}% +\contentsline {subsection}{\numberline {4.4.4}Details}{24}{subsection.4.4.4}% +\contentsline {section}{\numberline {4.5}Behavior Trees}{24}{section.4.5}% +\contentsline {subsubsection}{\nonumberline Allgemein nutzbare Nodes}{24}{subsubsection*.11}% +\contentsline {subsubsection}{\nonumberline Menschenspezifisch}{25}{subsubsection*.13}% +\contentsline {subsubsection}{\nonumberline Roboterspezifisch}{26}{subsubsection*.15}% +\contentsline {section}{\numberline {4.6}Docker-Compose}{26}{section.4.6}% +\contentsline {chapter}{\numberline {5}Szenarienbasierte Evaluation}{28}{chapter.5}% +\contentsline {section}{\numberline {5.1}Simulation des Menschen}{28}{section.5.1}% +\contentsline {section}{\numberline {5.2}Bewegung des Roboters}{28}{section.5.2}% +\contentsline {section}{\numberline {5.3}BehaviorTrees}{28}{section.5.3}% +\contentsline {subsection}{\numberline {5.3.1}Nodes}{28}{subsection.5.3.1}% +\contentsline {subsection}{\numberline {5.3.2}Kombinieren von Nodes zu einer Request}{28}{subsection.5.3.2}% +\contentsline {chapter}{\numberline {6}Diskussion}{29}{chapter.6}% +\contentsline {section}{\numberline {6.1}Lessons Learned bei der Umsetzung}{29}{section.6.1}% +\contentsline {subsection}{\numberline {6.1.1}Erstellung des Robotermodells}{29}{subsection.6.1.1}% +\contentsline {subsection}{\numberline {6.1.2}Gazebo}{29}{subsection.6.1.2}% +\contentsline {subsubsection}{\nonumberline Upgrade auf Ignition}{29}{subsubsection*.17}% +\contentsline {subsubsection}{\nonumberline Pluginarchitektur}{30}{subsubsection*.19}% +\contentsline {subsubsection}{\nonumberline Doppelte Messagedienste}{30}{subsubsection*.21}% +\contentsline {subsubsection}{\nonumberline Fehlende Animationsgrundlagen}{30}{subsubsection*.23}% +\contentsline {subsection}{\numberline {6.1.3}ROS2}{30}{subsection.6.1.3}% +\contentsline {subsubsection}{\nonumberline Nachrichten und deren Echtzeitfähigkeit}{30}{subsubsection*.25}% +\contentsline {subsubsection}{\nonumberline Änderung der Compilertoolchain}{30}{subsubsection*.27}% +\contentsline {subsection}{\numberline {6.1.4}MoveIt2}{31}{subsection.6.1.4}% +\contentsline {subsubsection}{\nonumberline Upgrade auf MoveIt2}{31}{subsubsection*.29}% +\contentsline {subsubsection}{\nonumberline Fehlerhafte Generierung der Roboter}{31}{subsubsection*.31}% +\contentsline {subsubsection}{\nonumberline Controller}{31}{subsubsection*.33}% +\contentsline {section}{\numberline {6.2}Lessons Learned bei den Szenarien}{31}{section.6.2}% +\contentsline {subsection}{\numberline {6.2.1}Debugging}{31}{subsection.6.2.1}% +\contentsline {chapter}{\numberline {7}Zusammenfassung und Ausblick}{32}{chapter.7}% +\contentsline {section}{\numberline {7.1}Ergebnisse}{32}{section.7.1}% +\contentsline {subsection}{\numberline {7.1.1}Graphische Repräsentation der Szenarien}{32}{subsection.7.1.1}% +\contentsline {subsection}{\numberline {7.1.2}Anpassung der Behavior Trees an Szenarien}{32}{subsection.7.1.2}% +\contentsline {section}{\numberline {7.2}Diskussion}{32}{section.7.2}% +\contentsline {section}{\numberline {7.3}Ausblick}{32}{section.7.3}% +\contentsline {subsection}{\numberline {7.3.1}Umsetzung in anderem Simulator}{32}{subsection.7.3.1}% +\contentsline {subsection}{\numberline {7.3.2}Simulation bewegter Objekte}{32}{subsection.7.3.2}% +\contentsline {subsection}{\numberline {7.3.3}Ergänzung von Umgebungserkennung}{33}{subsection.7.3.3}% +\contentsline {subsection}{\numberline {7.3.4}Zusammenbringen von ActorPlugin und ActorServer}{33}{subsection.7.3.4}% +\providecommand \tocbasic@end@toc@file {}\tocbasic@end@toc@file diff --git a/tex/1_Einleitung.tex b/tex/1_Einleitung.tex index 7f68313..8adc206 100644 --- a/tex/1_Einleitung.tex +++ b/tex/1_Einleitung.tex @@ -8,7 +8,7 @@ Diese Prüfung kann durch eine Simulation, in welcher der konkrete Anwendungsfal 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. +Dieser kann später zur Wartung und Fehlerdiagnose des Systems genutzt werden. -MRK häufiger ein Thema -Anwendungsfälle sollen evaluiert werden @@ -34,19 +34,30 @@ Aktuelle Arbeiten: \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. +Die drei zu modellierenden Szenarien sollten so gewählt werden, dass in vorherigen Szenarien genutzte Bestandteile in späteren, komplexeren Szenarien weiter genutzt werden können. +Hierfür kommen bestimmte Aufgaben, wie zum Beispiel die Interaktion mit Objekten, besonders in Frage, da diese viele ähnliche Bestandteile haben, jedoch mehrere Szenarien denkbar sind. +Dazu zählen zum Beispiel das Hineingreifen in einen Prozess, das Aufheben von Material oder das begutachten eines Objekts, welche alle nur eine Bewegungsabfolge eines Menschen 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. +Die zu erwartende Interaktion beschränkt sich hierbei auf die Anpassung der Fahrgeschwindigkeit bei Annäherung des Menschen, um Kollisionen zu vermeiden. -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. +Dieses Szenario ist ein Beispiel für eine Koexistenz zwischen Roboter und Mensch, wo beide an unterschiedlichen Aufgabe, jedoch im selben Raum, arbeiten. +Außerdem werden grundlegende Aspekte der Simulation getestet, wie zum Beispiel das Bewegen von Mensch und Roboter und die sicherheitsrelevante Aktion der Geschwindigkeitsanpassung. + +Im zweiten Szenario prüft und sortiert der Roboter Teile und legt die guten Exemplare auf einem Fließband zur Weiterverarbeitung ab. +Die Mängelexemplare werden hingegen in einer besonderen Zone abgelegt, von wo sie vom Menschen abtransportiert werden. + +In diesem Szenario wird das vorhergegangene Szenario um weitere Aspekte ergänzt, was dieses zu einem Die dritte simulierte Aufgabe stellt ein Kollaborationsszenario 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. +Dies resultiert in Problemen beim Aufheben, Transport und Ablegen der Objekte. In diesen Fällen muss nun ein Mensch aushelfen, wodurch er mit dem Roboter in Interaktion tritt. \section{Welcher Nutzen / Contributions} +Durch diese Arbeit soll in zukünftigen Projekten die Möglichkeit geschaffen werden, konzeptionelle Probleme bei der Erstellung neuer Aufgabenbereiche eines Roboters frühzeitig durch Simulation erkennbar zu machen. + +Dazu ist eine schnelle Konfiguration von sowohl Roboter als auch Mensch auf unterschiedliche Szenarien nötig, welche durch eine Beschreibungssprache definiert werden sollen. +Durch deren einfache Struktur soll komplexes Verhalten einfach und überschaubar definierbar sein, welches dann in der Simulation getestet werden kann. - Erkennen von konzeptionellen Problemen vor Ersteinsatz - Definition von Interaktion mit einfacheren Strukturen als State-Machines diff --git a/tex/2_Konzept.tex b/tex/2_Konzept.tex index daf7cac..0c6fe89 100644 --- a/tex/2_Konzept.tex +++ b/tex/2_Konzept.tex @@ -1,14 +1,19 @@ \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. +Um die beiden Akteure in der simulierten Umgebung zu steuern, werden Befehle von außerhalb der Simulation eingesetzt. +Diese Befehle werden dabei von externer Software unter der Verwendung einer Beschreibungssprache und Feedback aus der Simulation generiert. + +Hierfür wird die Beschreibungssprache in der Dienstumgebung ausgefürht, welche auch die Bewegungsplanung bereitstellt. +Die Beschreibungssprache kommunitziert direkt mit dem simulierten Menschen in der Simulation und der Bewegungsplanung. +Damit der Roboter in der Simulation von der Bewegungsplanung gesteuert werden kann, werden zwischen diesen auch Nachrichten ausgetauscht. +Der gesamte Vorgang ist dabei in Abbildung \ref{concept_overview} visualisiert. 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. +Um diese Möglichkeiten zu schaffen, sind die Systeme modular aufzubauen. -\begin{figure}[] -\includegraphics[]{img/Konzept_Overview} +\begin{figure} +\includegraphics{img/MA-Konzept-Übersicht.drawio.pdf} \centering \caption{Visualisierung des Konzepts} \label{concept_overview} @@ -18,45 +23,80 @@ Um diese Möglichkeiten zu schaffen, sind die Systeme modular aufgebaut. 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. +Cobot ist dabei ein Portemanteau aus Collaborative und Robot, was die besondere Eignung für Mensch-Roboter-Kollaboration 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. -Dieses Modell sollte die physikalischen Eigenschaften des Roboters möglichst gut wiederspiegeln. +Dieses Modell sollte die physikalischen Eigenschaften des Roboters möglichst gut abbilden. Anhand dieses Modells kann der Roboter dann in der Simulation dargestellt werden und mit anderen Objekten interagieren. \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. +Hierzu sollen in der Simulationsumgebung mehrere Animationen verwendet werden, 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 in eine bestimmte Richtung'' 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. +Um diese Animationen erstellen zu können, wird zuerst ein animierbares Modell benötigt. +Dieses Modell soll dabei die Möglichkeit bieten, um weitere Animationen erweitert werden zu können. +Es werden mehrere Animationen und Übergänge zwischen diesen benötigt, um bestimmte Bewegungen darstellen zu können. -\section{Behavior Trees} -Häufig wird Verhalten in State-Machines ausgedrückt, welche jedoch einige Nachteile besitzen. +Die so erstellten Animationen müssen nun von außerhalb der Simulationsumgebung ausführbar gemacht werden, um diese später mite einer Beschreibungssprache steuern zu können. +Hierfür muss eine Komponente entwickelt werden, welche in der Simulation die Anfragen der Beschreibungssprache entgegennimmt und umsetzt. +Um die spätere Steuerung des Menschen von außerhalb zu erleichtern, müssen diese Anfragen im Fortschritt überwacht und abgebrochen werden können. + +\section{Behavior Trees als Beschreibungssprache} +Häufig wird das Verhalten von Akteuren in einer Simulationsumgebung mit State-Machines ausgedrückt, welche jedoch einige Nachteile besitzen. State-Machines werden ab einer gewissen Größe schnell unübersichtlich. Dies erschwert die schnelle Erfassung von Abfolgen und Zustandsübergängen bei Änderungen am Code, welche jedoch essentiell für den Betrieb einer Maschine sind. -Um diese Probleme zu adressieren, entstand das Konzept der Behavior Trees. +Um diese Probleme zu adressieren, wurde das Konzept der Behavior Trees entwickelt. Ein Behavior Tree ist eine Struktur, um Verhalten als ein Baum zu beschreiben. Der Ablauf startet vom sogenannten Root, der Wurzel des Baums. Von dort an werden sogenannte Nodes, welche je nach Node unterschiedliches Verhalten abbilden, miteinander verbunden. Die Nodes werden untereinander angeordnet, welches die Relation der Nodes zueinander beschreibt. -Jede Node hat dabei entweder die Root-Node oder eine andere Node über ihr im Baum und eine beliebige Anzahl an Nodes unter sich. +Jede Node hat dabei entweder die Root-Node oder eine andere Node über sich im Baum und eine beliebige Anzahl an Nodes unter sich. Hierbei gibt es mehrere grundlegende Arten von Tree-Nodes. \begin{description} \item[Aktions-Nodes] - beschreiben einzelne ausführbare Aktionen. Mit Hilfe von Parametern kann ihr Verhalten von anderen Nodes beeinflusst werden. + beschreiben einzelne ausführbare Aktionen, die das System beeinflussen können. \item[Dekorations-Nodes] - können den Rückgabewert einer anderen Node modifizieren. Häufig existieren hier Negation, garantierter Erfolg und garantierter Fehler. + können den Rückgabewert einer anderen Node modifizieren. + Häufig existieren hier Negation, garantierter Erfolg und garantierter Fehler. \item[Sequenz-Nodes] beschreiben eine nacheinander ausgeführte Abfolge von anderen Nodes, welche mit spezifischen Randbedingungen weiter fortschreitet. \item[Fallback-Nodes] werden verwendet, um Verhalten zu definieren, welches nur bei Fehlern in vorherigen Nodes ausgeführt wird. \end{description} -In dieser Arbeit sollen BehaviorTrees für die Steuerung von Mensch und Roboter verwendet werden. +\begin{figure}[] +\includegraphics[]{img/tree_demo} +\centering +\caption{Beispiel eines BehaviorTrees} +\label{concept_tree_demo} +\end{figure} + +Das in Abbildung \ref{concept_tree_demo} visualisierte Beispiel zeigt die Abfolge, um eine Tür zu öffnen und zu durchschreiten. +Die Ausführung des Baumes beginnt an der Root-Node. +Von dort an wird als erstes die Sequenz-Node ausgeführt, welche 3 untergeordnete Nodes besitzt. + +Die linke untergeordnete Node wird als erstes ausgeführt, ist jedoch eine weitere Fallback-Node mit weiteren untergeordneten Nodes. +Diese werden auch von links nach rechts ausgeführt, bis die erste Node ein positives Ergebnis zurück gibt. +In diesem Fall wird geprüft, ob die Tür bereits offen ist. +Da dies nicht der Fall ist, wird die nächste Node ausgeführt, welche die Tür öffnen soll. +Dieser Versuch gelingt, weshalb die Ausführung der Fallback-Node beendet wird. + +Dadurch wird die nächste Node in der Sequenz ausgeführt, welche prüft, ob die Tür durchlaufen werden kann. +Da dies nicht möglich ist, wird ein Misserfolg gemeldet, welcher die Ausführung der Sequenz abbricht. +Diese würde nun von neuem beginnen, da die Root-Node ihre untergeornete Node immer neu startet. + +Durch die Definition neuer Nodes und einer anderen Baumstruktur lassen sich so einfach neue Verhalten implementieren. +Dies erlaubt die schnelle Anpassung des Verhaltens der gesteuerten Systeme. + +In dieser Arbeit sollen deshalb BehaviorTrees für die Steuerung von Mensch und Roboter verwendet werden. Die hierfür erstellten Nodes sollen universell gestaltet werden, um alle Szenarien, welche in dieser Arbeit bearbeitet werden, abzudecken. + +\section{Virtualisierungsumgebung als Platform} +Aufgrund von vorheriger Erfahrung mit involvierten Einrichtungsprozessen, ist der Einsatz fest definierter Umgebungen unerlässlich. +Dies kann durch den Einsatz einer Virtualisierungsumgebung geschehen, in welcher das zu entwerfende System ausgeführt wird. + +Durch diesen Zwischenschritt können benötigte Programme, Pfade und Umgebungsvariablen in der Virtualisierungsumgebung hinterlegt werden, welche diese bei der Ausführung auf einem anderen Grundsystem korrekt abbilden kann. +Dies erhöht die Zuverlässigkeit der Umgebung, da alle Änderungen an der Umgebung auf alle ausführenden Systeme gespiegelt werden können. diff --git a/tex/3_Auswahl.tex b/tex/3_Auswahl.tex index 04558a6..d7560dc 100644 --- a/tex/3_Auswahl.tex +++ b/tex/3_Auswahl.tex @@ -1,24 +1,44 @@ \chapter{Komponenten-/Softwareauswahl} +Die Auswahl der verwendeten Softwarekomponenten ist ein wichtiger Schritt der Entwicklung, da diese Entscheidungen den späteren Entwicklungsprozess nachträglich beeinflussen. +Hierfür werden Komponenten ausgewählt, welche die im Konzept besprochenen Teilbereiche abdecken und miteinander verbunden werden können. + \section{Dienstumgebung (ROS2)} -\subsection{Auswahl} -Durch eine Dienstumgebung werden häufig benötigte Funktionen bereitgestellt, welche in Programmen genutzt werden können. -Dabei ist es irrelevant, ob diese für simulierte, aber auch echte Hardware, genutzt werden. +Die Dienstumgebung bestimmt maßgeblich, wie Software im Entwicklungsprozess geschrieben wird. +Durch sie werden häufig benötigte Funktionen bereitgestellt, welche in Programmen in der Umgebung genutzt werden können. + Bei einer Dienstumgebung für Roboter gehören zu den grundlegendn Aspekten die Nachrichtenübergabe zwischen einzelen interagierenden Programmen, um eine gemeinsame Basis für ein einfach erweiterbares System zu schaffen. +\subsection{Auswahl} +Es existieren mehrere Systeme, welche als Dienstumgebung für Roboter in Frage kommen, wenn es nur um die Nachrichtenübergabe zwischen Programmen geht. +Jede Lösung, welche Nachrichten zwischen Prozessen austauschen kann, ist ein potentieller Kanidat für ein Roboterframework. + +Wichtige Aspekte sind dabei die Geschwindigkeit der Anbindung und die Definition der Nachrichten, welche über das System ausgetauscht werden. + +Nutzbare, bereits als IPC integrierte Systeme sind zum Beispiel Pipes, welche Daten zwischen Prozessen über Buffer austauschen. +Auch die Nutzung von Message Queues und Shared Memory ist hierfür denkbar. +Diese Systeme sind performant, jedoch nicht einfach zu verwalten, da sie von einer direkten Kommunikation von 2 oder mehr Komponenten, welche exakt für diesen Zweck entwickelt wurden, ausgehen. + +Eine Alternative stellen Sockets dar, welche Daten zwischen zwei Programmen austauschen können. + + In diesem Bereich sticht ROS als Dienstumgebung für Roboter hervor, da es sich um ein etabliertes, quelloffenes und häufig verwendetes System handelt. Es bietet die oben genannten Aspekte und einige weitere Verbesserungen, welche später näher beleuchtet werden. + Die neuste Version ROS2 bietet dabei einige Verbesserungen im Vergleich zu früheren Version ROS1. Ein neues Nachrichtenformat mit Quality of Service kann zum Beispiel Nachrichten vorhalten und über sowohl TCP als auch UDP kommunizieren. Außerdem werden nun neben CMake auch andere Buildsysteme unterstützt, unter anderem auch Python. -Generell existieren im Feld der Roboter-Dienstumgebungen keine Alternativen mit ähnlichem Funktionsumfang und gleicher Reichweite, jedoch sind andere Systeme mit anderen Nachrichtenformaten denkbar. +Generell existieren im Feld der Roboter-Dienstumgebungen keine Alternativen mit ähnlichem Funktionsumfang und gleicher Reichweite. Vor allem die unzähligen ROS-Bibliotheken, welche von Nutzern des Systems über die Jahre erstellt wurden, machen das System so populär.\cite{rospackages} --Alternative Ökosysteme mit gleichem Umfang wie ROS existieren nicht. --ROS2 --Andere (nur) Messagingsysteme --LCM --ZeroMQ +ROS kann für sowohl simulierte Umgebungen, aber auch für echte Roboter eingesetzt werden, da beide Anwendungsfälle durch Programme an die Umgebung angebunden werden können. + + +%-Alternative Ökosysteme mit gleichem Umfang wie ROS existieren nicht. +%-ROS2 +%-Andere (nur) Messagingsysteme +%-LCM +%-ZeroMQ \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. @@ -57,8 +77,8 @@ Zu den Aufgaben von ROS gehören dabei: 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. @@ -100,9 +120,31 @@ Aus diesen Funktionen könnte ein Roboterarm aufgebaut werden, welcher dann durc Die Wahl der Simulationsumgebung fiel auf Gazebo Ignition, da dieser Simulator bereits im ROS-Framework etabliert ist. Dabei erlauben die offizielle ROS-Anbindung und offene Lizenz eine zuverlässige Verwendung in unterschidlichsten Szenarien. +\subsection{Verwendete Dateiformate} +Um die Simulationsumgebung zu beschreiben, nutzt Gazebo das .sdf-Dateiformat\cite{sdf-format}. +Dieses Format basiert auf XML und wird zur definition gesamter Welten, aber auch einzelner Objekte benutzt. + +Um verschiedene Versionen des Formats zu unterstützen, enthält das einzige sdf-Element die gewünschte Versionsnummer. +In diesem befinden sich entweder ein Modell, Actor oder Licht, oder mindestens eine Welt. + +Eine Welt definiert in Gazebo den kompletten Aubau des Simulators. +Zuerst enthält ein Welt-Element die Daten über die physikalischen Konstanten der Simulationsumgebung. +Außerdem werden alle benötigten Teile der Nutzeroberfläche deklariert, welche im ausgeführten Simulator verfügbar sein sollen. +Letzendlich können auch mehrere Modelle, Aktoren und Lichter in der Welt definiert werden. +Diese können auch aus anderen URIs stammen, welche in der Welt deklariert wurden. +Dies erlaubt das Laden von zum Beispiel vorher definierten Objekten oder Objekten aus der offiziellen Bibliothek\cite{gazebo-app}. + +Ein Modell enthält einen Roboter oder ein anderes physikalisches Objekt in der Simulation. +Die Deklaration eines weiteren Untermodells ist möglich, um komplexere Strukturen abbilden zu können. +Über ein include-Element können auch andere .sdf-Dateien, welche nur ein Modell enthalten, zum Modell hinzugefügt werden. + +Jedes Modell wird über eine Translation und Rotation im Simulationsraum verankert, wobei das Referenzsystem des überliegenden Modells genutzt wird. +Außerdem können im Modell Einstellungen für dessen Physiksimulation vorgenommen werden. +Für unbewegliche Modelle sollte ein \code{static}-Element auf 1 gesetzt werden, um dieses unbeweglich zu machen. + \subsection{Robotersimulation} -Für die Robotersimulation wird ein Modell des Roboters benötigt, in welchem dieser für die Siimulationsumgebung beschrieben wird. +Für die Robotersimulation wird ein Modell des Roboters benötigt, in welchem dieser für die Simulationsumgebung beschrieben wird. Gazebo nutzt hierfür .srdf-Dateien, welche auf xml basieren. In diesen werden die einzelnen Glieder des Arms und die verbindenden Gelenke beschrieben. @@ -124,11 +166,11 @@ Folgende Typen von Gelenken können in urdf genutzt werden: \item[feste Gelenke] sperren alle 6 Freiheitsgrade und werden häufig zur Plazierung von Objekten in einer Szene genutzt. \item[kontinuierliche Gelenke] - erlauben die beliebige Rotation um die Achse des Gelenks. Sie sind nur selten in rotierenden Gelenken mit Schleifkontakten zu finden. + erlauben die beliebige Rotation um die Achse des Gelenks. Sie sind nur selten in rotierenden Gelenken mit Schleifkontakten oder anderen frei rotierbaren Übertragungsmechanismen zu finden. \item[drehbare Gelenke] - verhalten sich wie kontinuerliche Verbindungen, haben jedoch minimale und maximale Auslenkungen. Sie sind die häufigste Art von Gelenken in Roboterarmen. + verhalten sich wie kontinuerliche Gelenke, haben jedoch minimale und maximale Auslenkungen. Sie sind die häufigste Art von Gelenken in Roboterarmen. \item[prismatische Gelenke] - ermöglichen die Bewegung entlang der Achse des Gelenks. Denkbare Anwendungsfälle sind simulierte lineare Aktuatoren. + ermöglichen die lineare Bewegung entlang der Achse des Gelenks. Denkbare Anwendungsfälle sind simulierte lineare Aktuatoren. \end{description} \subsection{Menschensimulation} Gazebo besitzt bereits ein einfaches Animationssystem für bewegliche Aktoren, welches auch für Menschen nutzbar ist. @@ -137,14 +179,16 @@ Dadurch ist eine Laufanimation realisierbar, welche synchronisiert zur Bewegung Jedoch ist dies nur unter der Bedingung möglich, dass der gesamte Bewegungsablauf zum Simulationsstart bekannt ist. Dies ist auf die Definition der Pfade, welche die Bewegung auslösen, zurückzuführen. -Diese können nur in der .sdf-Datei des Aktoren definiert werden, was Veränderungen zur Laufzeit ausschließt. +Diese können nur als dem Actor untergeordnetes Element in der .sdf-Datei definiert werden, was Veränderungen zur Laufzeit ausschließt. Durch diesen Umstand ist der mögliche Simulationsumfang nicht ausreichend. -Um diesen Umstand zu beheben, ist die Entwicklung eines eigenen Systems zum Bewegen und Animieren des Menschen unausweichlich. +Um dieses Problem zu beheben, ist die Entwicklung eines eigenen Systems zum Bewegen und Animieren des Menschen unausweichlich. Dieses System muss, wie im Konzept beschrieben, Steuerbefehle von außen empfangen, umsetzen und Feedback liefern können. +Ein solches System sollte als Gazebo-Plugin einbindbar sein, um Modifikationen an der Simulationsumgebung selbst auszuschließen, welche konstant weiter entwickelt wird. +Dies erlaubt die einfachere Wartung, da bei Updates der Simulationsumgebung nicht die Menschensimulation an den neuen Code angepasst werden muss. \section{Roboterumgebung (MoveIt2)} -MoveIt2 ist das empfohlene ROS2 Paket für Bewegungsplanung von Robotern. +MoveIt 2 ist das empfohlene ROS2 Paket für Bewegungsplanung von Robotern. Das System besteht aus meheren Komponmenten, welche in ihrer Gesamtheit den Bereich der Bewegungsplanung abdecken. Der Nutzer kann mit MoveIt auf mehreren Wegen Steuerbefehle für den Roboter absenden. @@ -153,19 +197,140 @@ Dort können Bewegungen durch das Bewegen von Markierungen oder in der Simulati Da sich ein solches System nur beschränkt zur Automatisierung durch Software eignet, existieren auch noch andere Schnitstellen. Für die Sprache Python existierte früher noch das moveit_commander Paket, welches den Zugriff auf MoveIt in Pyhon erlaubt, welches aber aktuell noch nicht portiert wurde. \cite{moveitpython} -Die direkte Nutzung der C++-API ist aktuell die einzige offizielle Möglichkeit, mit MoveIt auf einer abstrakteren Ebene zu interagieren. -Natürlich können die Befehle auch direkt an die entsprechenden Topics gesendet werden, was jedoch Erfahrung mit den verwendeten Datenstrukturen benötigt. -Durch diese Schnittstelle erhält die sogenannte MoveGroup ihre Informationen über die gewünschte Bewegung. +Die direkte Nutzung der C++-API ist aktuell die einzige offizielle Möglichkeit, mit MoveIt auf einer abstrakteren Ebene zu interagieren. +Natürlich können die Befehle auch direkt an die entsprechenden Topics gesendet werden um einzelne Bereiche des Systems zu testen, jedoch ist so kein einfacher Zugriff auf erweiterte Optionen möglich. + +Aus einem Robotermodell können nun die Informationen, welche von MoveIt über den zu kontrollierenden Roboter benötigt werden, generiert werden. +Diese werden über einen RobotStatePublisher an MoveIt übergeben, welches daraus das Robotermodell für die Bewegungsplanung generiert. + +Durch die vorher erwähne C++-API erhält die MoveGroup die Informationen über die gewünschte Bewegung. +Dabei können auch bestimmte Einschränkungen des Arbeitsraums, spezielle Trajektorien, oder Limitierungen der Gelenke in der Planung berücksichtigt werden. + Diese Daten können durch eine OccupancyMap ergänzt werden, welche die Bereiche beschreibt, welche sich um den Roboter befinden. Eine solche Erweiterung erlaubt die Nutzung von Kollisionsvermeidung mit Objekten im Planungsbereich. Die Planung der Bewegung wird durch einen der zahlreichen implementierten Solver erledigt, welcher durch die MoveGroup aufgerufen wird. -Um die generierte Bewegung umzusetzen, werden die gewünschten Gelenkpositionen als Abfolge an ros_control weitergegeben. +Um die generierte Bewegung umzusetzen, werden die gewünschten Gelenkpositionen als Abfolge an \code{ros_control} weitergegeben. Dabei können sowohl echte Hardwaretreiber, aber auch simulierte Roboter genutzt werden. Der Erfolg der gesamten Pipeline kann dabei durch einen Feedbackmechanismus überwacht werden. -Im Falle von Gazebo wird ign_ros_control genutzt, welches die benötigten ros_control Controller in die Simulation einbindet. -Diese können dann wie normale Controller von ros_control genutzt werden. +Im Falle von Gazebo wird \code{ign_ros_control} genutzt, welches die benötigten \code{ros_control} Controller in die Simulation einbindet. +Diese können dann wie normale Controller von \code{ros_control} genutzt werden. Dieser Ablauf ist auch im Anhang unter Abbildung \ref{moveitpipeline} visualisiert. + +\section{Behavior Trees} +Zur Verwaltung der Abläufe sollen BehaviorTrees genutzt werden, welche durch die Bibliothek \code{BehaviorTree.CPP} bereitgestellt werden. +Diese Bibliothek wurde in C++ geschrieben, und ist somit einfach in ROS integrierbar. + +Es existieren aber auch viele Beispiele und eine gute Dokumentation über die erweiterten Funktionen, welche im folgenden vorgestellt werden. + +\begin{description} + \item[Asynchrone Nodes] + sind in \code{BehaviorTree.CPP} leichter umsetzbar, da diese im Lebenszyklus der Nodes beim Konzept der Bibliothek mit bedacht wurden. + Dies resultiert in Nodes, welche ohne spezielle Logik langanhaltende Aktionen ausführen können, ohne die Ausführung des BehaviorTrees zu behindern. + \item[Reaktives Verhalten] ist ein neues Konzept, um die Handhabung von asnchronen Nodes zu vereinfachen. + Diese Strukturelemente erlauben die parallele Ausführung von mehreren Zweigen, welche aktuell ausführende Aktionen beeinflussen können. + \item[Das .xml-Format] ermöglicht einen einfachen Austausch des Verhaltens, ohne die unterliegende Programmierung verändern zu müssen. + Dies ist vor allem in kompillierten Sprachen wie C++ sinnvoll, da Änderungen im Verhaltensablauf keiner Neukompillierung bedürfen, was die Iterationszeit für Änderungen verbessert. + \item[Plugins] können zum Start geladen werden, um weitere Nodes dem ausgeführten Programm hinzufügen zu können. + Dies vereinfacht die Erweiterung um neue Funktionen und das mehrfachen Nutzen von Code. + \item[Datenfluss] zwischen den Nodes erlaubt es, von außen konfigurierbares Verhalten der Nodes zu erreichen. + Diese können dabei sowohl statisch, als auch dynamisch über sogenannte Ports mit Informationen versorgt werden. + \item[Integriertes Logging] erlaubt es, Zustandsänderungen im Behavior Tree zu visualisieren, aufzunehmen und wieder abzuspielen. + Dies erleichtert das häufig schwierige Debuggen von Zustandsmaschienen erheblich, da das Verhalten genau untersucht werden kann. +\end{description} + +BehaviorTrees werden in \code{BehaviorTree.CPP} als .xml-Dateien gespeichert. +Diese Dateien enthalten die Anordnung der Nodes selbst, aber auch weitere Konfigurationsmöglichkeiten in Form von Ein- und Ausgabeports. + +Solche Ports können verwendet werden, um Nodes generischer gestalten zu können. +So kann auf feste Parameter in den Nodes selber verzichtet werden, was das erstellen mehrerer Nodes für ähnliche Funktionalitäten verhindert. +Diese Daten können sowohl aus einem String ausgelesen werden, falls die ensprechende Funktion, welche diese in den Zieltyp übersetzt, implementiert wurde. +Aber sie können auch aus dem sogenannten Blackboard entnommen werden. + +Das Blackboard ist ein System, welches die Nutzung von Variablen als Parameter für Ein- und Ausgänge erlaubt. +Diese werden im Hintergrund als eine Referenz auf den eigentlichen Wert gespeichert. +Eine solche Funktion erlaubt das weitere Zerlegen von Vorgängen innerhalb des BehaviorTrees. +Solche kleineren Nodes sind durch ihren limitierten Umfang universeller einsetzbar, da sie nur kleinere Teilprobleme betrachten, welche zu komplexeren Strukturen zusammengesetzt werden können. + +Um die dadurch wachsenden Strukturen besser überblicken zu können, lassen sich Nodes als sogenannte SubTrees abspeichern. +Diese bilden dann in ihrer Gesamtheit eine neue Node, welche im BehaviorTree eingesetzt werden kann. +Um den Einsatz von Variablen innerhalb eines SubTrees zu ermöglichen, besitzt jeder SubTree ein separates Blackboard. +Dadurch kann ein Eingriff in äußere Funktionalität verhindert werden. + +Natürlich sollte es auch möglich sein, Variablen an solche SubTrees zu übergeben. +Diese können, wie auch bei normalen Nodes, einfach als Parameter an den SubTree übergeben werden. +Die Bibliothek \code{BehaviorTree.CPP} verbindet dann diese Werte und erlaubt die Datenübergabe zu und von dem SubTree. + +\subsection{Asynchrone Nodes} +Da nicht jeder Prozess in einem einzigen Durchlauf des BehaviorTrees abgebildet werden kann, muss die Möglichkeit geschaffen werden, lang anhaltende Prozesse abzubilden. +Dies geschieht in in \code{behaviortree_cpp_v3} durch asynchrone Nodes. + +Eine asynchrone Node besitzt neben den Zuständen SUCCESS und FAILURE auch noch die beiden anderen Zustände RUNNING und IDLE. + +Der Zustand RUNNING steht dabei für eine Node, welche sich noch in der Ausführung befindet. +So lang dieser Zustand anhält, wird die Node nicht noch ein weiteres Mal gestartet, sondern nur der Zustand abgefragt. + +Der IDLE-Zustand ist ein besonderer Zustand, welcher nur durch eine vollständige Ausführung erreichbar ist. +Er wird von der Node angenommen, nachdem ein RUNNING Zustand durch entweder SUCCESS oder FAILURE beendet wurde und darf sonst nicht verwendet werden. + +\subsection{Dateiformat} +Das verwendete Dateiformat, um Behavior Trees zu erstellen, basiert auf XML. +Jedes Dokument beginnt dabei mit einem Root-Element, welches alle BehaviorTrees und eine Referenz auf die ID des Hauptbaumes enthält. +Diese wird benötigt, da auch Unterbäume im selben Dokument deklariert und genuzt werden können, diese aber sonst nicht vom Hauptbaum unterscheidbar sind. + +Jeder Baum beginnt mit einem BehaviorTree-Element, welches als Attribut die ID des Baumes besitzen muss. +Als untergeornete Elemente des Baumes werden die Nodes entsprechend der gewünschten Baumstruktur angeordnet. + +Zur besseren Visualisierung der XML-Struktur wurde hier die bereits aus dem Konzept bekannte Baumstruktur, hier noch einmal unter Abbildung \ref{choice_tree_demo} zu sehen, in XML umgewandelt. +Dabei ist zu beachten, dass die Root-Node nicht in der Struktur existiert. +Außerdem können selbst definierte Nodes sowohl direkt mit ihrem Namen, aber auch über den Namen Action mit ihrem Namen als ID-Parameter, referenziert werden. +\begin{figure}[hpt] +\includegraphics[width=\textwidth]{img/tree_demo} +\centering +\caption{Beispiel eines BehaviorTrees} +\label{choice_tree_demo} +\end{figure} +\begin{figure}[hpt] +\begin{lstlisting}[] + + + + + + + + + + + + + + +\end{lstlisting} +\caption{Beispiel eines BehaviorTrees als .xml} +\label{choice_tree_xml} +\end{figure} + +\section{Docker-Compose als Virtualisierungsumgebung} +Docker ist eine Virtualisierungsumgebung für Anwendungen, welche die komplette Umgebung für deren Ausführung bereitstellen. +Dadurch wird die Inbetriebnahme von Anwendungen, welche spezielle Umgebungen für ihre Ausführung benötigen, ermöglicht. + +Dies wird durch den Einsatz von sogenannten Containern erreicht, welche durch Buildfiles definiert werden. +Ein Buildfile enthält exakte Instruktionen, wie der Container aus anderen Containern, Dateien oder einer Kombination beider erstellt werden kann. +Die so erstellten Container können entweder lokal oder auf einem Server für die Verwendung bereitgehalten werden. + +Ein solcher Container enthält ein eigenes Dateisystem, welches aus dem im Buildfile definierten Dateien und einem Overlay besteht. +In diesem Overlay werden Änderungen gespeichert, welche am Container während der Laufzeit vorgenommen werden. +Sofern nicht definiert, werden diese Änderungen beim Neustart des Containers wieder entfernt. + +Um dies zu vermeiden, kann entweder ein Volume, eine Art virtuelles Laufwerk im \code{/var/lib/docker} Verzeichnis, oder ein ``bind mount'' in der compose.yml-Datei eingerichtet werden. +Ein ``bind mount'' ist eine direkte Verbindung zu einem Ort des Host-Dateisystems, welche in den Container hereingereicht wird. + +Docker-Compose stellt eine Erweiterung von Docker dar, welche die Inbetriebnahme der Container über ein spezielles Dateiformat verwaltet. +In dieser Datei werden weitere Optionen angegeben, welche in die Umgebung des laufenden Containers eingreifen. +Dazu gehört zum Beispiel das automatisierte Übergeben von Umgebungsvariablen, Einrichten von Netzwekumgebungen und Erstellen von Volumes und ``bind mounts''. + +Diese Automatisierung erleichtert die initiale Einrichtung eines Containers auf einem neuen System, da alle benötigten Aspekte leicht angepasst werden können. diff --git a/tex/4_Umsetzung.tex b/tex/4_Umsetzung.tex index 93fb61d..f97c4b1 100644 --- a/tex/4_Umsetzung.tex +++ b/tex/4_Umsetzung.tex @@ -1,20 +1,89 @@ \chapter{Umsetzung} -\section{Grundlegender Systemaufbau} -Der grundlegende Systemaufbau musste stark modifiziert werden, wie in Abbildung \ref{umsetzung_overview} zu sehen, um die gesetzten Aufgaben erfüllen zu können. -Dabei fallen vor allem die überarbeitete Kommunikation mit dem simulierten Menschen und die komplexere Steuerung des Roboterarms auf. +Bei der Umsetzung des geplanten Systemaufbaus kam es zu mehreren Problemen, welche den geplanten Systemaufbau, sowie dessen Komplexität, negativ beeinflussen. -Die komplexere Steuerung des Roboters ist auf die Struktur von MoveIt zurückzuführen, welches in viele einzelne Teilmodule aufgeteilt ist. -Diese müssen durch ihren modularen Aufbau, welcher für die Vielseitigkeit verantwortlich ist, einzeln konfiguriert werden, um miteinander in Interaktion treten zu können. +Die Kommunikation zwischen dem Actormodell und dem Behavior Tree musste in mehrere Komponenten aufgeteilt werden, um Konflikte innerhalb der Simulationssoftware zu vermeiden. -Außerdem musste die Kommunikation des Modells des Menschen überarbeitet werden, da die ROS-Kommunikation in Gazebo nur mit Einschränkungen möglich ist. +Zudem ist die Bewegungsplanung mit MoveIt2 deutlich komplexer als vorerst angenommen. +Diese Komplexität entsteht aus der Interaktion mehrerer Komponenten, welche das Gesamtsystem zur Ausführung benötigt. +Alle Einzelsysteme mussten hierfür konfiguriert werden, um die Kommunikation dieser zu ermöglichen. -\begin{figure}[] -\includegraphics[width=\textwidth]{img/Umsetzung_Overview} +Anhand der hier genannten Änderungen wurde die Übersicht des Systems angepasst, welche in Abbildung \ref{umsetzung_overview} zu sehen ist. + +\begin{figure}[h] +\includegraphics[width=\textwidth]{img/MA-Umsetzung-Übersicht.drawio} \centering \caption{Visualisierung des überarbeiteten Konzepts} \label{umsetzung_overview} \end{figure} + +\section{Verwendete Datentypen} +In der Implementation werden unterschiedliche Datentypen verwendet. +\begin{description} + \item[geometry_msgs::msg::Pose] + ist einer der häufigsten Datentypen im Umgang mit Gazebo. Dieser Datentyp enthält die Information über die Lage und Rotation eines Objekts im Raum. + Diese werden als relative Werte im Bezug auf das übergeornete Objekt gespeichert. + Objekte wie der Mensch liegen in der Hierarchie der Simulation direkt unter der Welt, welche sich direkt im Nullpunkt und ohne Rotation befindet. + Dadurch sind zum Beispiel die Koordinaten des Menschen absolut, da diese nicht durch die Welt verschoben und rotiert werden. + \item[Area] + ist eine Datenstruktur mit einem Vektor an Positionen, welche eine Zone im Zweidimensionalen Raum definieren. + Jede Position ist eine einfache Datenstruktur aus 2 Gleitkommazahlen für je die X- und Y-Koordinate der Position. + Der Verwendungszweck dieser Struktur ist die einfache Definition von Zonen, welche für Positionsgenerierungen und Postionsabfragen genutzt werden können. + \item[ActorPluginState] + definiert 4 Werte, welche das ActorPlugin annehmen kann. Diese 4 Werte sind SETUP, IDLE, MOVEMENT und ANIMATION. + \item[FeedbackMessage] + beschreibt die erste der beiden MessageQueue-Nachrichten, welche vom ActorPlugin an den ActorServer gesendet wird. + In dieser Struktur befindet sich der aktuelle Plugin-Zustand als \code{state} Parameter vom Typ ActorPluginState. + Außerdem ein \code{progress} Parameter in Form einer Gleitkommazahl, welche den Fortschritt der aktuellen Aktion angibt. + Um bei Bewegungen die aktuelle Position des Menschen zu erhalten, ist auch die aktuelle Pose des Modells im Parameter \code{current} enthalten. + \item[ActionMessage] + ist die andere Nachricht, welche über die zweite MessageQueue vom ActorServer an das ActorPlugin gesendet wird. + Wie in der FeedbackMessage ist ein \code{state} Parameter vom selben Typ enthalten, jedoch dient dieser hier als Vorgabe für den nächsten State. + Ein \code{animationName} Parameter wird als ein char-Array mit einer maximalen Länge von 255 Zeichen übergeben. + Dieser bestimmt später die Animation, welche je nach ActorPluginState während einer Bewegung oder Animation ausgeführt wird. + Der \code{animationSpeed} Parameter beschreibt entweder die Abspielgeschwindigkeit der Animation, oder die Distanz, welche pro Animationsdurchlauf zurückgelegt wird. + Außerdem wird im Falle einer Bewegung der Parameter \code{target} vom Typ Pose verwendet, um die Endposition und Rotation des Actors zu bestimmen. +\end{description} +\section{Welt} +Die Welt der Simulation wird im Paket \code{ign_world} zur Verfügung gestellt. +In diesem Paket sind sowohl die Geometrien der Welt, aber auch die benötigten Dateien zum Starten der Simulation enthalten. + +In diesem Fall handelt es sich um den Raum, in welchem die Interaktion zwischen Mensch und Roboter stattfinden soll. +Für diesen Raum wurde zuerst ein Raumplan erstellt, welcher alle benötigten Bereiche für die Szenarien besitzt (Abbildung \ref{room-plan}). + +Zuerst wird ein Stellplatz für den Roboter benötigt, welcher an einer Ecke des Raumes positioniert werden sollte. +Diese Position wurde gewählt, um die Verfahrgeschwindigkeit des Roboters höher zu halten, welche je nach Distanz zum Menschen angepasst werden soll. + +Des weiteren werden eine Arbeits- und Lagersätte für den Menschen benötigt, welche in den Szenarien genutzt werden sollen. +Im Koexistenzszenario soll der Mensch nur an diesen Stellen seine Arbeit verrichten, jedoch sich selten dem Roboter nähern, um dessen Fortschritt zu begutachten. +Die Lagerstätte soll im Kooperationsszenario neben der Arbeit des Menschen auch für die fehlerhaften Teile verwendet werden, welche durch den Roboter aussortiert und durch den Menschen dorthin verbracht werden sollen. +Eine Nutzung im Kollaborationsszenario ist nicht nicht geplant, da der Mensch den Roboter überwachen und dessen Fehler korrigieren soll. + +Der so geplante Raum wurde in Blender modelliert und als .stl-Datei exportiert, um sie in die Welt einbinden zu können. +Für das Kooperationsszenario wurde ein weiterer Raum mit Förderband erstellt, welcher nur dort genutzt wird. +Der so erstellte Raum wird nun in einer separaten .sdf-Datei referenziert, welche + +Diese Entscheidung limitiert wie der Raum in die Simulation eingebunden wird, da mehrere unterschiedliche Räume je nach ausgewähltem Szenario geladen werden müssen. +Hierfür wird, wie später auch für den Roboter selbst, das Paket \code{ros_gz_sim} verwendet. +Dieses veranlasst mit dem \code{create}-Programm das Erstellen der übergebenen Datenstruktur in Gazebo. + + +\begin{figure}[hpt] +\begin{minipage}{.45\textwidth} +\includegraphics[width=\textwidth]{img/MA-Umsetzung-Welt-Plan.drawio} +\centering +\caption{Geplanter Raum} +\label{roomplan} +\end{minipage} +\hspace{.1\textwidth} +\begin{minipage}{.45\textwidth} +\includegraphics[width=\textwidth]{img/MA-Umsetzung-Welt-Blender} +\centering +\caption{Umsetzung in Blender} +\label{roomfinished} +\end{minipage} +\end{figure} + \section{Mensch} \subsection{Übersicht} Das angepasste Verfahren zur Menschensteuerung in der Simulation verwendet mehrere Kommunikationswege. @@ -107,7 +176,23 @@ Die neuere Implementation der POSIX MessageQueue bietet einige weitere Funktione Die ausgewählte Implementation ist die neuere POSIX-Implementation einer Message Queue, da diese basierend auf den Erfahrungen mit der System V Implementation verbessert wurde. \subsubsection{Nachrichten} Die versendeten Nachrichten für den ActionServer, als auch für die Message Queue sind in den Paketen \code{ros_actor_action_server_msgs} und \code{ros_actor_message_queue_msgs} abgelegt. -Die beiden ActionServer definieren jeweils 3 Nachrichten, welche eine Startnachricht, das Feedback während der Laufzeit und eine Endnachricht beschreiben. +Sie sind absichtlich nicht in den nutzenden Paketen untergebracht, da sie durch ein externes Programm in den entsprechenden Code umgewandelt werden. + +Jede Action definiert 3 Nachrichten, welche zu unterschiedlichen Zeitpunkten in ihrer Ausführung verwendet werden. +Die definierten Nachrichten sind eine Startnachricht, eine Feedbacknachricht und eine Endnachricht. + +Ein ActionServer definiert 3 Funktionen, welche die Handhabung einer Aktion definieren. +Die erste Funktion übergibt den Wert der Startnachricht, welche mit einer Antwort quittiert werden muss. +Hierbei sind die Antworten ACCEPT_AND_DEFER, ACCEPT_AND_EXECUTE und REJECT möglich. + +ACCEPT_AND_EXECUTE signalisiert die sofortige Ausführung des gewünschten Befehls und ACCEPT_AND_DEFER steht für eine spätere Ausführung der gewünschten Aktion. +Die Option REJECT bricht die Ausführung der Aktion vorzeitig ab. + +Die zweite Funktion übergibt Abbruchanfragen an den Server, falls die Aktion durch den Client abgebrochen werden soll. +Auch diese Anfrage kann entweder mit ACCEPT akzeptiert werden, oder mit REJECT zurückgewiesen werden. + +Um Feedback während der Ausführung der Aktion geben zu können, exisitiert die dritte Funktion. +Diese erhält als Parameter ein Objekt, mit welchem Feedback- und Endnachrichten an den Client gesendet werden können. In der Startnachricht werden alle Daten, welche der Server für die Bearbeitung einer Anfrage benötigt, übergeben. Dies geschieht, damit der Auftrag schon beim Start abgebrochen werden kann, sollte dieser nicht erfüllbar sein. @@ -117,24 +202,12 @@ Dabei ist es Aufgabe des Programms, diese in beliebigen Abständen an den Client Die Endnachricht kann Rückgabewerte für die ausgeführte Aufgabe enthalten, falls diese benötigt werden. Sie werden in diesem Projekt nicht genutzt, da das Beenden eines Auftrags immer mit einer einfachen Erfolgs- oder Misserfolgsmeldung quittiert wird. -\subsubsection{ActorServer} -Der ActorServer ist die Brücke zwischen ROS und dem ActorPlugin. -Es werden zwei ActionServer angeboten, welche jeweils Bewegungen oder Animationen des simulierten Menschen auslösen können. -Beide ActionServer prüfen zuerst, ob bereits eine andere Aktion ausgeführt wird. -Sollte dies der Fall sein, wird die Anfrage abgelehnt. -Im anderen Fall wird die Aufgabe akzeptiert und in das MessageQueue-Format übersetzt und an das ActorPlugin gesandt. -Hier kommt es zu einer forcierten Warteschleife, welche die Bestätigung der Aktion vom ActorPlugin in der Feedback-Queue wartet, um das Starten mehrerer gleichzeitiger Aktionen zu unterbinden. -Parallel werden alle eingehenden Feedback-Nachrichten der Message Queue des ActorPlugins in Feedback für die aktuell laufende Action umgewandelt. -Im Falle des Bewegungs-ActionServers werden mehrere Parameter benötigt. -Zuerst werden Animationsname und -diztanz benötigt, um die richtige Animation auszuwählen und die Bewegung mit der Animation zu synchronisieren. -Als Feedbacknachricht erhält der Client die aktuelle Pose des Actors im Simulationsraum. +\subsubsection{ActorPlugin} +Das ActorPlugin nutzt die empfangenen Nachrichten aus der eingehenden Message Queue, um diese in der Simulation umzusetzen. +Der Code des Plugins ist dabei im Paket \code{ign_actor_plugin} organisiert, welches im Gazebo-Modell der Welt referenziert werden muss, um das Plugin zu laden. -Soll eine Animation über den Action Server abgespielt werden, wird auch hier ein Animationsname, jedoch auch eine Animationsgeschwindigkeit benötigt. -Die Feedbacknachricht enthält den Fortschritt der Animation als Gleitkommazahl. -\subsubsection{Gazebo Plugin} -Das ActorPlugin nutzt die Daten aus der Message Queue für Befehle, um diese in der Simulation umzusetzen. -Es werden dabei mehrere Zustände unterschieden. +Das Plugin erhält durch die empfangenen Nachrichten mehrere Zustände, welche im folgenden erläutert werden: \begin{description} \item[Setup] wird ausschließlich zu Simulationsbeginn verwendet, um alle benötigten Referenzen aus der Simualtionumgebung im Plugin zu hinerlegen, so dass diese in den anderen Zuständen genutzt werden können. @@ -151,21 +224,59 @@ Es werden dabei mehrere Zustände unterschieden. ist der Zustand, welcher nach erfolgreicher Ausführung eines Befehls angenommen wird. \end{description} -Das ActorPlugin besitzt kein Konzept des ActionServers und verlässt sich auf den ActorServer, welcher die Feedbacknachrichten in das richtige Format bringt. -Feedback wird in den Zuständen Movement und Animation in jedem Simulationsschritt gesendet. -Um auch Zustandsübergänge erkennen zu können, werden auch diese als Feedback an den ActorServer gesendet. +Das ActorPlugin besitzt kein Konzept eines ROS-ActionServers und verlässt sich auf den ActorServer, welcher die Feedbacknachrichten in das richtige Format bringt. +Feedback wird in den Zuständen Movement und Animation in eine zweiten Message Queue zu jedem Simulationsschritt gesendet. +Um Zustandsübergänge erkennen zu können, werden auch diese als Feedback an den ActorServer gesendet. +\subsubsection{ActorServer} +Der ActorServer ist die Brücke zwischen ROS und dem ActorPlugin und ist im Paket \code{ros_actor_action_server} enthalten. +Dieser weitere Dienst bindet das ActorPlugin an ROS an. + +Es werden dafür zwei ROS-ActionServer gestartet, welche jeweils Bewegungen oder Animationen des simulierten Menschen auslösen können. +Beide ActionServer prüfen bei dem Empfang eines neuen Ziels zuerst, ob bereits eine andere Aktion ausgeführt wird. +Sollte bereits eine andere Aktion ausgeführt werden, wird die Anfrage abgelehnt. +Im anderen Fall wird die Aufgabe akzeptiert und in das MessageQueue-Format übersetzt und an das ActorPlugin gesandt. + +Um das Starten mehrerer gleichzeitiger Aktionen zu unterbinden, muss der Empfang einer neuen Anfrage bestätigt werden, bevor weitere Befehle über den ROS-ActionServer entgegen genommen werden können. +Hierzu wird ein Mutex verwendet, welcher die Auswertung neuer Nachrichten verhindert, so lange der aktuelle Befehl noch nicht durch das Plugin bestätigt wurde. +Parallel werden alle eingehenden Feedback-Nachrichten der Message Queue des ActorPlugins in Feedback für die aktuell laufende Action umgewandelt. + +Im Falle des Bewegungs-ActionServers werden mehrere Parameter benötigt. +Zuerst werden Animationsname und -diztanz benötigt, um die richtige Animation auszuwählen und die Bewegung mit der Animation zu synchronisieren. +Als Feedbacknachricht erhält der Client die aktuelle Pose des Actors im Simulationsraum. + +Soll eine Animation über den Action Server abgespielt werden, wird auch hier ein Animationsname, jedoch auch eine Animationsgeschwindigkeit benötigt. +Die Feedbacknachricht enthält den Fortschritt der Animation als Gleitkommazahl. \section{Roboter} \subsection{Übersicht} +Der Roboter besteht aus vielen interagierenden Systemen, welche in ihrer Gesamtheit das vollständige Robotermodell in der Simulation verwendbar machen. + +Zuerst muss ein Modell des Roboters erstellt werden, welches in Gazebo geladen werden kann. +Dieses Modell muss dann für die Bewegungsplanung mit MoveIt erweitert werden. +Hierbei werden Controller von ros_control mit dem Modell verbunden, um den aktuellen Zustand der Achsen zu überwachen und diese steuern zu können. + +Um diese Vielfalt an Daten standartisiert an andere Software in ROS weitergeben zu können, wird eine MoveGroup in ROS gestartet, welche die Planung von Bewegungen durch andere Programme zulässt. \subsection{Modellierung} Für den Kuka LBR iisy existiert kein Simulationsmodell für Gazebo und ROS, weswegen dieses Modell aus Herstellerdaten generiert wurden. -Die Maße und Form des Roboters wurden aus einer .stl-Datei des Arms generiert. +Hierzu stand eine .stl-Datei des Herstellers zur Verfügung. +Aus dieser Datei wurden mit FreeCAD\cite{freecad} alle Glieder des Roboters als Collada-Dateien exportiert. +Dabei muss darauf geachtet werden, dass die exportierten Daten eine ausreichende Meshgröße haben, welche vorher in FreeCAD eingestellt werden muss. +Dies erlaubt das Erhalten der feinen Strukturen des Arms, auch visualisiert in Abbildung \ref{robot_raw}, welche erst später in Blender reduziert werden sollen. -Diese Datei wurde dazu in die unterschidlichen Glieder aufgeteilt, welche danach in Blender weiter bearbeitet wurden. -Hiebei wurde die hohe Auflösung der Modelle reduziert, was sich in kleineren Dateien und Startzeiten der Simulation, aber auch in der Renderzeit der Simulation, auswirkt. +\begin{figure}[] +\includegraphics[width=\textwidth/2]{img/MA-Roboter-Rohdaten} +\centering +\caption{Rohdaten aus .stl-Datei} +\label{robot_raw} +\end{figure} + +Diese Dateien können dann in Blender bearbeitet werden, um sie für die Simulation tauglich zu machen. +Hierfür wurde die hohe Auflösung der Modelle reduziert, was sich in kleineren Dateien und Startzeiten der Simulation, aber auch in der Renderzeit der Simulation, auswirkt. Außerdem wuden die Glieder so ausgerichtet, dass der Verbindungspunkt zum vorherigen Glied im Nullpunkt des Koordinatensystems befindet. +Das vollständige visuelle Modell ist in Abbildung \ref{robot_visual} zu sehen. Um die Simulation weiter zu beschleunigen, wurden die Kollisionsboxen des Arms noch weiter vereinfacht, was die Kollisionsüberprüfung dramatisch beschleunigt. Dabei werden stark simplifizierte Formen verwendet, welche das hochqualitative visuelle Modell mit einfachen Formen umfassen. +Das resultierende Modell, welches in Abbildung \ref{robot_collision} dargestellt wird, wird später zur Kollisionserkennung verwendet. Diese Herangehensweise ist nötig, da Kollisionserkennung auf der CPU durchgeführt wird, welche durch komplexe Formen stark verlangsamt wird. @@ -177,49 +288,149 @@ Die Gelenkpositionen sind dabei relative Angaben, welche sich auf das Glied bezi Alle kontrollierbaren Gelenke benötigen auch eine Gelenkachse, welche je nach Gelenktyp die mögliche Beweglichkeit bestimmt. Alle hier erstellten Dateien wurden im Paket \code{iisy_config} zusammengefasst, um diese einfacher wiederauffinden zu können. +\begin{figure}[hpt] +\begin{minipage}{.5\textwidth} +\includegraphics[width=\textwidth]{img/MA-Roboter-Visuell} +\centering +\caption{Visuelles Modell} +\label{robot_visual} +\end{minipage} +\begin{minipage}{.5\textwidth} +\includegraphics[width=\textwidth]{img/MA-Roboter-Kollision} +\centering +\caption{Kollisionsmodell} +\label{robot_collision} +\end{minipage} +\end{figure} \subsection{MoveIt 2 Konfiguration} Das somit erstellte Paket kann nun mit dem neu implementierten MoveIt Configurator um die benötigten Kontrollstrukturen erweitert werden. +Dazu wurde der neue Setupassistent von MoveIt2 verwendet, welcher das Modell analysiert, um es mit für MoveIt benötigten Parameter zu erweitert. + +Die Erstellung des erweiterten Modells mit dem Assistenten funktionierte komplett fehlerfrei, jedoch ließen sich die generierten Dateien nicht nutzen. + +Um die generierten Dateien nutzen zu können, mussten diese weiter angepasst werden. +Dies beinhaltete die korrekte Integration der Roboterdefinitionen im Paket, aber auch zahlreiche Pfadreferenzen auf verwendete Dateien, welche nicht korrekt generiert wurden. +Diese können standartmäßig nicht in Gazebo, RViz und MoveGroup gleichzeitig geladen werden, da diese Programme unterschiedliche Pfadangaben verlangen, was die Nutzung verhindert. + +Eine Möglichkeit zur Lösung des Problems ist die Verwendung von \code{file://}-URIs, welche von allen dieser Programme gelesen werden können. +Jedoch ist hier als Nachteil zu verzeichnen, dass der Moveit Setup Assistent diese URIs nicht lesen kann, was zu Fehlern bei einer Rekonfiguration führen kann. + +Das so erstellte Modell kann ber den Aufruf von \code{ros2 launch iisy_config demo.launch.py} in RViz getestet werden. +Hierfür erscheint das Robotermodell mit mehreren Markern und Planungsoptionen, welche genutzt werden können, um beliebige Bewegungen zu planen und auszuführen. \subsection{Details} Das so erstellte Modell kann nun zur Laufzeit in Gazebo geladen werden. Dafür wird das Paket \code{ros_gz_sim} verwendet, welches das \code{create} Programm beinhaltet. Mit diesem Werkzeuk kann ein Modell unter einem bestimmten Namen anhand einer Datei oder eines übergebenen Strings in Gazebo importiert werden. Das Modell kann dabei über Argumente im Raum verschoben und rotiert werden, falls diese Funktionalität benötigt wird. -Im Modell sind auch die verwendeten Gazebo-Plugins deklariert, welche für die Integration mit dem \code{ros_control} verantwortlich sind. +Im Modell sind auch die verwendeten Gazebo-Plugins deklariert, welche für die Integration mit \code{ros_control} verantwortlich sind. +Das Gazebo-Plugin läd dabei die verwendeten Controller und versorgt diese mit Informationen über den Roboter. + +Die zusätzlichen Programme werden nun in die gazebo_controller.launch.py-Datei \section{Behavior Trees} -Alle Behavior Trees wurden im Paket \code{btree_trees} organisert, welche durch das Paket \code{btree_nodes} gelesen werden. -BehaviorTrees werden in \code{behaviortree_cpp_v3} als .xml-Dateien gespeichert. -Diese Dateien enthalten die Anordnung der Nodes selbst, aber auch weitere Konfigurationsmöglichkeiten in Form von Ein- und Ausgabeschnittstellen. +Alle Behavior Trees wurden im Paket \code{btree} organisert, welches die Bäume im XML-Format und die Implementation der Nodes und umliegenden Infrastruktur enthält. -Solche Schnittstellen können verwendet werden, um Nodes generischer gestalten zu können. -So kann auf feste Parameter in den Nodes selber verzichtet werden, was das erstellen mehrerer Nodes für ähnliche Funktionalitäten verhindert. -Diese Daten können sowohl aus einem String ausgelesen werden, falls die ensprechende Funktion, welche diese in den Zieltyp übersetzt, implementiert wurde. -Aber sie können auch aus dem sogenannten Blackboard entnommen werden. -Das Blackboard ist ein System, welches die Nutzung von Variablen als Parameter für Ein- und Ausgänge erlaubt. -Diese werden im Hintergrund als eine Referenz auf den eigentlichen Wert gespeichert. -Eine solche Funktion erlaubt das weitere Zerlegen von Vorgängen innerhalb des BehaviorTrees. -Solche kleineren Nodes sind durch ihren limitierten Umfang universeller einsetzbar, da sie nur kleinere Teilprobleme betrachten, welche zu komplexeren Strukturen zusammengesetzt werden können. +Für die Umsetzung des Szenarios wurden neue Nodes für den BehaviorTree erstellt. +Diese lassen sich nach Nutzung in verschiedene Gruppen einordnen. -Um die dadurch wachsenden Strukturen besser überblicken zu können, lassen sich Nodes als sogenannte SubTrees abspeichern. -Diese bilden dann in ihrer Gesamtheit eine neue Node, welche im BehaviorTree eingesetzt werden kann. -Um den Einsatz von Variablen innerhalb eines SubTrees zu ermöglichen, besitzt jeder SubTree ein separates Blackboard. -Dadurch kann ein Eingriff in äußere Funktionalität verhindert werden. +\subsubsection{Allgemein nutzbare Nodes} +\begin{description} + \item[GenerateXYPose] + generiert eine Pose in einem durch den \code{area} Parameter angegebenen Bereich. + Um dies zu ermöglichen, wird zuerst die Fläche aller Dreiecke berechnet, welche den Bereich definieren. + Diese werden durch den Gesamtinhalt geteilt, um eine Wichtung der Dreiecke zum Gesamtinhalt zu erreichen. + Nun wird eine Zufallszahl zwischen 0 und 1 gebildet. + Von dieser werden nun die Wichtungen der Dreiecke abgezogen, bis dies Zufallszahl im nächsten abzuziehenden Dreieck liegt. + Nun wird in diesem Dreieck eine zufällige Position ermittelt, welche ber den Ausgabeparameter \code{pose} ausgegeben wird. + \item[InAreaTest] + prüft, ob eine Pose, vorgegeben durch den \code{pose} Parameter, in einer durch den \code{area} Parameter definierten Zone liegt. + Hierfür wird überprüft, ob die X und Y-Werte der Pose in einem der Dreiecke liegen, welche die Area definieren. + Der Rückgabewert ist das Ergebnis dieser Überprüfung, wobei SUCCESS bedeutet, dass sich die Pose in der Area befindet. + \item[OffsetPose] + wird genuzt, um eine Pose im Raum zu bewegen und/oder deren Orientierung zu verändern. + Falls der \code{offset} Parameter gesetzt ist, wird dieser mit dem \code{input} Parameter summiert. + Außerdem wird die Orientierung der Pose auf den \code{orientation} Parameter gesetzt, falls dieser vorhanden ist, was den ursprünglichen Wert überschreibt. + \item[InterruptableSequence] + stellt eine Sequence dar, welche auch nach ihrem Abbruch ihre Position behält. + Dies ist von Nöten, wenn bestimmtes Verhalten unterbrechbar ist, aber zu einem späteren Zeitpunkt fortgesetzt werden soll. + Hierzu wird der Iterator der unterlegenden Sequenz nur erhöht, wenn die untergeordnete Node SUCCESS zurück gibt. + Außerdem wird der Iterator nicht zurückgesetzt, wenn die Ausführung dieser modifizierten Sequenz abgebrochen wird. + \item[WeightedRandom] + ist eine Steuerungsnode, welche mehrere untergeordnete Nodes besitzt. + Dabei werden diese nicht, wie bei anderen Steuerungsnodes üblich, sequentiell ausgeführt. + Anhand einer vorgegebenen Wichtung im \code{weights} Parameter wird eine der untergeordneten Nodes zufällig ausgewählt. + Diese Node wird nun als einzige Node ausgeführt, bis diese den SUCCESS-Status zurück gibt. + Nach dem dieser Status erreicht wurde, wird bei dem nächsten Durchlauf eine neue Node ausgewählt. + Der Rückgabewert ist der Rückgabewert der ausgewählten untergeorneten Node. + \item[IsCalled] + fragt den aktuellen Called-Status des Actors ab, welcher in einigen Szenarien vom Roboter verwendet wird, um den simulierten Menschen zu rufen. + Der Rückgabewert der Node ist dabei SUCCESS, falls der Mensch gerufen wird, oder FAILURE, wenn kein RUF durchgeführt wird. + \item[SetCalledTo] + setzt den aktuellen Called-Status auf den Wert des übergebenen \code{state} Parameters. + Da diese Aktion nicht fehlschlagen kann, liefert diese Node immer SUCCESS als Rückgabewert. + \item[RandomFailure] + generiert eine Zufallszahl von 0 bis 1, welche mit dem \code{failure_chance} Parameter verglichen wird. + Der Rückgabewert ist das Ergebnis des Vergleichs, FAILURE, wenn die Zufallszahl kleiner als der \code{failure_chance} Parameter ist, oder im anderen Falle SUCCESS. +\end{description} -Natürlich sollte es auch möglich sein, Variablen an solche SubTrees zu übergeben. -Diese können, wie auch bei normalen Nodes, einfach als Parameter an den SubTree übergeben werden. -Die Bibliothek \code{behaviortree_cpp_v3} verbindet dann diese Werte und erlaubt die Datenübergabe zu und von dem SubTree. +\subsubsection{Menschenspezifisch} +\begin{description} + \item[ActorAnimation] + wird verwendet, um dem simulierten Menschen eine auszuführende Animation zu senden. + Die Node benötigt zur Ausführung einen Animationsname, welcher im \code{animation_name} Parameter angegeben wird. + Ein optionaler \code{animation_speed} Parameter gibt die Ausführungsgeschwindigkeit vor. + Der Rückgabewert ist SUCCESS, wenn die komplette Ausführung gelang, oder FAILURE, falls diese abgebrochen oder abgelehnt wurde. + \item[ActorMovement] + funktioniert wie eine ActorAnimation, sendet jedoch eine Bewegungsanfrage. + Auch für diese wird ein Animationsname benötigt, welcher im \code{animation_name} Parameter definiert wird. + Jedoch wird für die Synchronisation zur Bewegung ein Diztanzwert bewnötigt, welcher in einem Animationsdurchlauf zurückgelegt wied. + Dieser wird im \code{animation_distance} Parameter übergeben. + Eine Zielpose wird im \code{target} Parameter gesetzt. + Eine Besonderheit dieses Paramerters ist die Verwendung des Null-Quaternions als Richtungsangabe, was die Endrotation auf die Laufrichtung setzt. +\end{description} -\subsection{Asynchrone Nodes} -Da nicht jeder Prozess in einem einzigen Durchlauf des BehaviorTrees abgebildet werden kann, muss die Möglichkeit geschaffen werden, lang anhaltende Prozesse abzubilden. -Dies geschieht in in \code{behaviortree_cpp_v3} durch asynchrone Nodes. +\subsubsection{Roboterspezifisch} +\begin{description} + \item[RobotMove] gibt dem Roboter eine neue Zielposition über den \code{target} Parameter vor. + Bei dieser Node handelt es sich um eine asynchrone Node, welche nur bei der erfolgreiche Ausführung der Bewegung SUCCESS zurück gibt. + \item[SetRobotVelocity] setzt eine neue maximale Geschwindigkeit des Roboters, vorgegeben durch den \code{velocity} Parameter. + Der Rückgabewert ist immer SUCCESS. +\end{description} +Diese beiden roboterspezifischen Nodes beeinflussen im Hintergrund das gleiche System, da Bewegungen bei Geschwindigkeitsänderungen neu geplant und ausgeführt werden müssen. +Dazu wird das letzte Ziel bis zu dessen erreichen vorgehalten, um die Ausführung neu zu starten, fall eine Geschwindigkeitsänderung durchgeführt werden muss. +Um die RobotMove-Node nicht zu unterbrechen, wird diese nur über einen Callback über den Erfolg oder Misserfolg der gesamten Bewegung und nicht über den Erfolg einzelner Teilbewegungen informiert. -Eine asynchrone Node besitzt neben den Zuständen SUCCESS und FAILURE auch noch die beiden anderen Zustände RUNNING und IDLE. +\section{Docker-Compose} +Um Docker für die Verwaltung einer ROS-Installation verwenden zu können, müssen einige Anpassungen vorgenommen werden. +Da viele Anwendungen, unter anderem auch die Simulationsumgebung, eine Desktopumgebung benötigen, muss eine Zugriffsmöglichkeit geschaffen werden. -Der Zustand RUNNING steht dabei für eine Node, welche sich noch in der Ausführung befindet. -So lang dieser Zustand anhält, wird die Node nicht noch ein weiteres Mal gestartet, sondern nur der Zustand abgefragt. +Diese Möglichkeiten können nicht durch Docker allein gelöst werden, da Befehle auf dem Hostsystem ausgeführt werden müssen, um die gewünschten Funktionen zu aktivieren. +Um diese Modifikiationen trotzdem reproduzierbar zu machen, wurde ein Shellscript geschrieben, welches zum Starten des Containers verwendet wird. -Der IDLE-Zustand ist ein besonderer Zustand, welcher nur durch eine vollständige Ausführung erreichbar ist. -Er wird von der Node angenommen, nachdem ein RUNNING Zustand durch entweder SUCCESS oder FAILURE beendet wurde und darf sonst nicht verwendet werden. +Dieses Skript erstellt zuerst die benötigten Verzeichnisse für den Container, falls diese noch nicht existieren. +Danach werden die SSH-Keys des Hosts in den Container kopiert, um eine SSH-Verbindung zu ermöglichen. +Dieser Umweg über SSH ist nötig, da die benötigten Umgebungsvariablen für ROS sonst nicht in allen Fällen gesetzt werden können. +Außerdem werden die benötigten Zugriffe auf den lokalen X-Server durch den Container anhand dessen Hostname erlaubt. +Diese Änderung erlaubt es dem Container, Fenster auf dem Desktop anzeigen zu können, solange die benötigten SysFS-Dateien hereingereicht werden. +Dies geschieht durch Einträge in der compose.yml-Datei, welche diese als ``bind mount'' in den Container hereinreicht. + +Um Zugriff auf die Grafikbeschleunigung des Systems zu erhalten, muss deren Repräsentation im SysFS unter \code{/dev/dri} hineingereicht werden. +Der Zugriff auf die Desktopumgebung, welcher bereits entsperrt wurde, wird nun durch das mounten von \code{/tmp/.X11-unix} erreicht. +Dabei handelt es sich um den Unix-Socket des X11 Displayservers. + +Zum Starten des Containers muss der Befehl \code{./start.sh} im Verzeichnis der Containerinstallation ausgeführt werden, welcher die obengenannten Schritte ausführt und den Container startet. +Eine Verbindung zum Container kann aufgebaut werden, nachdem die Meldung \code{ros_1 | Ready to connect.} in der Konsole erscheint. + +Dafür muss ein SSH-Client eingesetzt werden, welcher eine Verbindung zu der lokalen Netzadresse des Systems mit dem Benutzer \code{ros} aufbauen kann. +Der Port des SSH-Servers wird dabei durch die Deklaration im docker-compose.yaml an das Hostsystem durchgereicht. +Hierbei ist zu beachten, dass der SSH-Server im Container auf Port 2222 ausgeführt wird, was bei der Verbindung beachtet werden muss. + +Nach der Verbindung wird automatisch die ROS2-Umgebung eingerichtet, welche sofort nach Verbindungsaufbau genutzt werden kann. +Um die erstellten Pakete zu kompillieren, kann das Skript \code{build.sh} im \code{workspace}-Verzeichnis verwendet werden. + +Dieses Skript nutzt \code{colcon} um alle Pakete in diesem Workspace zu erstellen. +Dabei wird auch noch eine \code{compile_commands.json}-Datei erstellt, welche von einigen IDE's zur Syntaxvervollständigung genutzt werden. +Außerdem wird der Event-Handler \code{console_cohesion+} verwendet, welcher das Lesen der Kompillierausgabe erleichtert.