feat(final_grade_determinator): Add base

add basic files for start nodes final_grade_determinator and
grade_calculator
This commit is contained in:
Vincent W
2025-10-01 09:02:34 +02:00
parent dfbba53739
commit f063cb9086
6 changed files with 117 additions and 36 deletions

View File

@@ -2,36 +2,19 @@
* 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: <x>
* Changelog:
* [04-09-2025] Wessel T: Implement template
*/
#include <cstdlib>
#include "rclcpp/rclcpp.hpp"
namespace lessons::zero::tmp {
class NodeTemplate : public rclcpp::Node {
public:
NodeTemplate()
: Node("node_template")
{
}
private:
};
} // namespace lessons::zero::template
#include "nodes/FinalGradeDeterminator.hpp"
int main(int argc,char *argv[]) {
rclcpp::init(argc,argv);
auto node = std::make_shared<lessons::zero::tmp::NodeTemplate>();
auto node = std::make_shared<assignments::one::final_grade_determinator::FinalGradeDeterminator>();
rclcpp::spin(node);
rclcpp::shutdown();

View File

@@ -0,0 +1,39 @@
#include "FinalGradeDeterminator.hpp"
namespace assignments::one::final_grade_determinator {
FinalGradeDeterminator::FinalGradeDeterminator() : Node("final_grade_determinator") {
// Create publisher for exam results
student_publisher_ = this->create_publisher<g2_2025_interfaces::msg::Student>("student_course_management", 10);
// Create subscriber for adding/removing student/course combinations
exam_subscriber_ = this->create_subscription<g2_2025_interfaces::msg::Exam>(
"exam_results", 10,
std::bind(
&ExamResultGenerator::exam_results_callback,
this,
std::placeholders::_1
)
);
exam_service_client_= this->create_client<g2_2025_interfaces::srv::Exams>("grade_calculator_service");
}
void FinalGradeDeterminator::exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg){
dataMap_[{ msg->student_name, msg->course_name}].push_back(msg->result);
if (dataMap_[{ msg->student_name, msg->course_name}].size() = PARAM)
{
}
}
void FinalGradeDeterminator::grade_calculator_response(rclcpp::Client<g2_2025_interfaces::srv::Exams>::SharedFuture future){
auto response = future.get();
StudentCourse passthrough;
passthrough.
db_manager_->store_final_course_result()
}
} // namespace assignments::one::final_grade_determinator

View File

@@ -0,0 +1,38 @@
#pragma once
#include <memory>
#include <string>
#include <random>
#include <vector>
#include "rclcpp/rclcpp.hpp"
#include "g2_2025_interfaces/msg/exam.hpp"
#include "g2_2025_interfaces/msg/student.hpp"
#include "g2_2025_interfaces/srv/exams.hpp"
#include "database/DatabaseManager.hpp"
#include "database/StudentCourse.hpp"
#define PARAM 5
namespace assignments::one::final_grade_determinator {
class FinalGradeDeterminator : public rclcpp::Node {
public:
FinalGradeDeterminator();
private:
rclcpp::Subscription<g2_2025_interfaces::msg::Exam>::SharedPtr exam_subscriber_;
rclcpp::Publisher<g2_2025_interfaces::msg::Student>::SharedPtr student_publisher_;
rclcpp::Client<g2_2025_interfaces::srv::Exams>::SharedPtr exam_service_client_;
std::unique_ptr<DatabaseManager> db_manager_;
std::map<std::pair<std::string, std::string>, std::vector<int>> dataMap_;
void exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg);
void grade_calculator_response(rclcpp::Client<g2_2025_interfaces::srv::Exams>::SharedFuture future)
};
} // namespace assignments::one::final_grade_determinator

View File

@@ -10,28 +10,13 @@
* [04-09-2025] Wessel T: Implement template
*/
#include <cstdlib>
#include "rclcpp/rclcpp.hpp"
namespace lessons::zero::tmp {
class NodeTemplate : public rclcpp::Node {
public:
NodeTemplate()
: Node("node_template")
{
}
private:
};
} // namespace lessons::zero::template
#include "nodes/GradeCalculator.hpp"
int main(int argc,char *argv[]) {
rclcpp::init(argc,argv);
auto node = std::make_shared<lessons::zero::tmp::NodeTemplate>();
auto node = std::make_shared<assignments::one::grade_calculator::GradeCalculator>();
rclcpp::spin(node);
rclcpp::shutdown();

View File

@@ -0,0 +1,11 @@
#include "GradeCalculator.hpp"
namespace assignments::one::grade_calculator
{
GradeCalculator::GradeCalculator() : Node("grade_calculator"){
grade_calculator_serviceserver_ = this -> create_service<g2_2025_interfaces::srv::Exams>("grade_calculator_service",
std::bind(&GradeCalculator::grade_calculator_callback,this,std::placeholders::_1,std::placeholders::_2));
}
} // namespace assignments::one::grade_calculator

View File

@@ -0,0 +1,25 @@
#pragma once
#include <memory>
#include <string>
#include <random>
#include <vector>
#include "rclcpp/rclcpp.hpp"
#include "g2_2025_interfaces/msg/exam.hpp"
#include "g2_2025_interfaces/msg/student.hpp"
#include "g2_2025_interfaces/srv/exams.hpp"
namespace assignments::one::grade_calculator {
class GradeCalculator : public rclcpp::Node {
public:
GradeCalculator();
private:
rclcpp::Service<g2_2025_interfaces::srv::Exams>::SharedPtr grade_calculator_serviceserver_;
void grade_calculator_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg);
};
}