diff --git a/catkin_ws/src/learn_environment/task_pool/evaluation_scripts/controller/controller_task/position_controller.py b/catkin_ws/src/learn_environment/task_pool/evaluation_scripts/controller/controller_task/position_controller.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/controller/controller_task/position_controller.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/controller/controller_task/position_controller.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..4ad40f7e1b29861972bccc73d6d52c427c797822
--- /dev/null
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/controller/controller_task/position_controller.ipynb
@@ -0,0 +1,222 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Learn Environment Panda Robot\n",
+    "Author: NAME"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Controller_Task\n",
+    "### Position_Controller\n",
+    "\n",
+    "> In this task, you will learn ...\n",
+    ">\n",
+    "> - wie du mit einem Position Controller arbeitest, um die Gelenke eines Roboters auf spezifische Positionen zu bewegen.\n",
+    "> - wie man den Position Controller startet\n",
+    "> - wie man eine Nachricht für den Position Controller erstellt\n",
+    "> - wie man die Zielposition sendt und die Bewegung überprüft"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "##### DO NOT CHANGE #####\n",
+    "\n",
+    "import rospy\n",
+    "from controller_manager_msgs.srv import LoadController, SwitchController\n",
+    "from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint\n",
+    "\n",
+    "##### DO NOT CHANGE #####"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Lade den Controller:\n",
+    "\n",
+    "ROS verwendet den Service /controller_manager/load_controller, um Controller zu laden.\n",
+    "Du musst den Namen des Controllers angeben, den du laden möchtest, in diesem Fall position_joint_trajectory_controller.\n",
+    "Aktiviere den Controller:\n",
+    "\n",
+    "Nachdem der Controller geladen ist, musst du ihn starten. Dies geschieht mit dem Service /controller_manager/switch_controller.\n",
+    "Du kannst mehrere Controller gleichzeitig starten und stoppen, indem du deren Namen in den Service-Request übergibst.\n",
+    "Verwende die folgende Vorlage:\n",
+    "\n",
+    "Nutze den Service load_controller, um den gewünschten Controller zu laden.\n",
+    "Starte den Service switch_controller, um den Position Controller zu aktivieren."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "##### DO NOT CHANGE #####\n",
+    "\n",
+    "# Service für das Laden des Controllers\n",
+    "rospy.wait_for_service('/controller_manager/load_controller')\n",
+    "load_service = rospy.ServiceProxy('/controller_manager/load_controller', LoadController)\n",
+    "response = load_service(\"position_joint_trajectory_controller\")\n",
+    "assert response.ok, \"Controller konnte nicht geladen werden.\"\n",
+    "\n",
+    "# Service für das Aktivieren des Controllers\n",
+    "rospy.wait_for_service('/controller_manager/switch_controller')\n",
+    "switch_service = rospy.ServiceProxy('/controller_manager/switch_controller', SwitchController)\n",
+    "response = switch_service(start_controllers=['position_joint_trajectory_controller'], \n",
+    "                          stop_controllers=[], strictness=1)\n",
+    "assert response.ok, \"Controller konnte nicht gestartet werden.\"\n",
+    "\n",
+    "print(\"Position Controller erfolgreich gestartet.\")\n",
+    "\n",
+    "##### DO NOT CHANGE #####\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Nachrichtentyp:\n",
+    "\n",
+    "Der Position Controller empfängt Nachrichten vom Typ trajectory_msgs/JointTrajectory.\n",
+    "Diese Nachricht enthält:\n",
+    "joint_names: Eine Liste der Gelenke, die gesteuert werden sollen.\n",
+    "points: Eine Liste von Positionen, die die Gelenke ansteuern sollen.\n",
+    "Erstelle die Nachricht:\n",
+    "\n",
+    "Beginne mit einer JointTrajectory-Nachricht.\n",
+    "Definiere die Gelenke, die du bewegen möchtest, indem du die Namen in der Liste joint_names einträgst.\n",
+    "Füge Zielpositionen hinzu:\n",
+    "\n",
+    "Erstelle ein JointTrajectoryPoint, um die Zielpositionen für jedes Gelenk zu definieren.\n",
+    "Ergänze die Felder:\n",
+    "positions: Die Zielpositionen in Radiant (z. B. [0.5, -0.5, 0.0]).\n",
+    "time_from_start: Die Dauer, die der Roboter benötigt, um die Positionen zu erreichen.\n",
+    "Sende die Nachricht:\n",
+    "\n",
+    "Veröffentliche die Nachricht auf dem Topic /position_joint_trajectory_controller/command."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "##### DO NOT CHANGE #####\n",
+    "\n",
+    "# Initialisiere ROS\n",
+    "rospy.init_node('position_control', anonymous=True)\n",
+    "\n",
+    "# Publisher für das Command-Topic\n",
+    "pub = rospy.Publisher('/position_joint_trajectory_controller/command', JointTrajectory, queue_size=10)\n",
+    "\n",
+    "# Warte, bis der Publisher bereit ist\n",
+    "rospy.sleep(1)\n",
+    "\n",
+    "# Erstelle die Nachricht\n",
+    "traj_msg = JointTrajectory()\n",
+    "traj_msg.joint_names = [...]  # TODO: Füge die Gelenknamen des Roboters hier ein\n",
+    "\n",
+    "# Definiere die Zielpositionen\n",
+    "point = JointTrajectoryPoint()\n",
+    "point.positions = [...]  # TODO: Füge Zielpositionen (in Radiant) für jedes Gelenk hinzu\n",
+    "point.time_from_start = rospy.Duration(...)  # TODO: Lege die Zeit fest, bis die Bewegung abgeschlossen sein soll\n",
+    "\n",
+    "# Füge den Punkt zur Trajektorie hinzu\n",
+    "traj_msg.points.append(point)\n",
+    "\n",
+    "# Sende die Nachricht\n",
+    "pub.publish(traj_msg)\n",
+    "print(\"Zielposition wurde gesendet.\")\n",
+    "\n",
+    "##### DO NOT CHANGE #####"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In dieser Erweiterung definieren Sie zwei Zielpositionen.\n",
+    "Die erste Zielposition wird erreicht, bevor der Roboter zur zweiten Zielposition übergeht.\n",
+    "Was du tun musst:\n",
+    "\n",
+    "Füge eine zweite Zielposition zu traj_msg.points hinzu.\n",
+    "Die zweite Zielposition sollte eine andere Pose ansteuern, um eine sichtbare Bewegung zu demonstrieren.\n",
+    "Planung der Bewegung:\n",
+    "\n",
+    "Verwenden Sie die Zeitsteuerung time_from_start, um sicherzustellen, dass der Roboter genug Zeit hat, die erste Position zu erreichen, bevor er zur nächsten übergeht.\n",
+    "Die Zeitangaben müssen aufeinander aufbauen:\n",
+    "Die erste Zielposition benötigt z. B. 2 Sekunden (time_from_start = 2.0).\n",
+    "Die zweite Zielposition wird nach weiteren 3 Sekunden erreicht (time_from_start = 5.0).\n",
+    "Schritte:\n",
+    "\n",
+    "Erstelle eine erste Zielposition: Definiere die Gelenkwinkel und die Dauer.\n",
+    "Erstelle eine zweite Zielposition: Erhöhe die Zeit und ändere die Gelenkwinkel.\n",
+    "Sende beide Punkte: Füge die Punkte zu traj_msg.points hinzu und sende die Nachricht."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "##### YOUR CODE HERE #####\n",
+    "\n",
+    "# Nachricht erstellen\n",
+    "traj_msg = JointTrajectory()\n",
+    "traj_msg.joint_names = ['joint_1', 'joint_2', 'joint_3', 'joint_4', 'joint_5', 'joint_6']\n",
+    "\n",
+    "# Erste Zielposition definieren\n",
+    "point1 = JointTrajectoryPoint()\n",
+    "point1.positions = [0.5, -0.5, 0.0, 0.0, 0.5, -0.5]\n",
+    "point1.time_from_start = rospy.Duration(2.0)\n",
+    "traj_msg.points.append(point1)\n",
+    "\n",
+    "# Zweite Zielposition definieren\n",
+    "point2 = JointTrajectoryPoint()\n",
+    "point2.positions = [1.0, 0.0, -0.5, 0.0, -0.5, 1.0]\n",
+    "point2.time_from_start = rospy.Duration(5.0)\n",
+    "traj_msg.points.append(point2)\n",
+    "\n",
+    "# Nachricht senden\n",
+    "pub.publish(traj_msg)\n",
+    "print(\"Zwei Zielpositionen wurden gesendet.\")\n",
+    "\n",
+    "##### YOUR CODE HERE #####"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "##### DO NOT CHANGE #####\n",
+    "\n",
+    "rospy.signal_shutdown(\"Task completed\")\n",
+    "roscpp_shutdown()\n",
+    "\n",
+    "##### DO NOT CHANGE #####"
+   ]
+  }
+ ],
+ "metadata": {
+  "language_info": {
+   "name": "python"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_3.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_3.ipynb
index 5be619cdd6d3a20be63f2f138d3cc725c991e157..9a4f3c54b602804edb74a5bc4d24ddad5a4f6802 100644
--- a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_3.ipynb
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_3.ipynb
@@ -83,7 +83,7 @@
     "roscpp_initialize(sys.argv)\n",
     "\n",
     "# Initialize the ROS Node\n",
-    "rospy.init_node('exercise_4_1', anonymous=True)\n",
+    "rospy.init_node('task3', anonymous=True)\n",
     "\n",
     "# Initialize MoveGroupCommander\n",
     "group = MoveGroupCommander('panda_arm')\n",
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_4.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_4.ipynb
index 172f8b97097cc8a4464bf0b5d375d13e95ec7cc8..9a05ef102ae6b44855b3e71734f7e361a0e840c6 100644
--- a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_4.ipynb
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_basics/move_it_basics_4.ipynb
@@ -50,7 +50,7 @@
     "roscpp_initialize(sys.argv)\n",
     "\n",
     "# Initialize the ROS Node\n",
-    "rospy.init_node('exercise_4_2', anonymous=True)\n",
+    "rospy.init_node('task4', anonymous=True)\n",
     "\n",
     "##### DO NOT CHANGE #####\n"
    ]
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_1.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_1.ipynb
index 8a52ba9f16ee112d6462ddddc8bcf0eefd513b69..04ae9c6edce0d34e566fb983afeea6c5c45a5492 100644
--- a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_1.ipynb
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_1.ipynb
@@ -69,7 +69,7 @@
     "roscpp_initialize(sys.argv)\n",
     "\n",
     "# Initialize the ROS Node\n",
-    "rospy.init_node('exercise_5_1', anonymous=True)\n",
+    "rospy.init_node('taks1', anonymous=True)\n",
     "\n",
     "# Initialize PlanningScene\n",
     "scene = PlanningSceneInterface()\n",
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_2.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_2.ipynb
index f71e067aa9865d79dfe1af143b9340364e8816d3..1e7b41a5e9fe63fac0da224f94e0390f5d492ca4 100644
--- a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_2.ipynb
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_2.ipynb
@@ -73,7 +73,7 @@
     "roscpp_initialize(sys.argv)\n",
     "\n",
     "# Initialize the ROS Node\n",
-    "rospy.init_node('exercise_5_2', anonymous=True)\n",
+    "rospy.init_node('task2', anonymous=True)\n",
     "\n",
     "# Initialize the PlanningSceneInterface\n",
     "planning_scene_interface = PlanningSceneInterface()\n",
diff --git a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_3.ipynb b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_3.ipynb
index 1e5d38705343a76974cf692fcb32d224e6dcedf2..8bb63b99a8723f6d7254d5231e097f14ab066fcf 100644
--- a/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_3.ipynb
+++ b/catkin_ws/src/learn_environment/task_pool/solution_scripts/move_it/move_it_objects/move_it_objects_3.ipynb
@@ -68,7 +68,7 @@
     "roscpp_initialize(sys.argv)\n",
     "\n",
     "# Initialize the ROS Node\n",
-    "rospy.init_node('exercise_5_1', anonymous=True)\n",
+    "rospy.init_node('task3', anonymous=True)\n",
     "\n",
     "# Initialize PlanningScene\n",
     "scene = PlanningSceneInterface()\n",
diff --git a/catkin_ws/src/learn_environment/task_pool/task_definitions.json b/catkin_ws/src/learn_environment/task_pool/task_definitions.json
index 0735fb3b82c62926d639407d7c91b69a66cdc81b..7e6d9457be42767121554e7e51322ce4db3c13d3 100644
--- a/catkin_ws/src/learn_environment/task_pool/task_definitions.json
+++ b/catkin_ws/src/learn_environment/task_pool/task_definitions.json
@@ -125,16 +125,22 @@
       ]
     },
     {
-      "title": "Trajectory Controller",
+      "title": "Controller Basics",
       "folder": "/controller/controller_task",
       "topic": "Controller",
       "difficulty": "beginner",
       "subtasks": [
         {
           "title": "Task 1",
-          "description": "TODO: Add Subtask Description Subtask 1.",
+          "description": "Understand the basics of the trajectory controller",
           "solution_file": "/trajectory_controller.ipynb",
           "evaluation_file": "/trajectory_controller.py"
+        },
+        {
+          "title": "Task 2",
+          "description": "Undersatnd the basics of the position controller",
+          "solution_file": "/position_controller.ipynb",
+          "evaluation_file": "/position_controller.py"
         }
       ]
     },