27
27
#include < Ros2InitGuard.hpp>
28
28
#include < radar_msgs/msg/radar_scan.hpp>
29
29
30
- struct Ros2PublishPointsNode : IPointsNodeSingleInput
30
+ struct Ros2Node : IPointsNodeSingleInput
31
+ {
32
+ Ros2Node () { ros2InitGuard = Ros2InitGuard::acquire (); }
33
+
34
+ void enqueueExecImpl () final
35
+ {
36
+ if (!rclcpp::ok ()) {
37
+ throw InvalidPipeline (" Unable to execute Ros2Node because ROS2 has been shut down." );
38
+ }
39
+ ros2EnqueueExecImpl ();
40
+ }
41
+
42
+ void validateImpl () final
43
+ {
44
+ IPointsNodeSingleInput::validateImpl ();
45
+ ros2ValidateImpl ();
46
+ }
47
+
48
+ virtual ~Ros2Node () = default ;
49
+
50
+ protected:
51
+ std::shared_ptr<Ros2InitGuard> ros2InitGuard;
52
+
53
+ virtual void ros2EnqueueExecImpl () = 0;
54
+ virtual void ros2ValidateImpl () = 0;
55
+ };
56
+
57
+ struct Ros2PublishPointsNode : Ros2Node
31
58
{
32
59
using Ptr = std::shared_ptr<Ros2PublishPointsNode>;
33
60
@@ -36,39 +63,37 @@ struct Ros2PublishPointsNode : IPointsNodeSingleInput
36
63
rgl_qos_policy_durability_t qosDurability = QOS_POLICY_DURABILITY_SYSTEM_DEFAULT,
37
64
rgl_qos_policy_history_t qosHistory = QOS_POLICY_HISTORY_SYSTEM_DEFAULT, int32_t qosHistoryDepth = 10 );
38
65
39
- // Node
40
- void validateImpl () override ;
41
- void enqueueExecImpl () override ;
66
+ // Ros2Node
67
+ void ros2ValidateImpl () override ;
68
+ void ros2EnqueueExecImpl () override ;
42
69
43
70
~Ros2PublishPointsNode () override = default ;
44
71
45
72
private:
46
73
DeviceAsyncArray<char >::Ptr inputFmtData = DeviceAsyncArray<char >::create(arrayMgr);
47
74
48
- std::shared_ptr<Ros2InitGuard> ros2InitGuard;
49
75
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr ros2Publisher;
50
76
sensor_msgs::msg::PointCloud2 ros2Message;
51
77
52
78
void updateRos2Message (const std::vector<rgl_field_t >& fields, bool isDense);
53
79
};
54
80
55
81
56
- struct Ros2PublishPointVelocityMarkersNode : IPointsNodeSingleInput
82
+ struct Ros2PublishPointVelocityMarkersNode : Ros2Node
57
83
{
58
84
using Ptr = std::shared_ptr<Ros2PublishPointVelocityMarkersNode>;
59
85
60
86
void setParameters (const char * topicName, const char * frameId, rgl_field_t velocityField);
61
87
std::vector<rgl_field_t > getRequiredFieldList () const override { return {XYZ_VEC3_F32, velocityField}; }
62
88
63
- // Node
64
- void validateImpl () override ;
65
- void enqueueExecImpl () override ;
89
+ // Ros2Node
90
+ void ros2ValidateImpl () override ;
91
+ void ros2EnqueueExecImpl () override ;
66
92
67
93
~Ros2PublishPointVelocityMarkersNode () override = default ;
68
94
69
95
private:
70
96
std::string frameId;
71
- std::shared_ptr<Ros2InitGuard> ros2InitGuard;
72
97
rclcpp::Publisher<visualization_msgs::msg::Marker>::SharedPtr linesPublisher;
73
98
HostPinnedArray<Vec3f>::Ptr pos = HostPinnedArray<Vec3f>::create();
74
99
HostPinnedArray<Vec3f>::Ptr vel = HostPinnedArray<Vec3f>::create();
@@ -78,21 +103,22 @@ struct Ros2PublishPointVelocityMarkersNode : IPointsNodeSingleInput
78
103
const visualization_msgs::msg::Marker& makeLinesMarker ();
79
104
};
80
105
81
- struct Ros2PublishRadarScanNode : IPointsNodeSingleInput
106
+ struct Ros2PublishRadarScanNode : Ros2Node
82
107
{
83
108
void setParameters (const char * topicName, const char * frameId, rgl_qos_policy_reliability_t qosReliability,
84
109
rgl_qos_policy_durability_t qosDurability, rgl_qos_policy_history_t qosHistory, int32_t qosHistoryDepth);
85
110
std::vector<rgl_field_t > getRequiredFieldList () const override
86
111
{
87
112
return {DISTANCE_F32, AZIMUTH_F32, ELEVATION_F32, RADIAL_SPEED_F32, /* placeholder for amplitude */ PADDING_32};
88
113
}
89
- void validateImpl () override ;
90
- void enqueueExecImpl () override ;
114
+
115
+ // Ros2Node
116
+ void ros2ValidateImpl () override ;
117
+ void ros2EnqueueExecImpl () override ;
91
118
92
119
private:
93
120
radar_msgs::msg::RadarScan ros2Message;
94
121
rclcpp::Publisher<radar_msgs::msg::RadarScan>::SharedPtr ros2Publisher;
95
122
DeviceAsyncArray<char >::Ptr formattedData = DeviceAsyncArray<char >::create(arrayMgr);
96
- std::shared_ptr<Ros2InitGuard> ros2InitGuard;
97
123
GPUFieldDescBuilder fieldDescBuilder;
98
124
};
0 commit comments