|
44 | 44 | #include <rclcpp/rclcpp.hpp> |
45 | 45 | #include <sensor_msgs/msg/point_cloud2.hpp> |
46 | 46 | #include <std_msgs/msg/string.hpp> |
47 | | - |
| 47 | +#include <std_srvs/srv/empty.hpp> |
48 | 48 | namespace { |
49 | 49 | Sophus::SE3d LookupTransform(const std::string &target_frame, |
50 | 50 | const std::string &source_frame, |
@@ -98,6 +98,10 @@ OdometryServer::OdometryServer(const rclcpp::NodeOptions &options) |
98 | 98 | tf2_buffer_ = std::make_unique<tf2_ros::Buffer>(this->get_clock()); |
99 | 99 | tf2_buffer_->setUsingDedicatedThread(true); |
100 | 100 | tf2_listener_ = std::make_unique<tf2_ros::TransformListener>(*tf2_buffer_); |
| 101 | + // Initialize service servers |
| 102 | + reset_service_ = create_service<std_srvs::srv::Empty>( |
| 103 | + "kiss/reset", std::bind(&OdometryServer::ResetService, this, std::placeholders::_1, |
| 104 | + std::placeholders::_2)); |
101 | 105 |
|
102 | 106 | RCLCPP_INFO(this->get_logger(), "KISS-ICP ROS 2 odometry node initialized"); |
103 | 107 | } |
@@ -223,11 +227,20 @@ void OdometryServer::PublishClouds(const std::vector<Eigen::Vector3d> &frame, |
223 | 227 |
|
224 | 228 | frame_publisher_->publish(std::move(EigenToPointCloud2(frame, header))); |
225 | 229 | kpoints_publisher_->publish(std::move(EigenToPointCloud2(keypoints, header))); |
226 | | - |
227 | 230 | auto local_map_header = header; |
228 | 231 | local_map_header.frame_id = lidar_odom_frame_; |
229 | 232 | map_publisher_->publish(std::move(EigenToPointCloud2(kiss_map, local_map_header))); |
230 | 233 | } |
| 234 | +void OdometryServer::ResetService( |
| 235 | + [[maybe_unused]] const std::shared_ptr<std_srvs::srv::Empty::Request> request, |
| 236 | + [[maybe_unused]] std::shared_ptr<std_srvs::srv::Empty::Response> response) { |
| 237 | + RCLCPP_INFO(this->get_logger(), "Resetting KISS-ICP map and odometry"); |
| 238 | + |
| 239 | + // Reset the KISS-ICP pipeline |
| 240 | + kiss_icp_->Reset(); |
| 241 | + |
| 242 | + RCLCPP_INFO(this->get_logger(), "KISS-ICP reset completed successfully"); |
| 243 | +} |
231 | 244 | } // namespace kiss_icp_ros |
232 | 245 |
|
233 | 246 | #include "rclcpp_components/register_node_macro.hpp" |
|
0 commit comments