ros2_control - kilted
Loading...
Searching...
No Matches
wrench_transformer.hpp
1// Copyright (c) 2025, ros2_control development team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15/*
16 * Authors: Julia Jia
17 */
18
19#ifndef FORCE_TORQUE_SENSOR_BROADCASTER__WRENCH_TRANSFORMER_HPP_
20#define FORCE_TORQUE_SENSOR_BROADCASTER__WRENCH_TRANSFORMER_HPP_
21
22#include <memory>
23#include <string>
24#include <unordered_map>
25#include <vector>
26
27#include "geometry_msgs/msg/wrench_stamped.hpp"
28#include "rclcpp/rclcpp.hpp"
29#include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
30#include "tf2_ros/buffer.hpp"
31#include "tf2_ros/transform_listener.hpp"
32
33// auto-generated by generate_parameter_library
34#include "force_torque_sensor_broadcaster/wrench_transformer_parameters.hpp"
35
36namespace force_torque_sensor_broadcaster
37{
38
39class WrenchTransformer : public rclcpp::Node
40{
41public:
42 explicit WrenchTransformer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
43
44 void init();
45
46 ~WrenchTransformer() = default;
47
48private:
49 void wrench_callback(const geometry_msgs::msg::WrenchStamped::SharedPtr msg);
50 bool transform_wrench(
51 const geometry_msgs::msg::WrenchStamped & input_wrench, const std::string & target_frame,
52 geometry_msgs::msg::WrenchStamped & output_wrench);
53
54 void setup_subscriber();
55 void setup_publishers();
56
63 std::string normalize_namespace_for_topics() const;
64
65 std::shared_ptr<force_torque_wrench_transformer::ParamListener> param_listener_;
66 force_torque_wrench_transformer::Params params_;
67
68 rclcpp::Subscription<geometry_msgs::msg::WrenchStamped>::SharedPtr wrench_subscriber_;
69 std::unordered_map<std::string, rclcpp::Publisher<geometry_msgs::msg::WrenchStamped>::SharedPtr>
70 transformed_wrench_publishers_;
71
72 std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
73 std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
74
75 std::string input_topic_;
76 std::string output_topic_suffix_; // e.g., "" or "_filtered" based on input topic
77 std::vector<std::string> target_frames_;
78};
79
80// Function to run wrench transformer (extracted from main for testability)
81int run_wrench_transformer(int argc, char ** argv);
82
83} // namespace force_torque_sensor_broadcaster
84
85#endif // FORCE_TORQUE_SENSOR_BROADCASTER__WRENCH_TRANSFORMER_HPP_
Definition wrench_transformer.hpp:40