|
14 | 14 | import struct, ctypes |
15 | 15 | from message_filters import Subscriber, ApproximateTimeSynchronizer |
16 | 16 | from cv_bridge import CvBridge |
| 17 | +from scipy.spatial import ConvexHull |
17 | 18 | from .visualization_utils import * |
18 | 19 | from .parking_utils import * |
19 | 20 | import time |
@@ -259,6 +260,12 @@ def filter_ground_points(lidar_points, ground_threshold = 0): |
259 | 260 | filtered_array = lidar_points[lidar_points[:, 2] > ground_threshold] |
260 | 261 | return filtered_array |
261 | 262 |
|
| 263 | +def order_points_convex_hull(points_2d): |
| 264 | + points_np = np.array(points_2d) |
| 265 | + hull = ConvexHull(points_np) |
| 266 | + ordered = [points_np[i] for i in hull.vertices] |
| 267 | + return ordered |
| 268 | + |
262 | 269 | # ----- New: Vectorized projection function ----- |
263 | 270 | def project_points(pts_cam, K, original_lidar_points): |
264 | 271 | """ |
@@ -405,14 +412,15 @@ def viz_object_states(self, cone_3d_centers, cone_3d_dims, cv_image, boxes): |
405 | 412 | def detect_parking_spot(self, cone_3d_centers): |
406 | 413 | cone_ground_centers = np.array(cone_3d_centers) |
407 | 414 | cone_ground_centers_2D = cone_ground_centers[:, :2] |
| 415 | + ordered_cone_ground_centers_2D = order_points_convex_hull(cone_ground_centers_2D) |
408 | 416 | # print(f"-----cone_ground_centers_2D: {cone_ground_centers_2D}") |
409 | | - candidates = findAllCandidateParkingLot(cone_ground_centers_2D) |
| 417 | + candidates = findAllCandidateParkingLot(ordered_cone_ground_centers_2D) |
410 | 418 | # print(f"-----candidates: {candidates}") |
411 | 419 | if len(candidates) > 0: |
412 | 420 | closest_spot = candidates[0] |
413 | 421 | # print(f"-----closest_spot: {closest_spot}") |
414 | 422 | # Draw polygon first |
415 | | - ros_polygon_marker = create_polygon_marker(cone_ground_centers_2D, ref_frame="vehicle") |
| 423 | + ros_polygon_marker = create_polygon_marker(ordered_cone_ground_centers_2D, ref_frame="vehicle") |
416 | 424 | self.pub_polygon_marker.publish(ros_polygon_marker) |
417 | 425 | # Create parking spot marker |
418 | 426 | ros_parking_spot_marker = create_parking_spot_marker(closest_spot, ref_frame="vehicle") |
|
0 commit comments