|
21 | 21 | #include <autoware/universe_utils/geometry/geometry.hpp>
|
22 | 22 | #include <autoware/universe_utils/ros/marker_helper.hpp>
|
23 | 23 |
|
24 |
| -#include <geometry_msgs/msg/detail/point__struct.hpp> |
25 |
| -#include <geometry_msgs/msg/detail/pose__struct.hpp> |
26 |
| -#include <std_msgs/msg/detail/color_rgba__struct.hpp> |
27 |
| -#include <visualization_msgs/msg/detail/marker__struct.hpp> |
| 24 | +#include <autoware_planning_msgs/msg/trajectory_point.hpp> |
| 25 | +#include <geometry_msgs/msg/point.hpp> |
| 26 | +#include <geometry_msgs/msg/pose.hpp> |
| 27 | +#include <std_msgs/msg/color_rgba.hpp> |
28 | 28 | #include <visualization_msgs/msg/marker.hpp>
|
| 29 | +#include <visualization_msgs/msg/marker_array.hpp> |
29 | 30 |
|
30 | 31 | #include <boost/geometry/algorithms/centroid.hpp>
|
31 | 32 | #include <boost/geometry/algorithms/for_each.hpp>
|
|
36 | 37 | #include <lanelet2_core/primitives/Polygon.h>
|
37 | 38 |
|
38 | 39 | #include <string>
|
| 40 | +#include <vector> |
39 | 41 |
|
40 | 42 | namespace autoware::motion_velocity_planner::out_of_lane::debug
|
41 | 43 | {
|
@@ -151,63 +153,88 @@ size_t add_stop_line_markers(
|
151 | 153 | }
|
152 | 154 | return max_id;
|
153 | 155 | }
|
154 |
| -} // namespace |
155 | 156 |
|
156 |
| -visualization_msgs::msg::MarkerArray create_debug_marker_array( |
157 |
| - const EgoData & ego_data, const OutOfLaneData & out_of_lane_data, |
158 |
| - const autoware_perception_msgs::msg::PredictedObjects & objects, DebugData & debug_data) |
| 157 | +void add_out_lanelets( |
| 158 | + visualization_msgs::msg::MarkerArray & marker_array, visualization_msgs::msg::Marker base_marker, |
| 159 | + const lanelet::ConstLanelets & out_lanelets) |
159 | 160 | {
|
160 |
| - const auto z = ego_data.pose.position.z; |
161 |
| - visualization_msgs::msg::MarkerArray debug_marker_array; |
162 |
| - |
163 |
| - auto base_marker = get_base_marker(); |
164 |
| - base_marker.pose.position.z = z + 0.5; |
165 |
| - base_marker.ns = "footprints"; |
166 |
| - base_marker.color = universe_utils::createMarkerColor(1.0, 1.0, 1.0, 1.0); |
167 |
| - // TODO(Maxime): move the debug marker publishing AFTER the trajectory generation |
168 |
| - // disabled to prevent performance issues when publishing the debug markers |
169 |
| - // add_polygons_markers(debug_marker_array, base_marker, ego_data.trajectory_footprints); |
170 |
| - |
171 | 161 | lanelet::BasicPolygons2d drivable_lane_polygons;
|
172 |
| - for (const auto & poly : ego_data.drivable_lane_polygons) { |
173 |
| - drivable_lane_polygons.push_back(poly.outer); |
| 162 | + for (const auto & ll : out_lanelets) { |
| 163 | + drivable_lane_polygons.push_back(ll.polygon2d().basicPolygon()); |
174 | 164 | }
|
175 |
| - base_marker.ns = "ego_lane"; |
| 165 | + base_marker.ns = "out_lanelets"; |
176 | 166 | base_marker.color = universe_utils::createMarkerColor(0.0, 0.0, 1.0, 1.0);
|
177 |
| - add_polygons_markers(debug_marker_array, base_marker, drivable_lane_polygons); |
| 167 | + add_polygons_markers(marker_array, base_marker, drivable_lane_polygons); |
| 168 | +} |
178 | 169 |
|
179 |
| - lanelet::BasicPolygons2d out_of_lane_areas; |
180 |
| - for (const auto & p : out_of_lane_data.outside_points) { |
181 |
| - out_of_lane_areas.push_back(p.outside_ring); |
| 170 | +void add_out_of_lane_overlaps( |
| 171 | + visualization_msgs::msg::MarkerArray & marker_array, visualization_msgs::msg::Marker base_marker, |
| 172 | + const std::vector<OutOfLanePoint> & outside_points, |
| 173 | + const std::vector<autoware_planning_msgs::msg::TrajectoryPoint> & trajectory) |
| 174 | +{ |
| 175 | + lanelet::BasicPolygons2d out_of_lane_overlaps; |
| 176 | + lanelet::BasicPolygon2d out_of_lane_overlap; |
| 177 | + for (const auto & p : outside_points) { |
| 178 | + for (const auto & overlap : p.out_overlaps) { |
| 179 | + boost::geometry::convert(overlap, out_of_lane_overlap); |
| 180 | + out_of_lane_overlaps.push_back(out_of_lane_overlap); |
| 181 | + } |
182 | 182 | }
|
183 | 183 | base_marker.ns = "out_of_lane_areas";
|
184 | 184 | base_marker.color = universe_utils::createMarkerColor(1.0, 0.0, 0.0, 1.0);
|
185 |
| - add_polygons_markers(debug_marker_array, base_marker, out_of_lane_areas); |
186 |
| - for (const auto & [bbox, i] : out_of_lane_data.outside_areas_rtree) { |
187 |
| - const auto & a = out_of_lane_data.outside_points[i]; |
188 |
| - debug_marker_array.markers.back().points.push_back( |
189 |
| - ego_data.trajectory_points[a.trajectory_index].pose.position); |
190 |
| - const auto centroid = boost::geometry::return_centroid<lanelet::BasicPoint2d>(a.outside_ring); |
191 |
| - debug_marker_array.markers.back().points.push_back( |
192 |
| - geometry_msgs::msg::Point().set__x(centroid.x()).set__y(centroid.y())); |
| 185 | + add_polygons_markers(marker_array, base_marker, out_of_lane_overlaps); |
| 186 | + for (const auto & p : outside_points) { |
| 187 | + for (const auto & a : p.out_overlaps) { |
| 188 | + marker_array.markers.back().points.push_back(trajectory[p.trajectory_index].pose.position); |
| 189 | + const auto centroid = boost::geometry::return_centroid<lanelet::BasicPoint2d>(a); |
| 190 | + marker_array.markers.back().points.push_back( |
| 191 | + geometry_msgs::msg::Point().set__x(centroid.x()).set__y(centroid.y())); |
| 192 | + } |
193 | 193 | }
|
194 |
| - |
| 194 | +} |
| 195 | +void add_predicted_paths( |
| 196 | + visualization_msgs::msg::MarkerArray & marker_array, visualization_msgs::msg::Marker base_marker, |
| 197 | + const autoware_perception_msgs::msg::PredictedObjects & objects, |
| 198 | + const geometry_msgs::msg::Pose & ego_pose) |
| 199 | +{ |
| 200 | + base_marker.ns = "objects"; |
| 201 | + base_marker.color = universe_utils::createMarkerColor(0.0, 1.0, 0.0, 1.0); |
195 | 202 | lanelet::BasicPolygons2d object_polygons;
|
| 203 | + constexpr double max_draw_distance = 50.0; |
196 | 204 | for (const auto & o : objects.objects) {
|
197 | 205 | for (const auto & path : o.kinematics.predicted_paths) {
|
198 | 206 | for (const auto & pose : path.path) {
|
199 | 207 | // limit the draw distance to improve performance
|
200 |
| - if (universe_utils::calcDistance2d(pose, ego_data.pose) < 50.0) { |
| 208 | + if (universe_utils::calcDistance2d(pose, ego_pose) < max_draw_distance) { |
201 | 209 | const auto poly = universe_utils::toPolygon2d(pose, o.shape).outer();
|
202 | 210 | lanelet::BasicPolygon2d ll_poly(poly.begin(), poly.end());
|
203 | 211 | object_polygons.push_back(ll_poly);
|
204 | 212 | }
|
205 | 213 | }
|
206 | 214 | }
|
207 | 215 | }
|
208 |
| - base_marker.ns = "objects"; |
209 |
| - base_marker.color = universe_utils::createMarkerColor(0.0, 1.0, 0.0, 1.0); |
210 |
| - add_polygons_markers(debug_marker_array, base_marker, object_polygons); |
| 216 | + add_polygons_markers(marker_array, base_marker, object_polygons); |
| 217 | +} |
| 218 | +} // namespace |
| 219 | + |
| 220 | +visualization_msgs::msg::MarkerArray create_debug_marker_array( |
| 221 | + const EgoData & ego_data, const OutOfLaneData & out_of_lane_data, |
| 222 | + const autoware_perception_msgs::msg::PredictedObjects & objects, DebugData & debug_data) |
| 223 | +{ |
| 224 | + const auto z = ego_data.pose.position.z; |
| 225 | + visualization_msgs::msg::MarkerArray debug_marker_array; |
| 226 | + |
| 227 | + auto base_marker = get_base_marker(); |
| 228 | + base_marker.pose.position.z = z + 0.5; |
| 229 | + base_marker.ns = "footprints"; |
| 230 | + base_marker.color = universe_utils::createMarkerColor(1.0, 1.0, 1.0, 1.0); |
| 231 | + // TODO(Maxime): move the debug marker publishing AFTER the trajectory generation |
| 232 | + // disabled to prevent performance issues when publishing the debug markers |
| 233 | + // add_polygons_markers(debug_marker_array, base_marker, ego_data.trajectory_footprints); |
| 234 | + add_out_lanelets(debug_marker_array, base_marker, ego_data.out_lanelets); |
| 235 | + add_out_of_lane_overlaps( |
| 236 | + debug_marker_array, base_marker, out_of_lane_data.outside_points, ego_data.trajectory_points); |
| 237 | + add_predicted_paths(debug_marker_array, base_marker, objects, ego_data.pose); |
211 | 238 |
|
212 | 239 | add_current_overlap_marker(debug_marker_array, ego_data.current_footprint, z);
|
213 | 240 |
|
|
0 commit comments