feat(les2): Turn service into vector calculator
This commit is contained in:
@@ -10,7 +10,7 @@ find_package(ament_cmake REQUIRED)
|
|||||||
find_package(rosidl_default_generators REQUIRED)
|
find_package(rosidl_default_generators REQUIRED)
|
||||||
rosidl_generate_interfaces(${PROJECT_NAME}
|
rosidl_generate_interfaces(${PROJECT_NAME}
|
||||||
"msg/HardwareStatus.msg"
|
"msg/HardwareStatus.msg"
|
||||||
"srv/ServiceStudent.srv"
|
"srv/ServiceVec.srv"
|
||||||
)
|
)
|
||||||
ament_export_dependencies(rosidl_default_runtime)
|
ament_export_dependencies(rosidl_default_runtime)
|
||||||
# uncomment the following section in order to fill in
|
# uncomment the following section in order to fill in
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
# Student info service message
|
# Vector length calculation service message
|
||||||
string sname
|
float64 x
|
||||||
|
float64 y
|
||||||
|
float64 z
|
||||||
---
|
---
|
||||||
int32 snumber
|
float64 vec_len
|
||||||
|
|
||||||
## format <type> <name> <optional_default_value>
|
## format <type> <name> <optional_default_value>
|
||||||
##primitive message types
|
##primitive message types
|
||||||
@@ -10,17 +10,17 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include "rclcpp/rclcpp.hpp"
|
#include "rclcpp/rclcpp.hpp"
|
||||||
|
|
||||||
#include "les_interface/srv/service_student.hpp"
|
#include "les_interface/srv/service_vec.hpp"
|
||||||
|
|
||||||
using namespace std::chrono;
|
using namespace std::chrono;
|
||||||
using les_interface::srv::ServiceStudent;
|
using les_interface::srv::ServiceVec;
|
||||||
|
|
||||||
class NodeLes2ServiceClient : public rclcpp::Node {
|
class NodeLes2ServiceClient : public rclcpp::Node {
|
||||||
public:
|
public:
|
||||||
NodeLes2ServiceClient()
|
NodeLes2ServiceClient()
|
||||||
: Node("node_les2_service_client")
|
: Node("node_les2_service_client")
|
||||||
{
|
{
|
||||||
client_ = this->create_client<ServiceStudent>("student_service_server");
|
client_ = this->create_client<ServiceVec>("vec_service_server");
|
||||||
timer_ = this->create_wall_timer(
|
timer_ = this->create_wall_timer(
|
||||||
seconds(3),
|
seconds(3),
|
||||||
std::bind(&NodeLes2ServiceClient::send_request, this)
|
std::bind(&NodeLes2ServiceClient::send_request, this)
|
||||||
@@ -34,24 +34,27 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto request = std::make_shared<ServiceStudent::Request>();
|
auto request = std::make_shared<ServiceVec::Request>();
|
||||||
request->sname = "Wessel";
|
request->x = rand() % 100;
|
||||||
|
request->y = rand() % 100;
|
||||||
|
request->z = rand() % 100;
|
||||||
|
|
||||||
auto future = client_->async_send_request(request,
|
auto future = client_->async_send_request(request,
|
||||||
std::bind(&NodeLes2ServiceClient::handle_response, this, std::placeholders::_1)
|
std::bind(&NodeLes2ServiceClient::handle_response, this, std::placeholders::_1)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_response(rclcpp::Client<ServiceStudent>::SharedFuture future) {
|
void handle_response(rclcpp::Client<ServiceVec>::SharedFuture future) {
|
||||||
auto response = future.get();
|
auto response = future.get();
|
||||||
RCLCPP_INFO(this->get_logger(), "Received student id: %ld", response->snumber);
|
RCLCPP_INFO(this->get_logger(), "Received vec len: %.6lf", response->vec_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
rclcpp::Client<ServiceStudent>::SharedPtr client_;
|
rclcpp::Client<ServiceVec>::SharedPtr client_;
|
||||||
rclcpp::TimerBase::SharedPtr timer_;
|
rclcpp::TimerBase::SharedPtr timer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
srand(time(NULL));
|
||||||
rclcpp::init(argc, argv);
|
rclcpp::init(argc, argv);
|
||||||
|
|
||||||
auto node = std::make_shared<NodeLes2ServiceClient>();
|
auto node = std::make_shared<NodeLes2ServiceClient>();
|
||||||
|
|||||||
@@ -1,28 +1,29 @@
|
|||||||
/* node_template.cpp
|
/* les2service_server.cpp
|
||||||
* Basic node template for ROS2
|
* Basic example of a service server node.
|
||||||
*
|
*
|
||||||
* Reviewed by: <x>
|
* Reviewed by: <x>
|
||||||
* Changelog:
|
* Changelog:
|
||||||
* [04-09-2025] Wessel T: Implement template
|
* [04-09-2025] Wessel T: Implement template
|
||||||
|
* [11-09-2025] Wessel T: (BASE) Working service client
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include "rclcpp/rclcpp.hpp"
|
#include "rclcpp/rclcpp.hpp"
|
||||||
|
|
||||||
#include "les_interface/srv/service_vector.hpp"
|
#include "les_interface/srv/service_vec.hpp"
|
||||||
|
|
||||||
using les_interface::srv::ServiceStudent;
|
using les_interface::srv::ServiceVec;
|
||||||
|
|
||||||
class NodeLes2ServiceServer : public rclcpp::Node {
|
class NodeLes2ServiceServer : public rclcpp::Node {
|
||||||
public:
|
public:
|
||||||
NodeLes2ServiceServer()
|
NodeLes2ServiceServer()
|
||||||
: Node("node_les2_service_server")
|
: Node("node_les2_service_server")
|
||||||
{
|
{
|
||||||
student_service_server_ =
|
vec_service_server_ =
|
||||||
this->create_service<ServiceStudent>(
|
this->create_service<ServiceVec>(
|
||||||
"student_service_server",
|
"vec_service_server",
|
||||||
std::bind(
|
std::bind(
|
||||||
&NodeLes2ServiceServer::callback_student_service,
|
&NodeLes2ServiceServer::callback_service,
|
||||||
this,
|
this,
|
||||||
std::placeholders::_1,
|
std::placeholders::_1,
|
||||||
std::placeholders::_2
|
std::placeholders::_2
|
||||||
@@ -32,19 +33,22 @@ public:
|
|||||||
RCLCPP_INFO(this->get_logger(), "Service Server started");
|
RCLCPP_INFO(this->get_logger(), "Service Server started");
|
||||||
}
|
}
|
||||||
|
|
||||||
void callback_student_service(
|
void callback_service(
|
||||||
const ServiceStudent::Request::SharedPtr request,
|
const ServiceVec::Request::SharedPtr request,
|
||||||
ServiceStudent::Response::SharedPtr response
|
ServiceVec::Response::SharedPtr response
|
||||||
) {
|
) {
|
||||||
if (request->sname == "Tilmann") {
|
response->vec_len = sqrt(
|
||||||
response->snumber = 666;
|
pow(request->x, 2) + pow(request->y, 2) + pow(request->z, 2)
|
||||||
} else {
|
);
|
||||||
response->snumber = 42;
|
|
||||||
}
|
RCLCPP_INFO(this->get_logger(),
|
||||||
|
"sqrt(pow(%.6lf), pow(%.6lf), pow(%.6lf))=%.6lf",
|
||||||
|
request->x, request->y, request->z, response->vec_len
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
rclcpp::Service<ServiceStudent>::SharedPtr student_service_server_;
|
rclcpp::Service<ServiceVec>::SharedPtr vec_service_server_;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user