39
39
#include < memory>
40
40
#include < mutex>
41
41
#include < utility>
42
+ #include < variant>
42
43
43
44
namespace reaction_analyzer
44
45
{
@@ -54,12 +55,24 @@ using autoware_auto_planning_msgs::msg::Trajectory;
54
55
using geometry_msgs::msg::Pose;
55
56
using nav_msgs::msg::Odometry;
56
57
using sensor_msgs::msg::PointCloud2;
58
+ using ControlBuffer = std::pair<std::vector<AckermannControlCommand>, std::optional<AckermannControlCommand>>;
59
+
60
+ using BufferVariant = std::variant<
61
+ ControlBuffer
62
+ // , std::vector<OtherMessageType> // Add other message types here
63
+ >;
64
+
65
+ enum class MessageType
66
+ {
67
+ Unknown = 0 ,
68
+ AckermannControlCommand = 1 ,
69
+ };
57
70
58
71
struct TopicConfig
59
72
{
60
73
std::string node_name;
61
74
std::string topic_address;
62
- std::string message_type;
75
+ MessageType message_type;
63
76
};
64
77
65
78
using ChainModules = std::vector<TopicConfig>;
@@ -96,24 +109,19 @@ struct NodeParams
96
109
int min_number_descending_order_control_cmd;
97
110
};
98
111
99
- struct ControlCommandWithSeenTime
100
- {
101
- explicit ControlCommandWithSeenTime (
102
- const rclcpp::Time & time, const AckermannControlCommand & cmd)
103
- : seen_time(time), control_cmd(cmd)
104
- {
105
- }
106
- rclcpp::Time seen_time;
107
- AckermannControlCommand control_cmd;
108
- };
109
-
110
112
class ReactionAnalyzerNode : public rclcpp ::Node
111
113
{
112
114
public:
113
115
explicit ReactionAnalyzerNode (rclcpp::NodeOptions options);
114
116
~ReactionAnalyzerNode () = default ;
115
117
116
118
private:
119
+ void initObservers (const ChainModules & modules);
120
+ std::vector<rclcpp::SubscriptionBase::SharedPtr> subscribers_;
121
+ void controlCommandOutputCallback (const std::string & node_name, const AckermannControlCommand::ConstSharedPtr msg_ptr);
122
+
123
+ std::unordered_map<std::string, BufferVariant> messageBuffers_;
124
+
117
125
std::mutex mutex_;
118
126
// Module list in chain
119
127
ChainModules chain_modules;
@@ -135,10 +143,6 @@ class ReactionAnalyzerNode : public rclcpp::Node
135
143
rclcpp::Subscription<LocalizationInitializationState>::SharedPtr sub_localization_init_state_;
136
144
rclcpp::Subscription<OperationModeState>::SharedPtr sub_operation_mode_;
137
145
138
- // Observer Subscribers
139
- rclcpp::Subscription<AckermannControlCommand>::SharedPtr sub_trajectory_follower_output;
140
- rclcpp::Subscription<AckermannControlCommand>::SharedPtr sub_vehicle_cmd_gate_output;
141
-
142
146
// Publishers
143
147
rclcpp::Publisher<PointCloud2>::SharedPtr pub_pointcloud_;
144
148
rclcpp::Publisher<PredictedObjects>::SharedPtr pub_predicted_objects_;
@@ -159,32 +163,28 @@ class ReactionAnalyzerNode : public rclcpp::Node
159
163
RouteState::ConstSharedPtr route_state_ptr);
160
164
void onTimer ();
161
165
void setControlCommandToBuffer (
162
- std::vector<ControlCommandWithSeenTime > & buffer, const AckermannControlCommand & cmd);
166
+ std::vector<AckermannControlCommand > & buffer, const AckermannControlCommand & cmd);
163
167
std::optional<size_t > findFirstBrakeIdx (
164
- const std::vector<ControlCommandWithSeenTime > & cmd_array);
168
+ const std::vector<AckermannControlCommand > & cmd_array);
165
169
166
170
// Callbacks
167
171
void vehiclePoseCallback (const Odometry::ConstSharedPtr msg_ptr);
168
172
void initializationStateCallback (const LocalizationInitializationState::ConstSharedPtr msg_ptr);
169
173
void routeStateCallback (const RouteState::ConstSharedPtr msg);
170
174
void operationModeCallback (const OperationModeState::ConstSharedPtr msg_ptr);
171
175
172
- // Observer Callbacks
173
- void trajectoryFollowerOutputCallback (const AckermannControlCommand::ConstSharedPtr msg_ptr);
174
- void vehicleCmdGateOutputCallback (const AckermannControlCommand::ConstSharedPtr msg_ptr);
175
-
176
176
// Variables
177
177
std::optional<rclcpp::Time> spawn_cmd_time;
178
178
bool is_test_environment_created_{false };
179
179
bool is_ego_initialized_{false };
180
180
bool is_route_set_{false };
181
181
bool is_output_printed{false };
182
+ bool all_topics_reacted_{false };
182
183
std::optional<rclcpp::Time> last_initialize_test_time_;
184
+
183
185
// measurement for control cmd
184
- std::vector<ControlCommandWithSeenTime> trajectory_follower_output_buffer_;
185
- std::vector<ControlCommandWithSeenTime> vehicle_cmd_gate_output_buffer_;
186
- std::optional<ControlCommandWithSeenTime> trajectory_follower_brake_cmd;
187
- std::optional<ControlCommandWithSeenTime> vehicle_cmd_gate_brake_cmd;
186
+ // std::optional<ControlCommandWithSeenTime> trajectory_follower_brake_cmd;
187
+ // std::optional<ControlCommandWithSeenTime> vehicle_cmd_gate_brake_cmd;
188
188
189
189
// Timer
190
190
rclcpp::TimerBase::SharedPtr timer_;
0 commit comments