diff --git a/00_GettingStarted/docker/i2r/docker-compose.yml b/00_GettingStarted/docker/i2r/docker-compose.yml
index 8ecfc7a4dda4423190f2e72d562b5dbfa080ff96..5bae4ff67ea8df071aa393f19fac53c85a4a9c89 100644
--- a/00_GettingStarted/docker/i2r/docker-compose.yml
+++ b/00_GettingStarted/docker/i2r/docker-compose.yml
@@ -5,6 +5,8 @@ services:
       - DISPLAY=gui:0.0
     stdin_open: true 
     tty: true
+    volumes:
+      - home:/root
   
   gui:
     image: theasp/novnc:latest
@@ -12,3 +14,6 @@ services:
       - "8080:8080"
     environment:
       - RUN_XTERM=no
+
+volumes:
+  home:
diff --git a/02_IntroductionToROS/README.md b/02_IntroductionToROS/README.md
index 8bda274171167ae890d0d07ea0f7069ad45fe57c..adec7fb63b3863b2b7d3847ca4f53f4f52e5aa0f 100644
--- a/02_IntroductionToROS/README.md
+++ b/02_IntroductionToROS/README.md
@@ -50,8 +50,19 @@
 
 ## First Steps with ROS
 
+Now we can **start** `Docker` to run the environment we use to work with `ROS`. The instructions how to start the group of `Docker` containers can be found in the [00_GettingStarted](/00_GettingStarted/README.md#docker) folder.
+
+During this course we work with two containers. A short description on their purpose in the table below.
+
+| Container Name | Intent |
+| :-----: | :----- |
+| ros | Container with *Ubuntu 18.04* as operating system and the `ROS` distribution *Melodic* installed. This container will host our `ROS` environment. Since docker is designed to containerise command-line interface applications, it is not optimised to facilitate graphical user interfaces (GUIs). As a workaround, we make use of the auxiliary container *gui*. |
+| gui | Auxiliary container to work with graphical user interfaces (GUI). This container displays GUI applications from the *ros* container inside a web application.|
+
+
 ### ROS Workspace
 
+
 ### ROS Master
 
 ### Nodes
@@ -66,7 +77,109 @@
 
 ### Catkin Workspace
 
+- ***catkin*** is a `ROS` build system to generate executables, libraries and interfaces
+- We will use the *Catkin Command Line Tools* within this course.
+- To build your workspace after implementation, e.g. of a node, use the *catkin build* command from within the catkin workspace
 
-## Building a Package
+    ```bash
+    cd ~/catkin_ws
+    ```
 
-## Implementing a Node
\ No newline at end of file
+    ```bash
+    catkin build
+    ```
+
+- Inspect the created folder and file structure in your workspace by using the *ls* command
+
+    ```bash
+    ls
+    ```
+
+- Overlay this worspace on top of your ROS environment and source your *bashrc* file 
+
+    ```bash
+    echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
+    ```
+    ```bash
+    source ~/.bashrc
+    ```
+
+## Building a Package
+Since the *catkin* workspace is now set up, we can build a package in it.
+
+- Change int the *src* folder of the catkin workspace
+
+    ```bash
+    cd ~/catkin_ws/src
+    ```
+- The tool to build a package is *catkin_create_pkg*
+    ```bash
+    catkin_create_pkg <package name> <dependencies>
+    ```
+- We name our first package *exercise_1* and use it to implement our first nodes to gain experience with the components building the `ROS` computation graph.
+    ```bash
+    catkin_create_pkg exercise_1 std_msgs rospy roscpp
+    ```
+- Since, we will use the `Python` programming language, it's common practice to store the python scripts into a seperate *scripts* folder and not into the *src* folder, which is mainly used for `C/C++` source code.
+    ```bash
+    cd ~/catkin_ws/src/exercise_1
+    ```
+    ```bash
+    mkdir scripts
+    ```
+- Following the creation of the package, change directory into the *catkin_ws* folder to build your package.
+    ```bash
+    cd ~/catkin_ws
+    ```
+    ```bash
+    catkin build
+    ```
+- After the build process make sure to source the configuration file for the terminal (*bashrc*) to ensure that the updated environment parameters are used.
+    ```bash
+    source ~/.bashrc
+    ```
+- Check if the just created package *exercise_1* is added to the *ROS_PACKAGE_PATH* **environment variable**
+    ```bash
+    echo $ROS_PACKAGE_PATH
+    ```
+
+
+## Implementing a Node
+Inside the package *exercise_1* we will now create a `node` that **publishes** `messages` to the *cmd_vel* `topic` which is used for example in the *turtlesim* `package`.
+
+- Create the empty *turtle_go.py* file in the just created *scripts* folder inside of the `package` *exercise_1*.
+    ```bash
+    touch ~/catkin_ws/src/exercise_1/scripts/turtle_go.py
+    ```
+- The implementation shown below.
+    ```python
+    #!/usr/bin/env python
+    import rospy
+    from geometry_msgs.msg import Twist
+
+    def turtle_go()
+        pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
+        rospy.init_node('turtle_go', anonymous=True)
+        rate = rospy.Rate(10) # 10Hz
+        twist = Twist()
+        twist.linear.x = 1.0
+        while not rospy.is_shutdown():
+            pub.publish(twist)
+            rate.sleep()
+            
+    if __name__ == '__main__':
+        try:
+            turtle_go()
+        except rospy.ROSInterruptException:
+            pass
+    ```
+
+- Make sure to make the file executable by the following command giving it read, write and execute permissions.
+    ```bash
+    chmod 7 turtle_go.py
+    ```
+
+
+## Task
+
+Create a `package` *task_1* which contains a `node` named *turtle_go_circle.py* which **publishes** commands in such a way to the `topic` *cmd_vel* that the turtle moves in a circle.
\ No newline at end of file
diff --git a/02_IntroductionToROS/source_code/CMakeLists.txt b/02_IntroductionToROS/source_code/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1f82286510cbd9875d3a0173bb5f0f87696e224b
--- /dev/null
+++ b/02_IntroductionToROS/source_code/CMakeLists.txt
@@ -0,0 +1,206 @@
+cmake_minimum_required(VERSION 3.0.2)
+project(exercise_1)
+
+## Compile as C++11, supported in ROS Kinetic and newer
+# add_compile_options(-std=c++11)
+
+## Find catkin macros and libraries
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+## is used, also find other catkin packages
+find_package(catkin REQUIRED COMPONENTS
+  roscpp
+  rospy
+  std_msgs
+)
+
+## System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+
+## Uncomment this if the package has a setup.py. This macro ensures
+## modules and global scripts declared therein get installed
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+# catkin_python_setup()
+
+################################################
+## Declare ROS messages, services and actions ##
+################################################
+
+## To declare and build messages, services or actions from within this
+## package, follow these steps:
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
+##   your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+## * In the file package.xml:
+##   * add a build_depend tag for "message_generation"
+##   * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
+##   * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+##     but can be declared for certainty nonetheless:
+##     * add a exec_depend tag for "message_runtime"
+## * In this file (CMakeLists.txt):
+##   * add "message_generation" and every package in MSG_DEP_SET to
+##     find_package(catkin REQUIRED COMPONENTS ...)
+##   * add "message_runtime" and every package in MSG_DEP_SET to
+##     catkin_package(CATKIN_DEPENDS ...)
+##   * uncomment the add_*_files sections below as needed
+##     and list every .msg/.srv/.action file to be processed
+##   * uncomment the generate_messages entry below
+##   * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+## Generate messages in the 'msg' folder
+# add_message_files(
+#   FILES
+#   Message1.msg
+#   Message2.msg
+# )
+
+## Generate services in the 'srv' folder
+# add_service_files(
+#   FILES
+#   Service1.srv
+#   Service2.srv
+# )
+
+## Generate actions in the 'action' folder
+# add_action_files(
+#   FILES
+#   Action1.action
+#   Action2.action
+# )
+
+## Generate added messages and services with any dependencies listed here
+# generate_messages(
+#   DEPENDENCIES
+#   std_msgs
+# )
+
+################################################
+## Declare ROS dynamic reconfigure parameters ##
+################################################
+
+## To declare and build dynamic reconfigure parameters within this
+## package, follow these steps:
+## * In the file package.xml:
+##   * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
+## * In this file (CMakeLists.txt):
+##   * add "dynamic_reconfigure" to
+##     find_package(catkin REQUIRED COMPONENTS ...)
+##   * uncomment the "generate_dynamic_reconfigure_options" section below
+##     and list every .cfg file to be processed
+
+## Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+#   cfg/DynReconf1.cfg
+#   cfg/DynReconf2.cfg
+# )
+
+###################################
+## catkin specific configuration ##
+###################################
+## The catkin_package macro generates cmake config files for your package
+## Declare things to be passed to dependent projects
+## INCLUDE_DIRS: uncomment this if your package contains header files
+## LIBRARIES: libraries you create in this project that dependent projects also need
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
+## DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+#  INCLUDE_DIRS include
+#  LIBRARIES exercise_1
+#  CATKIN_DEPENDS roscpp rospy std_msgs
+#  DEPENDS system_lib
+)
+
+###########
+## Build ##
+###########
+
+## Specify additional locations of header files
+## Your package locations should be listed before other locations
+include_directories(
+# include
+  ${catkin_INCLUDE_DIRS}
+)
+
+## Declare a C++ library
+# add_library(${PROJECT_NAME}
+#   src/${PROJECT_NAME}/exercise_1.cpp
+# )
+
+## Add cmake target dependencies of the library
+## as an example, code may need to be generated before libraries
+## either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Declare a C++ executable
+## With catkin_make all packages are built within a single CMake context
+## The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/exercise_1_node.cpp)
+
+## Rename C++ executable without prefix
+## The above recommended prefix causes long target names, the following renames the
+## target back to the shorter version for ease of user use
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+## Add cmake target dependencies of the executable
+## same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+#   ${catkin_LIBRARIES}
+# )
+
+#############
+## Install ##
+#############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+## Mark executable scripts (Python etc.) for installation
+## in contrast to setup.py, you can choose the destination
+# catkin_install_python(PROGRAMS
+#   scripts/my_python_script
+#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark executables for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
+# install(TARGETS ${PROJECT_NAME}_node
+#   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark libraries for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
+# install(TARGETS ${PROJECT_NAME}
+#   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+#   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+#   RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+# )
+
+## Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+#   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+#   FILES_MATCHING PATTERN "*.h"
+#   PATTERN ".svn" EXCLUDE
+# )
+
+## Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+#   # myfile1
+#   # myfile2
+#   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+#############
+## Testing ##
+#############
+
+## Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_exercise_1.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+## Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
\ No newline at end of file
diff --git a/02_IntroductionToROS/source_code/package.xml b/02_IntroductionToROS/source_code/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79168d96096fe5c0a7e2b9063ec11d38b7069639
--- /dev/null
+++ b/02_IntroductionToROS/source_code/package.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<package format="2">
+  <name>exercise_1</name>
+  <version>0.0.0</version>
+  <description>The exercise_1 package</description>
+
+  <!-- One maintainer tag required, multiple allowed, one person per tag -->
+  <!-- Example:  -->
+  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
+  <maintainer email="root@todo.todo">root</maintainer>
+
+
+  <!-- One license tag required, multiple allowed, one license per tag -->
+  <!-- Commonly used license strings: -->
+  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
+  <license>TODO</license>
+
+
+  <!-- Url tags are optional, but multiple are allowed, one per tag -->
+  <!-- Optional attribute type can be: website, bugtracker, or repository -->
+  <!-- Example: -->
+  <!-- <url type="website">http://wiki.ros.org/exercise_1</url> -->
+
+
+  <!-- Author tags are optional, multiple are allowed, one per tag -->
+  <!-- Authors do not have to be maintainers, but could be -->
+  <!-- Example: -->
+  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
+
+
+  <!-- The *depend tags are used to specify dependencies -->
+  <!-- Dependencies can be catkin packages or system dependencies -->
+  <!-- Examples: -->
+  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
+  <!--   <depend>roscpp</depend> -->
+  <!--   Note that this is equivalent to the following: -->
+  <!--   <build_depend>roscpp</build_depend> -->
+  <!--   <exec_depend>roscpp</exec_depend> -->
+  <!-- Use build_depend for packages you need at compile time: -->
+  <!--   <build_depend>message_generation</build_depend> -->
+  <!-- Use build_export_depend for packages you need in order to build against this package: -->
+  <!--   <build_export_depend>message_generation</build_export_depend> -->
+  <!-- Use buildtool_depend for build tool packages: -->
+  <!--   <buildtool_depend>catkin</buildtool_depend> -->
+  <!-- Use exec_depend for packages you need at runtime: -->
+  <!--   <exec_depend>message_runtime</exec_depend> -->
+  <!-- Use test_depend for packages you need only for testing: -->
+  <!--   <test_depend>gtest</test_depend> -->
+  <!-- Use doc_depend for packages you need only for building documentation: -->
+  <!--   <doc_depend>doxygen</doc_depend> -->
+  <buildtool_depend>catkin</buildtool_depend>
+  <build_depend>roscpp</build_depend>
+  <build_depend>rospy</build_depend>
+  <build_depend>std_msgs</build_depend>
+  <build_export_depend>roscpp</build_export_depend>
+  <build_export_depend>rospy</build_export_depend>
+  <build_export_depend>std_msgs</build_export_depend>
+  <exec_depend>roscpp</exec_depend>
+  <exec_depend>rospy</exec_depend>
+  <exec_depend>std_msgs</exec_depend>
+
+
+  <!-- The export tag contains other, unspecified, tags -->
+  <export>
+    <!-- Other tools can request additional information be placed here -->
+
+  </export>
+</package>
\ No newline at end of file
diff --git a/02_IntroductionToROS/source_code/turtle_go.py b/02_IntroductionToROS/source_code/turtle_go.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb9acc317e3d75e3dbbad76d3f14ecc6e4ced238
--- /dev/null
+++ b/02_IntroductionToROS/source_code/turtle_go.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+import rospy
+from geometry_msgs.msg import Twist
+
+def turtle_go():
+    pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
+    rospy.init_node('turtle_go', anonymous=True)
+    rate = rospy.Rate(10) # 10Hz
+    twist = Twist()
+    twist.linear.x = 1.0
+    while not rospy.is_shutdown():
+        pub.publish(twist)
+        rate.sleep()
+        
+if __name__ == '__main__':
+    try:
+        turtle_go()
+    except rospy.ROSInterruptException:
+        pass
\ No newline at end of file