1
- // Copyright 2023 TIER IV, Inc.
1
+ // Copyright 2025 TIER IV, Inc.
2
2
//
3
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
4
// you may not use this file except in compliance with the License.
12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
- #ifndef SIMPLE_OBJECT_MERGER_NODE_HPP_
16
- #define SIMPLE_OBJECT_MERGER_NODE_HPP_
15
+ #ifndef AUTOWARE__SIMPLE_OBJECT_MERGER__SIMPLE_OBJECT_MERGER_BASE_HPP_
16
+ #define AUTOWARE__SIMPLE_OBJECT_MERGER__SIMPLE_OBJECT_MERGER_BASE_HPP_
17
17
18
18
#include " autoware_utils/ros/transform_listener.hpp"
19
19
#include " rclcpp/rclcpp.hpp"
20
20
21
- #include " autoware_perception_msgs/msg/detected_objects.hpp"
22
-
23
21
#include < message_filters/subscriber.h>
24
22
#include < message_filters/sync_policies/approximate_time.h>
25
23
#include < message_filters/synchronizer.h>
31
29
32
30
namespace autoware ::simple_object_merger
33
31
{
34
- using autoware_perception_msgs::msg::DetectedObject;
35
- using autoware_perception_msgs::msg::DetectedObjects;
36
32
37
- class SimpleObjectMergerNode : public rclcpp ::Node
33
+ template <class ObjsMsgType >
34
+ class SimpleObjectMergerBase : public rclcpp ::Node
38
35
{
39
36
public:
40
- explicit SimpleObjectMergerNode (const rclcpp::NodeOptions & node_options);
37
+ explicit SimpleObjectMergerBase (
38
+ const std::string & node_name, const rclcpp::NodeOptions & node_options);
41
39
42
40
struct NodeParam
43
41
{
@@ -49,52 +47,60 @@ class SimpleObjectMergerNode : public rclcpp::Node
49
47
50
48
private:
51
49
// Subscriber
52
- rclcpp::Subscription<DetectedObjects>::SharedPtr sub_objects_{};
53
- std::vector<rclcpp::Subscription<DetectedObjects>::SharedPtr> sub_objects_array{};
54
- std::shared_ptr<autoware_utils::TransformListener> transform_listener_;
50
+ typename rclcpp::Subscription<ObjsMsgType>::SharedPtr sub_objects_{};
51
+ std::vector<typename rclcpp::Subscription<ObjsMsgType>::SharedPtr> sub_objects_array{};
55
52
56
53
// Subscriber by message_filter
57
- message_filters::Subscriber<DetectedObjects> input0_{};
58
- message_filters::Subscriber<DetectedObjects> input1_{};
59
- using SyncPolicy =
60
- message_filters::sync_policies::ApproximateTime<DetectedObjects, DetectedObjects>;
54
+ typename message_filters::Subscriber<ObjsMsgType> input0_{};
55
+ typename message_filters::Subscriber<ObjsMsgType> input1_{};
56
+ using SyncPolicy = message_filters::sync_policies::ApproximateTime<ObjsMsgType, ObjsMsgType>;
61
57
using Sync = message_filters::Synchronizer<SyncPolicy>;
62
58
typename std::shared_ptr<Sync> sync_ptr_;
63
59
64
- // Process callbacks
65
- void approximateMerger (
66
- const DetectedObjects::ConstSharedPtr & object_msg0,
67
- const DetectedObjects::ConstSharedPtr & object_msg1);
68
-
69
- void onData (const DetectedObjects::ConstSharedPtr msg, size_t array_number);
70
-
71
- // Data Buffer
72
- std::vector<DetectedObjects::ConstSharedPtr> objects_data_{};
73
- geometry_msgs::msg::TransformStamped::ConstSharedPtr transform_;
74
-
75
- // Publisher
76
- rclcpp::Publisher<DetectedObjects>::SharedPtr pub_objects_{};
77
-
78
60
// Timer
79
61
rclcpp::TimerBase::SharedPtr timer_{};
80
- void onTimer ();
81
- bool isDataReady ();
82
- bool shouldLogThrottle (
83
- size_t index, const rclcpp::Time & now, std::vector<rclcpp::Time> & last_log_times,
84
- double throttle_interval_sec);
85
62
86
63
// Parameter Server
87
64
OnSetParametersCallbackHandle::SharedPtr set_param_res_;
65
+
66
+ // Process callbacks
67
+ virtual void approximateMerger (
68
+ const typename ObjsMsgType::ConstSharedPtr & object_msg0,
69
+ const typename ObjsMsgType::ConstSharedPtr & object_msg1);
70
+
71
+ virtual void onTimer ();
72
+
73
+ void onData (const typename ObjsMsgType::ConstSharedPtr msg, size_t array_number);
74
+
88
75
rcl_interfaces::msg::SetParametersResult onSetParam (
89
76
const std::vector<rclcpp::Parameter> & params);
90
77
78
+ protected:
79
+ // Publisher
80
+ typename rclcpp::Publisher<ObjsMsgType>::SharedPtr pub_objects_{};
81
+
82
+ std::shared_ptr<autoware_utils::TransformListener> transform_listener_;
83
+ geometry_msgs::msg::TransformStamped::ConstSharedPtr transform_;
84
+
85
+ // Data Buffer
86
+ std::vector<typename ObjsMsgType::ConstSharedPtr> objects_data_{};
87
+
88
+ // Core
89
+ size_t input_topic_size_;
90
+
91
91
// Parameter
92
92
NodeParam node_param_{};
93
93
94
- // Core
95
- size_t input_topic_size;
94
+ bool isDataReady ();
95
+ bool shouldLogThrottle (
96
+ size_t index, const rclcpp::Time & now, std::vector<rclcpp::Time> & last_log_times,
97
+ double throttle_interval_sec);
98
+
99
+ typename ObjsMsgType::SharedPtr getTransformedObjects (
100
+ typename ObjsMsgType::ConstSharedPtr objects, const std::string & target_frame_id,
101
+ geometry_msgs::msg::TransformStamped::ConstSharedPtr transform);
96
102
};
97
103
98
104
} // namespace autoware::simple_object_merger
99
105
100
- #endif // SIMPLE_OBJECT_MERGER_NODE_HPP_
106
+ #endif // AUTOWARE__SIMPLE_OBJECT_MERGER__SIMPLE_OBJECT_MERGER_BASE_HPP_
0 commit comments