#ifndef IO__ROS2_HPP #define IO__ROS2_HPP #include "publish2nav.hpp" #include "subscribe2nav.hpp" namespace io { class ROS2 { public: ROS2(); ~ROS2(); void publish(const Eigen::Vector4d & target_pos); std::vector subscribe_enemy_status(); std::vector subscribe_autoaim_target(); template std::shared_ptr> create_publisher( const std::string & node_name, const std::string & topic_name, size_t queue_size) { auto node = std::make_shared(node_name); auto publisher = node->create_publisher(topic_name, queue_size); // 运行一个单独的线程来 spin 这个节点,确保消息可以被正确发布 std::thread([node]() { rclcpp::spin(node); }).detach(); return publisher; } private: std::shared_ptr publish2nav_; std::shared_ptr subscribe2nav_; std::unique_ptr publish_spin_thread_; std::unique_ptr subscribe_spin_thread_; }; } // namespace io #endif