4#include "custom_interfaces/msg/cone.hpp"
5#include "custom_interfaces/msg/cone_array.hpp"
6#include "custom_interfaces/msg/point2d.hpp"
7#include "custom_interfaces/msg/velocities.hpp"
11 rclcpp::SubscriptionOptions subscription_options;
16 this->create_callback_group(rclcpp::CallbackGroupType::Reentrant);
17 rclcpp::SubscriptionOptions parallel_opts;
21 this->create_subscription<pacsim::msg::PerceptionDetections>(
22 "/pacsim/perception/lidar/landmarks", 1,
24 std::placeholders::_1),
28 this->create_subscription<pacsim::msg::PerceptionDetections>(
29 "/pacsim/perception/lidar/landmarks", 1,
31 std::placeholders::_1));
37 this->create_subscription<geometry_msgs::msg::TwistWithCovarianceStamped>(
38 "/pacsim/velocity", 1,
40 std::placeholders::_1),
41 subscription_options);
45 "/pacsim/imu/cog_imu", 1,
47 subscription_options);
49 this->
_finished_client_ = this->create_client<std_srvs::srv::Empty>(
"/pacsim/finish_signal");
51 this->create_client<rcl_interfaces::srv::GetParameters>(
"/pacsim/pacsim_node/get_parameters");
58 if (!
param_client_->wait_for_service(std::chrono::milliseconds(100))) {
59 RCLCPP_ERROR(this->get_logger(),
"Service /pacsim/pacsim_node/get_parameters not available.");
61 auto request = std::make_shared<rcl_interfaces::srv::GetParameters::Request>();
62 request->names.push_back(
"discipline");
65 request, [
this](rclcpp::Client<rcl_interfaces::srv::GetParameters>::SharedFuture future) {
66 auto response = future.get();
68 common_lib::competition_logic::Mission::AUTOCROSS;
70 if (!response->values.empty() && response->values[0].type == 4) {
71 std::string discipline = response->values[0].string_value;
72 RCLCPP_INFO(this->get_logger(),
"Discipline received: %s", discipline.c_str());
74 if (discipline ==
"skidpad") {
75 mission_result = common_lib::competition_logic::Mission::SKIDPAD;
77 mission_result = common_lib::competition_logic::Mission::ACCELERATION;
79 mission_result = common_lib::competition_logic::Mission::TRACKDRIVE;
82 RCLCPP_ERROR(this->get_logger(),
"Failed to retrieve discipline parameter.");
92 std::make_shared<std_srvs::srv::Empty::Request>(),
93 [
this](rclcpp::Client<std_srvs::srv::Empty>::SharedFuture) {
94 RCLCPP_INFO(this->get_logger(),
"Finished signal sent");
99 const pacsim::msg::PerceptionDetections& msg) {
100 custom_interfaces::msg::ConeArray cone_array_msg;
101 for (
const pacsim::msg::PerceptionDetection& detection : msg.detections) {
102 custom_interfaces::msg::Point2d position = custom_interfaces::msg::Point2d();
103 position.x = detection.pose.pose.position.x;
104 position.y = detection.pose.pose.position.y;
105 auto cone_message = custom_interfaces::msg::Cone();
106 cone_message.position = position;
107 cone_message.confidence = detection.detection_probability;
109 common_lib::competition_logic::Color::UNKNOWN);
110 cone_array_msg.cone_array.push_back(cone_message);
112 cone_array_msg.header.stamp = msg.header.stamp;
113 custom_interfaces::msg::PerceptionOutput perception_output;
114 perception_output.header = cone_array_msg.header;
115 perception_output.cones = cone_array_msg;
116 perception_output.exec_time = 0.0;
121 const geometry_msgs::msg::TwistWithCovarianceStamped& msg) {
122 custom_interfaces::msg::Velocities velocities;
123 velocities.header.stamp = msg.header.stamp;
124 velocities.velocity_x = msg.twist.twist.linear.x;
125 velocities.velocity_y = msg.twist.twist.linear.y;
126 velocities.angular_velocity = msg.twist.twist.angular.z;
127 velocities.header.stamp = msg.header.stamp;
128 for (
unsigned int i = 0; i < 9; i++) {
129 velocities.covariance[i] = 0.00001;
rclcpp::Subscription< geometry_msgs::msg::TwistWithCovarianceStamped >::SharedPtr _velocities_subscription_
Subscriber for simulated velocities.
void _pacsim_imu_subscription_callback(const sensor_msgs::msg::Imu &msg)
Callback for simulated IMU data from pacsim.
rclcpp::Subscription< pacsim::msg::PerceptionDetections >::SharedPtr _perception_detections_subscription_
Subscriber for simulated perception detections.
void fetch_discipline()
Fetches the mission from the parameters.
rclcpp::Subscription< sensor_msgs::msg::Imu >::SharedPtr _imu_subscription_
Subscriber for simulated IMU data.
void _pacsim_perception_subscription_callback(const pacsim::msg::PerceptionDetections &msg)
Callback for simulated perception detections from pacsim.
void _pacsim_velocities_subscription_callback(const geometry_msgs::msg::TwistWithCovarianceStamped &msg)
Callback for simulated velocities from pacsim.
rclcpp::Client< rcl_interfaces::srv::GetParameters >::SharedPtr param_client_
PacsimAdapter(std::shared_ptr< SENode > se_node)
void finish() final
Function that sends the finish signal to the respective node.
rclcpp::Client< std_srvs::srv::Empty >::SharedPtr _finished_client_
Client for finished signal.
Class representing the main SLAM node responsible for publishing the calculated pose and map.
rclcpp::CallbackGroup::SharedPtr _callback_group_
Callback group for subscriptions, used to control if they are concurrent or not.
common_lib::competition_logic::Mission _mission_
void _velocities_subscription_callback(const custom_interfaces::msg::Velocities &msg)
Callback that updates everytime information is received from velocity estimation node.
rclcpp::CallbackGroup::SharedPtr _parallel_callback_group_
void _perception_subscription_callback(const custom_interfaces::msg::PerceptionOutput &msg)
Callback that updates everytime information is received from the perception module.
void _imu_subscription_callback(const sensor_msgs::msg::Imu &msg)
Callback that updates everytime information is received from the IMU.
std::shared_ptr< SLAMSolver > _slam_solver_
SLAM solver object.
std::string get_color_string(int color)
Parameters for the SLAM node.
bool use_simulated_perception_
std::string slam_optimization_mode_
std::string slam_solver_name_
bool use_simulated_velocities_