29
29
30
30
namespace autoware ::test_utils
31
31
{
32
- Pose parse_pose (const YAML::Node & node)
32
+ template <>
33
+ Pose parse (const YAML::Node & node)
33
34
{
34
35
Pose pose;
35
36
pose.position .x = node[" position" ][" x" ].as <double >();
@@ -42,7 +43,8 @@ Pose parse_pose(const YAML::Node & node)
42
43
return pose;
43
44
}
44
45
45
- LaneletPrimitive parse_lanelet_primitive (const YAML::Node & node)
46
+ template <>
47
+ LaneletPrimitive parse (const YAML::Node & node)
46
48
{
47
49
LaneletPrimitive primitive;
48
50
primitive.id = node[" id" ].as <int64_t >();
@@ -51,43 +53,131 @@ LaneletPrimitive parse_lanelet_primitive(const YAML::Node & node)
51
53
return primitive;
52
54
}
53
55
54
- std::vector<LaneletPrimitive> parse_lanelet_primitives (const YAML::Node & node)
56
+ template <>
57
+ std::vector<LaneletPrimitive> parse (const YAML::Node & node)
55
58
{
56
59
std::vector<LaneletPrimitive> primitives;
57
60
primitives.reserve (node.size ());
58
61
std::transform (node.begin (), node.end (), std::back_inserter (primitives), [&](const auto & p) {
59
- return parse_lanelet_primitive (p);
62
+ return parse<LaneletPrimitive> (p);
60
63
});
61
64
62
65
return primitives;
63
66
}
64
67
65
- std::vector<LaneletSegment> parse_segments (const YAML::Node & node)
68
+ template <>
69
+ std::vector<LaneletSegment> parse (const YAML::Node & node)
66
70
{
67
71
std::vector<LaneletSegment> segments;
68
72
std::transform (node.begin (), node.end (), std::back_inserter (segments), [&](const auto & input) {
69
73
LaneletSegment segment;
70
- segment.preferred_primitive = parse_lanelet_primitive (input[" preferred_primitive" ]);
71
- segment.primitives = parse_lanelet_primitives (input[" primitives" ]);
74
+ segment.preferred_primitive = parse<LaneletPrimitive> (input[" preferred_primitive" ]);
75
+ segment.primitives = parse<std::vector<LaneletPrimitive>> (input[" primitives" ]);
72
76
return segment;
73
77
});
74
78
75
79
return segments;
76
80
}
77
81
78
- // cppcheck-suppress unusedFunction
79
- LaneletRoute parse_lanelet_route_file (const std::string & filename)
82
+ template <>
83
+ std::vector<Point > parse (const YAML::Node & node)
84
+ {
85
+ std::vector<Point > geom_points;
86
+
87
+ std::transform (
88
+ node.begin (), node.end (), std::back_inserter (geom_points), [&](const YAML::Node & input) {
89
+ Point point;
90
+ point.x = input[" x" ].as <double >();
91
+ point.y = input[" y" ].as <double >();
92
+ point.z = input[" z" ].as <double >();
93
+ return point;
94
+ });
95
+
96
+ return geom_points;
97
+ }
98
+
99
+ template <>
100
+ Header parse (const YAML::Node & node)
101
+ {
102
+ Header header;
103
+
104
+ if (!node[" header" ]) {
105
+ return header;
106
+ }
107
+
108
+ header.stamp .sec = node[" header" ][" stamp" ][" sec" ].as <int >();
109
+ header.stamp .nanosec = node[" header" ][" stamp" ][" nanosec" ].as <uint32_t >();
110
+ header.frame_id = node[" header" ][" frame_id" ].as <std::string>();
111
+
112
+ return header;
113
+ }
114
+
115
+ template <>
116
+ std::vector<PathPointWithLaneId> parse<std::vector<PathPointWithLaneId>>(const YAML::Node & node)
117
+ {
118
+ std::vector<PathPointWithLaneId> path_points;
119
+
120
+ if (!node[" points" ]) {
121
+ return path_points;
122
+ }
123
+
124
+ const auto & points = node[" points" ];
125
+ path_points.reserve (points.size ());
126
+ std::transform (
127
+ points.begin (), points.end (), std::back_inserter (path_points), [&](const YAML::Node & input) {
128
+ PathPointWithLaneId point;
129
+ if (!input[" point" ]) {
130
+ return point;
131
+ }
132
+ const auto & point_node = input[" point" ];
133
+ point.point .pose = parse<Pose>(point_node[" pose" ]);
134
+
135
+ point.point .longitudinal_velocity_mps = point_node[" longitudinal_velocity_mps" ].as <float >();
136
+ point.point .lateral_velocity_mps = point_node[" lateral_velocity_mps" ].as <float >();
137
+ point.point .heading_rate_rps = point_node[" heading_rate_rps" ].as <float >();
138
+ point.point .is_final = point_node[" is_final" ].as <bool >();
139
+ // Fill the lane_ids
140
+ for (const auto & lane_id_node : input[" lane_ids" ]) {
141
+ point.lane_ids .push_back (lane_id_node.as <int64_t >());
142
+ }
143
+
144
+ return point;
145
+ });
146
+
147
+ return path_points;
148
+ }
149
+
150
+ template <>
151
+ LaneletRoute parse (const std::string & filename)
80
152
{
81
153
LaneletRoute lanelet_route;
82
154
try {
83
155
YAML::Node config = YAML::LoadFile (filename);
84
156
85
- lanelet_route.start_pose = (config[" start_pose" ]) ? parse_pose (config[" start_pose" ]) : Pose ();
86
- lanelet_route.goal_pose = (config[" goal_pose" ]) ? parse_pose (config[" goal_pose" ]) : Pose ();
87
- lanelet_route.segments = parse_segments (config[" segments" ]);
157
+ lanelet_route.start_pose = (config[" start_pose" ]) ? parse<Pose> (config[" start_pose" ]) : Pose ();
158
+ lanelet_route.goal_pose = (config[" goal_pose" ]) ? parse<Pose> (config[" goal_pose" ]) : Pose ();
159
+ lanelet_route.segments = parse<std::vector<LaneletSegment>> (config[" segments" ]);
88
160
} catch (const std::exception & e) {
89
161
RCLCPP_DEBUG (rclcpp::get_logger (" autoware_test_utils" ), " Exception caught: %s" , e.what ());
90
162
}
91
163
return lanelet_route;
92
164
}
165
+
166
+ template <>
167
+ PathWithLaneId parse (const std::string & filename)
168
+ {
169
+ PathWithLaneId path;
170
+ try {
171
+ YAML::Node yaml_node = YAML::LoadFile (filename);
172
+
173
+ path.header = parse<Header>(yaml_node);
174
+ path.points = parse<std::vector<PathPointWithLaneId>>(yaml_node);
175
+ path.left_bound = parse<std::vector<Point >>(yaml_node[" left_bound" ]);
176
+ path.right_bound = parse<std::vector<Point >>(yaml_node[" right_bound" ]);
177
+ } catch (const std::exception & e) {
178
+ RCLCPP_DEBUG (rclcpp::get_logger (" autoware_test_utils" ), " Exception caught: %s" , e.what ());
179
+ }
180
+
181
+ return path;
182
+ }
93
183
} // namespace autoware::test_utils
0 commit comments