Skip to content

Commit b292f52

Browse files
committed
vis polygon
1 parent ca9c879 commit b292f52

3 files changed

Lines changed: 52 additions & 2 deletions

File tree

GEMstack/onboard/perception/cone_detection_parking.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ def initialize(self):
336336
self.pub_cones_bboxes_markers = rospy.Publisher("cones_detection/bboxes/markers", MarkerArray, queue_size=10)
337337
self.pub_cones_centers_pc2 = rospy.Publisher("cones_detection/centers/point_cloud", PointCloud2, queue_size=10)
338338
self.pub_parking_spot_marker = rospy.Publisher("parking_spot_detection/marker", MarkerArray, queue_size=10)
339+
self.pub_polygon_marker = rospy.Publisher("polygon_detection/marker", MarkerArray, queue_size=10)
339340

340341
# Detection model
341342
self.model_path = os.getcwd() + '/GEMstack/knowledge/detection/cone.pt'
@@ -378,7 +379,9 @@ def viz_object_states(self, cone_3d_centers, cone_3d_dims, cv_image, boxes):
378379
# Create vehicle marker
379380
ros_vehicle_marker = create_bbox_marker([[0.0, 0.0, 0.0]], [[0.8, 0.5, 0.3]], (0.0, 0.0, 1.0, 1), "vehicle")
380381
self.pub_vehicle_marker.publish(ros_vehicle_marker)
381-
# Delete previous parking spot markers
382+
# Delete previous markers
383+
ros_delete_polygon_marker = delete_markers("polygon", 1)
384+
self.pub_polygon_marker.publish(ros_delete_polygon_marker)
382385
ros_delete_parking_spot_markers = delete_markers("parking_spot", 1)
383386
self.pub_parking_spot_marker.publish(ros_delete_parking_spot_markers)
384387
# Draw 3D cone centers and dimensions
@@ -408,6 +411,9 @@ def detect_parking_spot(self, cone_3d_centers):
408411
if len(candidates) > 0:
409412
closest_spot = candidates[0]
410413
# print(f"-----closest_spot: {closest_spot}")
414+
# Draw polygon first
415+
ros_polygon_marker = create_polygon_marker(cone_ground_centers_2D, ref_frame="vehicle")
416+
self.pub_polygon_marker.publish(ros_polygon_marker)
411417
# Create parking spot marker
412418
ros_parking_spot_marker = create_parking_spot_marker(closest_spot, ref_frame="vehicle")
413419
self.pub_parking_spot_marker.publish(ros_parking_spot_marker)

GEMstack/onboard/perception/parking_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def findAllCandidateParkingLot(cornerPts, angleStepDegree=5, positionStrideMeter
4242

4343
def drawCarPose(img, center, angleDegree, color=(0, 0, 255), scale=100):
4444
rect = (center, (GEM_E4_LENGTH, GEM_E4_WIDTH), float(angleDegree))
45-
box = cv2.boxPoints(rect) # 四个角点
45+
box = cv2.boxPoints(rect)
4646
box_scaled = np.int32(box * scale)
4747

4848
cv2.polylines(img, [box_scaled], isClosed=True, color=color, thickness=2)

GEMstack/onboard/perception/visualization_utils.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from visualization_msgs.msg import Marker, MarkerArray
33
from geometry_msgs.msg import Point
44
import sensor_msgs.point_cloud2 as pc2
5+
from scipy.spatial import ConvexHull
6+
import numpy as np
57
import cv2
68
import rospy
79
import struct
@@ -124,6 +126,48 @@ def create_bbox_marker(centroids, dimensions, color = (0.0, 1.0, 1.5, 0.2), ref_
124126
return marker_array
125127

126128

129+
def order_points_convex_hull(points_2d):
130+
points_np = np.array(points_2d)
131+
hull = ConvexHull(points_np)
132+
ordered = [points_np[i] for i in hull.vertices]
133+
return ordered
134+
135+
136+
def create_polygon_marker(vertices_2d, ref_frame="map"):
137+
vertices_2d = order_points_convex_hull(vertices_2d)
138+
139+
marker_array = MarkerArray()
140+
141+
marker = Marker()
142+
marker.header.frame_id = ref_frame
143+
marker.header.stamp = rospy.Time.now()
144+
marker.ns = "polygon"
145+
marker.id = 0
146+
marker.type = Marker.LINE_STRIP
147+
marker.action = Marker.ADD
148+
149+
# Style
150+
marker.scale.x = 0.1 # Line width
151+
152+
# Color (blue)
153+
marker.color.r = 0.0
154+
marker.color.g = 1.0
155+
marker.color.b = 0.0
156+
marker.color.a = 1.0
157+
158+
marker.pose.orientation.w = 1.0
159+
160+
# Convert 2D vertices into geometry_msgs/Point with z=0.0
161+
for vx, vy in vertices_2d:
162+
marker.points.append(Point(x=vx, y=vy, z=0.0))
163+
164+
# Close the loop by repeating the first point
165+
marker.points.append(Point(x=vertices_2d[0][0], y=vertices_2d[0][1], z=0.0))
166+
167+
marker_array.markers.append(marker)
168+
return marker_array
169+
170+
127171
def create_parking_spot_marker(closest_spot, length = GEM_E4_LENGTH, width = GEM_E4_WIDTH, ref_frame="map"):
128172
marker_array = MarkerArray()
129173

0 commit comments

Comments
 (0)