diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f46f952 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "features/common"] + path = features/common + url = ../mac.git diff --git a/features/content/Feature_separation.ods b/features/content/Feature_separation.ods new file mode 100644 index 0000000..799334d Binary files /dev/null and b/features/content/Feature_separation.ods differ diff --git a/features/content/definition.tex b/features/content/definition.tex new file mode 100644 index 0000000..a25f71d --- /dev/null +++ b/features/content/definition.tex @@ -0,0 +1,23 @@ +\chapter{Definition} + +In the initial design step we decided on combining two motion systems. +One is the suspended cable system, this can easily cover the large board. +However it lacks precision and this is where a small SCARA comes in to action. +This arm provides speed and accuracy. +And if the next bit of whiteboard is out of reach, the cable bot will move the arm to a new position. + +These two features are easy to define. +Thus we have the SCARA and the cable system. +So at this point we would just attach a marker to the arm and write on the board. +However, now we cannot wipe text of the board. +So another feature would be some toolchanger that can switch to the wiper. +And, offcourse, later back to the marker, posibly with a different color. + + +This brings us to the following features: +\begin{itemize} +\item SCARA +\item Cable system +\item Toolchange +\item Wiper +\end{itemize} diff --git a/features/content/separation.tex b/features/content/separation.tex new file mode 100644 index 0000000..1a670f7 --- /dev/null +++ b/features/content/separation.tex @@ -0,0 +1,92 @@ +\chapter{Separation of Concerns} +\label{chap:separation} +We have an initial design and in this step we will define features and subsystems. +To structure this process we will use a tiny bit of the RobMoSys approach. +With that we will define the mission, tasks, skills, functions and subsystems. +The subsystem combines some layers of RobMoSys as they are to specific for the scope of this thesis. + +\section{RobMoSys} +The mission is clear and has already been stated before. +The system shall be able to write a tweet on a whiteboard. +\autoref{fig:robmosys} shows how the mission organized. +This separation is not created to be the most optimal as it is based on our initial design. +The three skills of move marker, move wiper and move carriage are redundant as they all have movement in the same plane. +One could say that this overcomplicates the design. +However, we chose for some complexity in the design, which creates dependency between subsystems, such that the design method can be tested. + +\begin{figure*} + \centering + \includegraphics[width=0.8\paperwidth]{graphics/robmosys.pdf} + \caption{Separation of the mission into tasks, skills, functions and subsystems based on a simplification of RobMoSys.} + \label{fig:robmosys} +\end{figure*} + +RobMoSys creates a top-down approach which results in the different subsystems. +The design method specifies that we want to implement feature by feature. +From \autoref{fig:robmosys} we can conclude that each step in the graph represents a sub-feature. +It might be a piece of hardware, control law or interface, they can all be classified as features of some sort. +Furthermore, it automatically generates the dependency tree as well. +As we cannot write a character somewhere on the board if we cannot move the marker. + +\section{Feature Definition and Dependencies} +In the previous section we discussed that we have loads of sub-features. +We could implement all these features one by one. +But as some of them have single dependencies they could be combined. +The function 'Move wiper on board' is directly linked to the skill 'Wipe area' and could easily combined. +Especially as the skill is a direct test case for the function and as test cases are already required this is a valid optimization. + +\section{Feature specifications} +The specifications that are listed in the system specifications document have to be distributed among the features. +We have grouped some specifications as they influence the same feature-group. + +\subsection{Reach} +The first grouping is for the reach of the robot. +From the specifications document we find three specifications which influence the possible position of the carriage: +\begin{itemize} + \item The Writer shall be able to write at least 50 characters per line. + \item The Writer shall be able to write at least 5 lines of text. + \item If the Writer is not wiping or writing then the Writer shall not obstruct the view of the whiteboard. +\end{itemize} +The first two specify the minimum reach of the carriage. +The third specifies that the carriage has to move out of the way. + +\autoref{fig:reach} shows the sub-features that cover the behavior of the carriage. +We have to take these three into account when we will develop these sub-features. + +\begin{marginfigure} + \includegraphics[width=0.8\linewidth]{graphics/reach.pdf} + \caption{Sub-features that are responsible for reach related specifications} + \label{fig:reach} +\end{marginfigure} + +\subsection{Character Writing} +The sub-systems shown in \autoref{fig:char} are responsible for getting the characters on the board. +The character writing specifications are given as: +\begin{itemize} + \item The Writer shall plot characters with a size that is readable from 4 meters for a person with good eyesight. + \item The Writer shall plot in a regular used font with corresponding character spacing. + \item While writing, the Writer shall have a writing speed of at least 1 character per second. +\end{itemize} +The later one covers the writing speed. +The speed does not only depend on the time required for a single char. +It also depends on moving to the position of the next character. +This is overlaps with the grouping for the reach specification as described in the previous subsection and can be seen in \autoref{fig:reach} +So we will split this into the following sub-specifications: +\begin{itemize} + \item While writing, the SCARA shall have a writing speed of at least 1.5 characters per second. + \item When the Carriage/base of the SCARA is at a static position, the SCARA shall be able to write at least 3 characters at that position. + \item When the SCARA finished writing at their current position, the Carriage shall move the SCARA to it's next position where it can write the subsequent characters. + \item When the SCARA has to be moved to a new position, the Carriage shall perform this movement within 1 second. +\end{itemize} + +\begin{marginfigure} + \includegraphics[width=0.8\linewidth]{graphics/char.pdf} + \caption{Sub-features that are responisible for character writing specifications} + \label{fig:char} +\end{marginfigure} + +\subsection{Tooling} +For the system to be able to switch from writing to wiping, there must be some toolchanging. +The general idea is that the end-effector can hold a tool and for a marker it shall be able to press it on the board. + + diff --git a/features/content/specification.tex b/features/content/specification.tex new file mode 100644 index 0000000..28502c6 --- /dev/null +++ b/features/content/specification.tex @@ -0,0 +1,2 @@ +\chapter{Specifications} +This chapter will specify each feature more precisely diff --git a/features/feature_definition.tex b/features/feature_definition.tex new file mode 100644 index 0000000..1ddb3ea --- /dev/null +++ b/features/feature_definition.tex @@ -0,0 +1,29 @@ +\documentclass[final,english,titlepage,nomath]{siltex-report} +\include{common/texfiles/preamble} + +\title{Feature Definition} +%\subtitle{Thesis Proposal} +\course{} +\faculty{\large Electrical Engineering, Mathematics and Computer Science} +%\supervisor{% +% Dr. ir. J.F. Broenink \\ +% Ir. T.G. Broenink +%} +\author{% + Wouter Horlings +} + +\begin{document} +\maketitle +\makerro + +\tableofcontents + +\include{common/texfiles/acronyms} + +%\include{introduction} +\include{separation} +\include{definition} + +\printbibliography +\end{document} diff --git a/features/graphics/char.tex b/features/graphics/char.tex new file mode 100644 index 0000000..4aa1992 --- /dev/null +++ b/features/graphics/char.tex @@ -0,0 +1,24 @@ +\documentclass{standalone} +\usepackage{tikz} +\usetikzlibrary {arrows.meta,graphs,graphdrawing} \usegdlibrary {layered} + +\begin{document} + +\begin{tikzpicture}[nodes={text height=.7em, text width=1.8cm, align=center, +draw=black!20, thick, fill=white, font=\footnotesize}, +>={Stealth[round,sep]}, rounded corners, semithick] + +\graph [layered layout, level distance=1.5cm, sibling sep=.5em, sibling distance=1.5cm, sweep crossing minimization] { + + "Write a char at position" -> { "Move marker on board", "Lift Marker" }; + {"Lift Marker", "Move marker on board"} -> "SCARA"; +}; + + % \graph [layered layout] { + % 1 -> 2 -> 3 -> 4; + % }; + + + +\end{tikzpicture} +\end{document} diff --git a/features/graphics/reach.tex b/features/graphics/reach.tex new file mode 100644 index 0000000..d9c037a --- /dev/null +++ b/features/graphics/reach.tex @@ -0,0 +1,16 @@ +\documentclass{standalone} +\usepackage{tikz} +\usetikzlibrary {arrows.meta,graphs,graphdrawing} \usegdlibrary {layered} + +\begin{document} + +\begin{tikzpicture}[nodes={text height=.7em, text width=2.5cm, align=center, +draw=black!20, thick, fill=white, font=\footnotesize}, +>={Stealth[round,sep]}, rounded corners, semithick] + +\graph [layered layout, level distance=1.5cm, sibling sep=.5em, sibling distance=1.5cm, sweep crossing minimization] { + "Move to position" -> "Move carriage" -> "Carriage"; +}; + +\end{tikzpicture} +\end{document} diff --git a/features/graphics/robmosys.tex b/features/graphics/robmosys.tex new file mode 100644 index 0000000..e44f30e --- /dev/null +++ b/features/graphics/robmosys.tex @@ -0,0 +1,38 @@ +\documentclass{standalone} +\usepackage{tikz} +\usetikzlibrary {arrows.meta,graphs,graphdrawing} \usegdlibrary {layered} + +\begin{document} + +\begin{tikzpicture}[nodes={text height=.7em, text width=1.8cm, align=center, +draw=black!20, thick, fill=white, font=\footnotesize}, +>={Stealth[round,sep]}, rounded corners, semithick] + +\graph [layered layout, level distance=1.5cm, sibling sep=.5em, sibling distance=1.5cm, sweep crossing minimization] { + "Mission" -> "Task" -> "Skill" -> "Function" -> "Subsystem"; + + "Draw a tweet on a board" -> "Writing"; + "Writing" -> { "Write a char at position", "Hold Marker", "Move to position" }; + "Write a char at position" -> { "Move marker on board", "Lift Marker" }; + "Hold Marker" -> "Switch Tools"; + "Move marker on board" -> "SCARA"; + "Lift Marker" -> "End-effector"; + + "Draw a tweet on a board" -> "Wiping"; + "Wiping" -> { "Wipe Area", "Hold Wiper", "Move to position" }; + "Hold Wiper" -> "Switch Tools"; + "Move Wiper on Board" -> SCARA; + "Wipe Area" -> "Move Wiper on Board"; + + "Move to position" -> "Move carriage" -> "Carriage"; + "Switch Tools" -> {"End-effector", "SCARA"}; +}; + + % \graph [layered layout] { + % 1 -> 2 -> 3 -> 4; + % }; + + + +\end{tikzpicture} +\end{document} diff --git a/features/robmosys.dia b/features/robmosys.dia new file mode 100644 index 0000000..e149a24 Binary files /dev/null and b/features/robmosys.dia differ