A4MCAR - Sphinx (reST) - based how-to-setup documentation source files added
Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/a4mcar/documentation/a4mcar_documentation.pdf b/a4mcar/docs/documentation/a4mcar_documentation.pdf
similarity index 100%
rename from a4mcar/documentation/a4mcar_documentation.pdf
rename to a4mcar/docs/documentation/a4mcar_documentation.pdf
Binary files differ
diff --git a/a4mcar/docs/howtosetup/Makefile b/a4mcar/docs/howtosetup/Makefile
new file mode 100644
index 0000000..7882c72
--- /dev/null
+++ b/a4mcar/docs/howtosetup/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = python -msphinx
+SPHINXPROJ = A4MCAR
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
diff --git a/a4mcar/docs/howtosetup/source/conf.py b/a4mcar/docs/howtosetup/source/conf.py
new file mode 100644
index 0000000..09dfe50
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/conf.py
@@ -0,0 +1,174 @@
+# -*- coding: utf-8 -*-
+#
+# A4MCAR documentation build configuration file, created by
+# sphinx-quickstart on Mon Jul 24 20:56:01 2017.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['a4mcartemplates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'A4MCAR How-To-Setup'
+copyright = u'2017, FH Dortmund'
+author = u'Mustafa Özçelikörs'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = u'1.0'
+# The full version, including alpha/beta/rc tags.
+release = u'1.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This patterns also effect to html_static_path and html_extra_path
+exclude_patterns = []
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = False
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+#html_theme = 'alabaster'
+
+html_theme = "sphinx_rtd_theme"
+html_theme_path = ["_themes", ]
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#
+# html_theme_options = {}
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['a4mcarstatic']
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# This is required for the alabaster theme
+# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
+html_sidebars = {
+ '**': [
+ 'about.html',
+ 'navigation.html',
+ 'relations.html', # needs 'show_related': True theme option to display
+ 'searchbox.html',
+ 'donate.html',
+ ]
+}
+
+
+# -- Options for HTMLHelp output ------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'A4MCARdoc'
+
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+ # The paper size ('letterpaper' or 'a4paper').
+ #
+ # 'papersize': 'letterpaper',
+
+ # The font size ('10pt', '11pt' or '12pt').
+ #
+ # 'pointsize': '10pt',
+
+ # Additional stuff for the LaTeX preamble.
+ #
+ # 'preamble': '',
+
+ # Latex figure (float) alignment
+ #
+ # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ (master_doc, 'A4MCAR.tex', u'A4MCAR How-to-Setup Documentation',
+ u'Mustafa Özçelikörs', 'manual'),
+]
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ (master_doc, 'a4mcar', u'A4MCAR How-to-Setup Documentation',
+ [author], 1)
+]
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ (master_doc, 'A4MCAR', u'A4MCAR How-to-Setup Documentation',
+ author, 'A4MCAR', 'One line description of project.',
+ 'Miscellaneous'),
+]
+
+
+
diff --git a/a4mcar/docs/howtosetup/source/content/hardware.rst b/a4mcar/docs/howtosetup/source/content/hardware.rst
new file mode 100644
index 0000000..cb97180
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/hardware.rst
@@ -0,0 +1,36 @@
+.. toctree::
+ :glob:
+
+Hardware Setup
+###############
+
+A4MCAR is featured with two controllers: (1)- High-level controller controller that is equipped with a `Raspberry Pi <http://www.raspberrypi.org>`_, with applications ported to Raspbian OS on ARM Cortex A53 processor, and (2)- Low-level controller based on an `XMOS xCORE-200 ExplorerKIT development kit <http://www.xmos.com>`_ that is equipped with a 16-core microcontroller.
+
+.. figure:: images/boards.jpg
+ :width: 80%
+ :alt: Development boards used in A4MCAR
+ :figclass: align-center
+ :align: center
+
+ Development boards used in A4MCAR
+
+Development boards in A4MCAR are interfaced with many peripherals for different purposes. A brief look of how devices are interfaced and low-level schematics are given below for reference.
+
+.. figure:: images/hwoverview.png
+ :width: 80%
+ :alt: Hardware overview of A4MCAR
+ :figclass: align-center
+ :align: center
+
+ Hardware overview of A4MCAR
+
+.. figure:: images/RCCAR_Schematics.png
+ :width: 100%
+ :alt: A4MCAR Low-Level Schematics
+ :figclass: align-center
+ :align: center
+
+ A4MCAR Low-level Schematics (Click to Enlarge)
+
+
+
diff --git a/a4mcar/docs/howtosetup/source/content/images/RCCAR_Schematics.png b/a4mcar/docs/howtosetup/source/content/images/RCCAR_Schematics.png
new file mode 100644
index 0000000..1ed367b
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/RCCAR_Schematics.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/a4mcar.png b/a4mcar/docs/howtosetup/source/content/images/a4mcar.png
new file mode 100644
index 0000000..4b2d5c9
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/a4mcar.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/a4mcarfilesystem.png b/a4mcar/docs/howtosetup/source/content/images/a4mcarfilesystem.png
new file mode 100644
index 0000000..7d22159
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/a4mcarfilesystem.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/androidapp.png b/a4mcar/docs/howtosetup/source/content/images/androidapp.png
new file mode 100644
index 0000000..d554367
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/androidapp.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/app4mcdesign.png b/a4mcar/docs/howtosetup/source/content/images/app4mcdesign.png
new file mode 100644
index 0000000..923f4ba
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/app4mcdesign.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/app4mcenv.png b/a4mcar/docs/howtosetup/source/content/images/app4mcenv.png
new file mode 100644
index 0000000..c258355
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/app4mcenv.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/app4mcmodel.png b/a4mcar/docs/howtosetup/source/content/images/app4mcmodel.png
new file mode 100644
index 0000000..5030cb1
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/app4mcmodel.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/boards.jpg b/a4mcar/docs/howtosetup/source/content/images/boards.jpg
new file mode 100644
index 0000000..530c7d8
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/boards.jpg
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/displaybuttons.png b/a4mcar/docs/howtosetup/source/content/images/displaybuttons.png
new file mode 100644
index 0000000..6752b50
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/displaybuttons.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/displays.png b/a4mcar/docs/howtosetup/source/content/images/displays.png
new file mode 100644
index 0000000..2d0965e
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/displays.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/fhidial.jpg b/a4mcar/docs/howtosetup/source/content/images/fhidial.jpg
new file mode 100644
index 0000000..cdf7d4c
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/fhidial.jpg
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/hwoverview.png b/a4mcar/docs/howtosetup/source/content/images/hwoverview.png
new file mode 100644
index 0000000..dde708d
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/hwoverview.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/mechanicaloverview.png b/a4mcar/docs/howtosetup/source/content/images/mechanicaloverview.png
new file mode 100644
index 0000000..fc950e2
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/mechanicaloverview.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/rpicomponents.png b/a4mcar/docs/howtosetup/source/content/images/rpicomponents.png
new file mode 100644
index 0000000..54fb47c
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/rpicomponents.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/images/tasksoverall.png b/a4mcar/docs/howtosetup/source/content/images/tasksoverall.png
new file mode 100644
index 0000000..30dd065
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/images/tasksoverall.png
Binary files differ
diff --git a/a4mcar/docs/howtosetup/source/content/intro.rst b/a4mcar/docs/howtosetup/source/content/intro.rst
new file mode 100644
index 0000000..c72a44a
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/intro.rst
@@ -0,0 +1,154 @@
+.. toctree::
+ :glob:
+
+
+Introduction
+===============
+
+********************
+Scope
+********************
+
+This application manual is dedicated to explaining how to set up applications on A4MCAR. For more detailed documentation towards the research goals and tool support, it is advised to check our research documentation.
+
+*********************
+What is A4MCAR?
+*********************
+
+A4MCAR is a distributed and multi-core demonstrator RC-Car that is used in the demonstration of parallel applications on real embedded systems. It is originally developed to test and evaluate APP4MC tool. A4MCAR is a project that is developed in FH Dortmund IDiAL and is supported under Project AMALTHEA4public. The project is also granted by The Eclipse Foundation and Google Inc. during the participation to Google Summer of Code 2017 event. During the event, the developed applications have been distributed in open-source manner under Eclipse Public License (EPL). Thus, we hope to help those in the open-source community who are willing to address concurrency in their multi-core embedded applications with the help of the GSoC event.
+
+.. figure:: images/a4mcar.png
+ :width: 80%
+ :alt: A4MCAR
+ :figclass: align-center
+ :align: center
+
+ A4MCAR
+
+The demonstrator system features not only low level functionalities such as sensor and motor driving but also high level features such as image processing, camera streaming, server-based wireless driving via Web, bluetooth connectivity via Android application, system core monitoring and analysis features and touchscreen UI. Our experiments along the multi-task heterogeneous demonstrator A4MCAR show that using APP4MC results instead of OS-based or sequential implementations on a distributed heterogeneous system significantly improves its responsiveness in order to potentially reduce energy consumption and replaces error prone manual constraint considerations for mixed-critical applications.
+
+*********************
+What is APP4MC?
+*********************
+While there exist some commercial tools that provide easement in the parallel software development, recent study done in Germany, namely `AMALTHEA4public <http://www.amalthea-project.org/>`_, aims to provide planning and tracing tools especially for multi-core developments in automotive domain with several open source development tools.
+
+`The APP4MC project <http://www.eclipse.org/app4mc>`_ provides an Eclipse-based tool chain environment and a de-facto model standard to integrate tools for all major design steps in the multi- and many-core development phase. A basic set of tools are available to demonstrate all the steps needed in the development process. The APP4MC project aims at providing according to [App4mcProposalEclipse]_:
+
+* A basis for the integration of various tools into a consistent and comprehensive tool chain.
+* Extensive models for timing behaviour, software, hardware, and constraints descriptions (used for simulation / analysis and for data exchange).
+* Editors and domain specific languages for the models.
+* Tools for scheduling, partitioning, and optimizing of multi- and many-core architectures.
+
+APP4MC targets multi-core and many-core platforms, while the main focus is the optimization of embedded multi-core systems . Due to its focus, APP4MC is partnered with many automotive OEMs and part suppliers that deal with embedded software engineering. Furthermore, it supports interoperability and extensibility and unifies data exchange in cross-organizational projects. Additionaly, since APP4MC uses Eclipse platform to its purposes, the development environment has a complete open-source nature under `Eclipse Public License (EPL) <https://www.eclipse.org/legal/epl-v10.html>`_.
+
+Eclipse APP4MC platform editor window can be seen in the following figure:
+
+.. figure:: images/app4mcenv.png
+ :width: 80%
+ :alt: Eclipse APP4MC platform Editor Window
+ :figclass: align-center
+ :align: center
+
+ Eclipse APP4MC platform Editor Window
+
+In the figure, Explorer window is used for finding models, performing operations such as partitioning, task generation, mapping, and model migration. The tree editor shows the hierarchical structure of the selected AMALTHEA model, whereas the Element Properties window is used for editing the properties of AMALTHEA model elements selected in the Tree Editor.
+
+APP4MC is a project that has a lot of synergies with its predecessor AMALTHEA4public project. APP4MC uses AMALTHEA models, which are XML models that describe software components and hardware platforms. Main operation of APP4MC involves modeling the system by creating AMALTHEA models and performing partitioning, mapping, optimization on parallel programs. APP4MC also has the ability to trace simulate parallel programs. Basic ingredients for an AMALTHEA model is illustrated in the following figure:
+
+.. figure:: images/app4mcmodel.png
+ :width: 80%
+ :alt: AMALTHEA Model for APP4MC
+ :figclass: align-center
+ :align: center
+
+ AMALTHEA Model for APP4MC
+
+It is seen that AMALTHEA model can contain software decisions, costs, constraints, as well it can contain hardware platform information. Constraint models are used to define process groups to make sure some processes belong together. Furthermore, a target platform dependency of a process group is also modeled using constraints model.
+
+An illustration of how parallel software can be designed for embedded multi-core platforms are given in the :ref:`app4mcdesign`. The following remarks can be made regarding the design procedure with APP4MC platform:
+
+* **Modeling**: Design of a parallel software starts with modeling in APP4MC. An AMALTHEA model is constructed that involves three seperate models: (1)- hardware model, (2)-software model, (3)-constraints model. In the hardware model, each distributed ECU is modeled in a hierarchical manner. Hardware model involves information such as number of processor cores, system clock frequency for processors, and memory details. In the software model, runnables are modeled. Runnables are found with the help of binary analysis tools and by using the decomposition technique mentioned in the Section \ref{designtech}. Each runnable are modeled by making use of information such as granularity (number of instructions) and label accesses (memory read-write). In the early development stages, model contains a rough model of the software, but the model is constantly improved by using the Tracing functionality of the APP4MC as well it can be improved by using several other tracing software.
+
+* **Partitioning**: Partitioning stage in APP4MC-aided parallel design corresponds to identification of initial tasks. After an initial AMALTHEA model is constructed, the one can perform partitioning in APP4MC by simply selecting the model and pressing the "Perform Partitioning" button. At this stage, APP4MC will analyze the runnables and runnable label accesses in order to suggest how tasks should look like for a balanced parallel distribution. APP4MC uses two partitioning algorithms that are ESSP (Earliest Start Schedule Partitioning) (performed by default) and CPP (Critical Path Partitioning) in order to find the partitions of the system. ESSP and CPP algorithms are based on the Graph Theory which is commonly used in hardware and software co-design. Partitioning algorithms are used for analysis of the granularity and communication costs of individual runnables and create best possible parallelized partitions.
+
+* **Task Generation**: Initial tasks (partitions) are finalized by pressing "Generate Tasks" button. By making use of the dependencies between partitions and by grouping them, APP4MC generates a model that contains the desired amount of tasks with the help of "Task Generation" phase.
+
+* **Mapping (with Simulation and Optimization)**: As known, mapping is the stage of placing the software distributions (tasks, processes, threads) into the processors. By making use of the hardware capabilities and using optimization strategies (such as Integer Linear Programming), APP4MC is able to find a mapping model of the system. The utilization details of the simulations will be seen at the end of the mapping stage.
+
+* **Code Generation**: Since APP4MC provides model-based development, code generation features for C language are available. If desired, APP4MC generates tasks that are written in C language by using the AMALTHEA system model.
+
+* **Tracing**: By making use of binary tracing, AMALTHEA trace model can be observed and can be re-used to update the system model.
+
+.. _app4mcdesign:
+.. figure:: images/app4mcdesign.png
+ :width: 80%
+ :alt: Illustration of how parallel software are designed using APP4MC platform
+ :figclass: align-center
+ :align: center
+
+ Illustration of how parallel software are designed using APP4MC platform
+
+APP4MC promises beneficial set of tools for embedded parallel software development. However, the demonstration of its features is needed for further improvement. Therefore, in this work APP4MC is used for system parallelization for A4MCAR, a demonstrator RC-Car.
+
+****************************
+Objectives of A4MCAR Project
+****************************
+
+With A4MCAR project, we aim to investigate and evaluate APP4MC's performance with a real-world distributed multi-core system in several aspects. The objectives of this project are as follows:
+
+* Development of a distributed multi-core demonstrator for the APP4MC platform that involves typical automotive application features.
+* Investigation of new trends in parallel software development (such as Real-time Linux parallel programming, POSIX threads, RTOS, evaluation methods etc.)
+* Researching techniques to retrieve information (number of instructions, communication costs) and system trace from platforms such as xCORE and Linux to achieve precise modelling with APP4MC.
+* In order to achieve optimization goals such as reduced energy consumption and reduced resource usage, different affinity constrained software distributions will be evaluated and energy features will be invoked to see if the goals can be achieved.
+* Developing a basic online parallelization evaluation software that will retrieve scheduling properties such as slack times, execution times, and deadlines from all the processes and that will tell which deadlines were met and which not. Also, the software distribution assessment is in focus as well as investigating methods to develop schedulable and traceable threads and processes.
+* Recording detailed system traces in order to provide offline software evaluation and consequently figuring out means to balance the load on cores.
+* Comparing the conventional schedulers of non-constrained affinity distribution (such as a Linux OS scheduler) to the affinity constrained distribution from APP4MC to see if performance can be improved.
+
+With the help of the A4MCAR project, it is intended that the Real-time Linux community will benefit from the published libraries and documentation that involve code snippets and information instructions on how to develop more optimized distributed and parallel software. Furthermore, the Eclipse APP4MC community will benefit from the A4MCAR via advanced tool support for RPI developments, open source example applications, and validations of APP4MC parallelization results in order to create a better tooling available to the public. Those results can be used to assess and compare different parallelization scenarios and consequently identify optimal solutions regarding timing efficiency for the A4MCAR. Thereby, a point of reference can be given as well as an easy starting point for developers approaching parallelism with their developments.
+
+
+*******************************
+A4MCAR Methodology and Features
+*******************************
+
+As A4MCAR targets automotive industry and parallelization studies done by APP4MC, it features not only sensing and actuation related features but also applications that would help with task to core distributions and parallelization performance evaluation. One could see the featured applications for the A4MCAR in :ref:`tasksoverall`.
+
+.. _tasksoverall:
+.. figure:: images/tasksoverall.png
+ :width: 100%
+ :alt: Applications developed and/or maintained for A4MCAR
+ :figclass: align-center
+ :align: center
+
+ Applications developed and/or maintained for A4MCAR
+
+In the figure, it is seen that the low level module of A4MCAR, built using xCore-200 eXplorerKIT targets mostly actuation and sensing related applications. The full list of tasks developed for the low-level module includes:
+
+* Core monitoring applications for each tile (two exist) that calculates the average core usages.
+* Bluetooth task to configure bluetooth module in slave mode and receive data over UART interface.
+* Proximity measurement task that obtaines the distance sensor information from four SR-04 sensors over an I2C sensor network.
+* Speed control task in order to use PWM to drive speed controlling motor.
+* Steering task that controls a servo motor using PWM signaling in order to steer the A4MCAR using external inputs.
+* Light system task in order to control a light module for certain conditions.
+* Ethernet server task to maintain a TCP server for data reception and transmission from high level module.
+* TCP task and several other ethernet configuration related tasks to configure ethernet module (PHY) drivers and establish proper TCP connection.
+
+In order to investigate parallelization outcomes on Real-time Linux and make use of high level features such as web server, image processing and touchscreen interface high-level module is introduced to the system. High-level module is designed so that it can communicate with low-level module over TCP in order to send driving information and retrieve core information from low-level module. It is important to mention that high-level module uses Raspberry Pi 3 in order to achieve high level tasks using a robust Debian-based OS, namely Raspbian. Although the features of the high-level module is illustrated in the following figure, full feature list can be given as follows:
+
+* Core monitoring application that calculates the average core usages on each core.
+* Image processing application that helps to find a traffic cone.
+* Apache Web Server that is used to host a web page which shows average core usage, show Raspberry Pi 3 camera (Raspicam) stream and helps to drive the A4MCAR via web page controls.
+* Ethernet client application that writes handles data transmission and reception to and from server using file operations and data parsing.
+* Camera and streaming application that starts the Raspicam and maintains the stream using configuration parameters such as resolution, quality, frame rate, port and etc.
+* A webpage which is used for driving the A4MCAR as well as display core usages on each core and Raspicam stream.
+* A touchscreen display application which is used for displaying all cores and their utilization, starting and killing all applications on high-level module, allocation of processes on high-level module to cores dynamically, visualization of timing related performance indicators such as average slack time and deadline misses percentage, selecting different distributions, and configuration of the IP addresses on high-level module.
+* Dummy load processes that perform random matrix multiplication in order to find performance indicators in full utilization.
+* Several Linux processes that run Linux OS kernel and VNC server process that provides PC connection via SSH connection.
+
+*******************************
+Future Developments
+*******************************
+
+Future developments involve AGL (Automotive Grade Linux) integration of the applications and IoT-relevant applications.
+
+.. [App4mcProposalEclipse] https://projects.eclipse.org/proposals/app4mc
diff --git a/a4mcar/docs/howtosetup/source/content/more.rst b/a4mcar/docs/howtosetup/source/content/more.rst
new file mode 100644
index 0000000..4c7f445
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/more.rst
@@ -0,0 +1,8 @@
+.. toctree::
+ :glob:
+
+
+More Information
+#################
+
+More information on A4MCAR project is found in the ``docs`` folder. Clone A4MCAR's repository to check out comprehensive documentation: :ref:`cloneour`.
\ No newline at end of file
diff --git a/a4mcar/docs/howtosetup/source/content/software.rst b/a4mcar/docs/howtosetup/source/content/software.rst
new file mode 100644
index 0000000..884a99e
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/content/software.rst
@@ -0,0 +1,253 @@
+.. toctree::
+ :glob:
+
+
+
+Software Setup
+###############
+
+.. _cloneour:
+
+*************************************************
+Downloading A4MCAR applications from the Git repo
+*************************************************
+
+The A4MCAR's software is distributed in an open-source repository. To clone it to your system please use the following command.
+
+.. note:: Note that in this documentation it is assumed that you download your a4mcar folder to the ``/home/pi`` directory.
+
+.. note:: You should have ``git`` installed. Run ``sudo apt-get install git`` if you don't have it.
+
+.. code-block:: bash
+ :linenos:
+
+ git clone https://git.eclipse.org/r/app4mc/org.eclipse.app4mc.examples
+
+Then, move a4mcar folder to the ``/home/pi`` directory by running the following:
+
+.. code-block:: bash
+ :linenos:
+
+ mv org.eclipse.app4mc.examples/a4mcar/ /home/pi
+
+*********************
+Provided Filesystem
+*********************
+
+.. figure:: images/a4mcarfilesystem.png
+ :width: 100%
+ :alt: A4MCAR Filesystem
+ :figclass: align-center
+ :align: center
+
+ A4MCAR Filesystem
+
+*******************************
+High-Level Applications Setup
+*******************************
+
+Raspberry Pi Basic Setup
+========================
+
+In order to install the high level applications to the `Raspberry Pi 3 <https://www.raspberrypi.org/products/raspberry-pi-3-model-b/>`_, several preparations should be made. In order to boot a Raspberry Pi 3 with a Raspbian Jessie distribution, one should use the `Raspbian Jessie Download Link <https://downloads.raspberrypi.org/raspbian_latest>`_.
+
+After the Raspbian image is downloaded, a disk imager software could be used to burn the image to an SD card. To do that you can follow the instructions given in `this link <https://www.raspberrypi.org/documentation/installation/installing-images/windows.md>`_.
+
+Access Point Setup
+==================
+
+For the convenient development, Raspberry Pi 3 should be set up as an access point. The access point helps regarding connecting to the Raspberry Pi's shell via SSH for entering Linux commands.
+
+To set up the access point, the guidelines given in `PolarSys Rover Raspberry Pi Configuration Doc Step 1.4 <https://github.com/gaelblondelle/PSysRoverInitialContrib/blob/master/documentation/c_getting_started/org.polarsys.rover.c.getting_started/raspberry_pi_configuration.asciidoc#step-14---network-connections>`_ can be followed.
+
+.. _overallsetup:
+
+Installation of A4MCAR's high-level application and its dependencies
+====================================================================
+
+Automatic Setup and Installation
+--------------------------------
+
+Provided applications involve a setup script that can be used to install required dependencies manually. To execute the script, run:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo bash /home/pi/a4mcar/high_level_applications/setup_high_level_applications.sh
+
+Manual Setup and Installation
+------------------------------
+
+Installation of Some Useful Applications
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+A4MCAR requires some third party software during both development and application execution. These applications could be listed as follows:
+
+* ``git`` is a tool that is used for cloning repositories to your computer.
+
+* ``python-pip`` is a package that is used for installing python modules.
+
+* ``cmake`` is a very easy-to-use tool that generates Makefiles very conveniently.
+
+* ``build-essential`` package helps regarding compiling applications using GNU/Linux systems.
+
+* ``python-prctl`` package is used in A4MCAR for registering thread names with Python.
+
+* Also, python development modules and resources should be installed: ``python-dev``, ``python3-dev``, ``python-pkg-resources``, ``python3-pkg-resources``.
+
+
+You should install them using:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo apt-get update
+ sudo apt-get install python-dev python3-dev python-pkg-resources python3-pkg-resources
+ sudo apt-get install git build-essential python-prctl python-pip cmake
+
+
+Cloning Necessary Modules
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+A repository is present for providing necessary dependencies for the A4MCAR project's high-level applications. This repository should be cloned and installations should be carried out using this documentation.
+
+To clone the repository,
+
+.. code-block:: bash
+ :linenos:
+
+ cd ~/Downloads
+ sudo git clone https://gitlab.pimes.fh-dortmund.de/RPublic/a4mcar_required_modules.git
+
+
+Using virtkey
+^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+After cloning necessary modules, you should execute the following command to move the virtkey module to where it is used.
+
+.. code-block:: bash
+ :linenos:
+
+ sudo cp -r ~/Downloads/a4mcar_required_modules/high_level_applications/virtkeyboard/* /home/$USER/a4mcar/high_level_applications/apps/touchscreen_display/
+
+
+Camera and Streaming Setup
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+In order to set-up the Raspberry Pi camera and the streaming application ``mjpg-streamer``, following steps should be followed:
+
+First, you need to enable the Raspberry Pi camera from the OS. To do that, type
+
+.. code-block:: bash
+ :linenos:
+
+ sudo raspi-config
+
+A configuration screen should appear. Here, select ``Advanced`` >> ``Enable Camera`` and then save and exit from the screen.
+
+To stream using Raspberry Pi camera, an experimental third-party streamer module ``mjpg-streamer-experimental`` is used.
+
+First, start by installing the dependencies and carrying out other necessary steps:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
+ sudo ln -s /usr/include/linux/videodev2.h /usr/include/videodev.helps
+
+Now, we should install the ``mjpg-streamer-experimental``:
+
+
+Installing psutil from Python for Core Monitoring
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+.. warning:: Here we use pip version 1.5.6 to install.
+
+You can use the following commands to install the ``psutil`` package from our repository:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo easy_install pip==1.5.6
+ sudo pip install ~/Downloads/a4mcar_required_modules/high_level_applications/psutil/
+
+Apache Web Server Installation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: This part is created for instructive purposes. The setup shown here is carried out automatically with :ref:`overallsetup`.
+
+In order to install Apache Web Server on your system to be able to use front-end web interface functionality of A4MCAR, you can follow the guidelines provided in this section.
+
+First, you should upgrade your system's repository list and your upgrade your system via:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo apt-get update
+ sudo apt-get upgrade
+
+Then type the following commands to install apache2 server, php mods for the server, and easy Makefile tool cmake:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo apt-get install apache2 -y
+ sudo apt-get install php5 libapache2-mod-php5 -y
+ sudo apt-get install cmake
+
+After these steps, the website should appear at the ``/var/www/html`` directory. Now, we are off to grant some permissions to our Raspberry Pi's user groups for this directory. Security is not a main concern in our application, so please use them at your own risk:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo chgrp -R www-data /var/www/html/
+ sudo find /var/www/html/ -type d -exec chmod g+rx {} +
+ sudo find /var/www/html/ -type f -exec chmod g+r {} +
+
+The following gives permissions to your specific user. If you use username other than ``pi``, make sure to adjust it in the following commands:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo chown -R pi /var/www/html/
+ sudo find /var/www/html/ -type d -exec chmod u+rwx {} +
+ sudo find /var/www/html/ -type f -exec chmod u+rw {} +
+
+Subsequently, you should enable access to Linux file-system via webpages by using:
+
+.. code-block:: bash
+ :linenos:
+
+ sudo visudo
+
+and then, use your favourite editor to add the following to the end, save and exit.
+
+.. code-block:: bash
+ :linenos:
+
+ www-data ALL=(ALL) NOPASSWD: ALL
+
+Now you can place our web interface to the ``/var/www/html/`` directory and start visualizing the interface from ``http://<Your_IP_Address>/jQueryControl.php`` or ``http://<Your_IP_Address>/jQueryControl2.php``
+
+
+Installing OpenCV 3.0
+^^^^^^^^^^^^^^^^^^^^^^
+
+OpenCV should be installed for Image Processing application to work. In A4MCAR, C++ development library for OpenCV is used. The application is built and linked using GNU Make / CMake.
+
+For OpenCV 3.0 C++ download and installation, please refer to `OpenCV 3.0 Install <http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation>`_.
+
+Installing Raspicam
+^^^^^^^^^^^^^^^^^^^^^^
+
+To install raspicam-0.1.3, please refer to `raspicam-0.1.3 Install <https://github.com/6by9/raspicam-0.1.3>`_.
diff --git a/a4mcar/docs/howtosetup/source/index.rst b/a4mcar/docs/howtosetup/source/index.rst
new file mode 100644
index 0000000..7bb3001
--- /dev/null
+++ b/a4mcar/docs/howtosetup/source/index.rst
@@ -0,0 +1,26 @@
+.. A4MCAR documentation master file, created by
+ sphinx-quickstart on Mon Jul 24 20:56:01 2017.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to A4MCAR's How-to-Setup Documentation!
+===============================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents:
+ :numbered:
+ :glob:
+
+ content/intro.rst
+ content/hardware.rst
+ content/software.rst
+ content/more.rst
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`