diff --git a/src/g2_2025_grade_calculator_pkg/CMakeLists.txt b/src/g2_2025_grade_calculator_pkg/CMakeLists.txt
index feeda54..2510274 100644
--- a/src/g2_2025_grade_calculator_pkg/CMakeLists.txt
+++ b/src/g2_2025_grade_calculator_pkg/CMakeLists.txt
@@ -8,14 +8,27 @@ endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
+find_package(g2_2025_interfaces REQUIRED)
-add_executable(grade_generator src/main.cpp)
+add_executable(exam_result_generator src/exam_result_generator/main.cpp)
+add_executable(final_grade_determinator src/final_grade_determinator/main.cpp)
+add_executable(grade_calculator src/grade_calculator/main.cpp)
+add_executable(retake_grade_determinator src/retake_grade_determinator/main.cpp)
+add_executable(retake_scheduler src/retake_scheduler/main.cpp)
-ament_target_dependencies(grade_generator rclcpp)
+ament_target_dependencies(exam_result_generator rclcpp g2_2025_interfaces)
+ament_target_dependencies(final_grade_determinator rclcpp g2_2025_interfaces)
+ament_target_dependencies(grade_calculator rclcpp g2_2025_interfaces)
+ament_target_dependencies(retake_grade_determinator rclcpp g2_2025_interfaces)
+ament_target_dependencies(retake_scheduler rclcpp g2_2025_interfaces)
install (
TARGETS
- grade_generator
+ exam_result_generator
+ final_grade_determinator
+ grade_calculator
+ retake_grade_determinator
+ retake_scheduler
DESTINATION lib/${PROJECT_NAME}
)
diff --git a/src/g2_2025_grade_calculator_pkg/package.xml b/src/g2_2025_grade_calculator_pkg/package.xml
index 9f7f271..31cb72c 100644
--- a/src/g2_2025_grade_calculator_pkg/package.xml
+++ b/src/g2_2025_grade_calculator_pkg/package.xml
@@ -10,6 +10,7 @@
ament_cmake
rclcpp
+ g2_2025_interfaces
ament_lint_auto
ament_lint_common
diff --git a/src/g2_2025_grade_calculator_pkg/src/main.cpp b/src/g2_2025_grade_calculator_pkg/src/exam_result_generator/main.cpp
similarity index 100%
rename from src/g2_2025_grade_calculator_pkg/src/main.cpp
rename to src/g2_2025_grade_calculator_pkg/src/exam_result_generator/main.cpp
diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp
new file mode 100644
index 0000000..7279717
--- /dev/null
+++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp
@@ -0,0 +1,40 @@
+/* node_template.cpp
+ * Action server node template for ROS2
+ *
+ * Node description:
+ * Template action server that demonstrates action server implementation
+ * with goal handling, feedback publishing, and cancellation support
+ *
+ * Reviewed by:
+ * Changelog:
+ * [04-09-2025] Wessel T: Implement template
+ */
+
+#include
+
+#include "rclcpp/rclcpp.hpp"
+
+namespace lessons::zero::tmp {
+
+class NodeTemplate : public rclcpp::Node {
+public:
+ NodeTemplate()
+ : Node("node_template")
+ {
+ }
+
+private:
+};
+
+} // namespace lessons::zero::template
+
+int main(int argc,char *argv[]) {
+ rclcpp::init(argc,argv);
+
+ auto node = std::make_shared();
+
+ rclcpp::spin(node);
+ rclcpp::shutdown();
+
+ return 0;
+}
diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp
new file mode 100644
index 0000000..7279717
--- /dev/null
+++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp
@@ -0,0 +1,40 @@
+/* node_template.cpp
+ * Action server node template for ROS2
+ *
+ * Node description:
+ * Template action server that demonstrates action server implementation
+ * with goal handling, feedback publishing, and cancellation support
+ *
+ * Reviewed by:
+ * Changelog:
+ * [04-09-2025] Wessel T: Implement template
+ */
+
+#include
+
+#include "rclcpp/rclcpp.hpp"
+
+namespace lessons::zero::tmp {
+
+class NodeTemplate : public rclcpp::Node {
+public:
+ NodeTemplate()
+ : Node("node_template")
+ {
+ }
+
+private:
+};
+
+} // namespace lessons::zero::template
+
+int main(int argc,char *argv[]) {
+ rclcpp::init(argc,argv);
+
+ auto node = std::make_shared();
+
+ rclcpp::spin(node);
+ rclcpp::shutdown();
+
+ return 0;
+}
diff --git a/src/g2_2025_grade_calculator_pkg/src/retake_grade_determinator/main.cpp b/src/g2_2025_grade_calculator_pkg/src/retake_grade_determinator/main.cpp
new file mode 100644
index 0000000..7279717
--- /dev/null
+++ b/src/g2_2025_grade_calculator_pkg/src/retake_grade_determinator/main.cpp
@@ -0,0 +1,40 @@
+/* node_template.cpp
+ * Action server node template for ROS2
+ *
+ * Node description:
+ * Template action server that demonstrates action server implementation
+ * with goal handling, feedback publishing, and cancellation support
+ *
+ * Reviewed by:
+ * Changelog:
+ * [04-09-2025] Wessel T: Implement template
+ */
+
+#include
+
+#include "rclcpp/rclcpp.hpp"
+
+namespace lessons::zero::tmp {
+
+class NodeTemplate : public rclcpp::Node {
+public:
+ NodeTemplate()
+ : Node("node_template")
+ {
+ }
+
+private:
+};
+
+} // namespace lessons::zero::template
+
+int main(int argc,char *argv[]) {
+ rclcpp::init(argc,argv);
+
+ auto node = std::make_shared();
+
+ rclcpp::spin(node);
+ rclcpp::shutdown();
+
+ return 0;
+}
diff --git a/src/g2_2025_grade_calculator_pkg/src/retake_scheduler/main.cpp b/src/g2_2025_grade_calculator_pkg/src/retake_scheduler/main.cpp
new file mode 100644
index 0000000..7279717
--- /dev/null
+++ b/src/g2_2025_grade_calculator_pkg/src/retake_scheduler/main.cpp
@@ -0,0 +1,40 @@
+/* node_template.cpp
+ * Action server node template for ROS2
+ *
+ * Node description:
+ * Template action server that demonstrates action server implementation
+ * with goal handling, feedback publishing, and cancellation support
+ *
+ * Reviewed by:
+ * Changelog:
+ * [04-09-2025] Wessel T: Implement template
+ */
+
+#include
+
+#include "rclcpp/rclcpp.hpp"
+
+namespace lessons::zero::tmp {
+
+class NodeTemplate : public rclcpp::Node {
+public:
+ NodeTemplate()
+ : Node("node_template")
+ {
+ }
+
+private:
+};
+
+} // namespace lessons::zero::template
+
+int main(int argc,char *argv[]) {
+ rclcpp::init(argc,argv);
+
+ auto node = std::make_shared();
+
+ rclcpp::spin(node);
+ rclcpp::shutdown();
+
+ return 0;
+}
diff --git a/src/g2_2025_interfaces/CMakeLists.txt b/src/g2_2025_interfaces/CMakeLists.txt
new file mode 100644
index 0000000..9bb5c01
--- /dev/null
+++ b/src/g2_2025_interfaces/CMakeLists.txt
@@ -0,0 +1,21 @@
+cmake_minimum_required(VERSION 3.8)
+project(g2_2025_interfaces)
+
+if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ add_compile_options(-Wall -Wextra -Wpedantic)
+endif()
+
+# find dependencies
+find_package(ament_cmake REQUIRED)
+find_package(rosidl_default_generators REQUIRED)
+
+rosidl_generate_interfaces(${PROJECT_NAME}
+ "msg/Student.msg"
+ "msg/Exam.msg"
+ "srv/Exam.srv"
+ "action/Retake.action"
+)
+
+ament_export_dependencies(rosidl_default_runtime)
+
+ament_package()
diff --git a/src/g2_2025_interfaces/action/Retake.action b/src/g2_2025_interfaces/action/Retake.action
new file mode 100644
index 0000000..66ebe9a
--- /dev/null
+++ b/src/g2_2025_interfaces/action/Retake.action
@@ -0,0 +1,5 @@
+string student_name
+string lecture_name
+---
+---
+float32 result
diff --git a/src/g2_2025_interfaces/msg/Exam.msg b/src/g2_2025_interfaces/msg/Exam.msg
new file mode 100644
index 0000000..63d87a2
--- /dev/null
+++ b/src/g2_2025_interfaces/msg/Exam.msg
@@ -0,0 +1,2 @@
+string lecture_name
+float32 result
diff --git a/src/g2_2025_interfaces/msg/Student.msg b/src/g2_2025_interfaces/msg/Student.msg
new file mode 100644
index 0000000..566c1cc
--- /dev/null
+++ b/src/g2_2025_interfaces/msg/Student.msg
@@ -0,0 +1,2 @@
+string student_name
+string lecture_name
diff --git a/src/g2_2025_interfaces/package.xml b/src/g2_2025_interfaces/package.xml
new file mode 100644
index 0000000..e596ef9
--- /dev/null
+++ b/src/g2_2025_interfaces/package.xml
@@ -0,0 +1,22 @@
+
+
+
+ g2_2025_interfaces
+ 0.0.0
+ TODO: Package description
+ wessel
+ TODO: License declaration
+
+ ament_cmake
+
+ rosidl_default_generators
+ rosidl_default_runtime
+ rosidl_interface_packages
+
+ ament_lint_auto
+ ament_lint_common
+
+
+ ament_cmake
+
+
diff --git a/src/g2_2025_interfaces/srv/Exam.srv b/src/g2_2025_interfaces/srv/Exam.srv
new file mode 100644
index 0000000..8e9945c
--- /dev/null
+++ b/src/g2_2025_interfaces/srv/Exam.srv
@@ -0,0 +1,5 @@
+# Request
+string student_name
+string lecture_name
+---
+float32 result