@@ -25,6 +25,7 @@ def __init__(
2525 self .cone_pts_3D = []
2626 self .ordered_cone_ground_centers_2D = []
2727 self .goal_parking_spot = None
28+ self .best_parking_spot = None
2829 self .parking_obstacles_pose = []
2930 self .parking_obstacles_dim = []
3031 self .ground_threshold = GROUND_THRESHOLD
@@ -48,6 +49,7 @@ def __init__(
4849 self .pub_vehicle_marker = rospy .Publisher ("vehicle/marker" , MarkerArray , queue_size = 10 )
4950 self .pub_cones_centers_pc2 = rospy .Publisher ("cones_detection/centers/point_cloud" , PointCloud2 , queue_size = 10 )
5051 self .pub_parking_spot_marker = rospy .Publisher ("parking_spot_detection/marker" , MarkerArray , queue_size = 10 )
52+ self .pub_parking_goal_marker = rospy .Publisher ("parking_spot_detection/goal/marker" , MarkerArray , queue_size = 10 )
5153 self .pub_polygon_marker = rospy .Publisher ("polygon_detection/marker" , MarkerArray , queue_size = 10 )
5254 self .pub_obstacles_marker = rospy .Publisher ("obstacle_detection/marker" , MarkerArray , queue_size = 10 )
5355
@@ -61,6 +63,7 @@ def callback(self, top_lidar_msg):
6163 self .cone_pts_3D ,
6264 self .ordered_cone_ground_centers_2D ,
6365 self .goal_parking_spot ,
66+ self .best_parking_spot ,
6467 self .parking_obstacles_pose ,
6568 self .parking_obstacles_dim ,
6669 lidar_ouster_frame
@@ -82,14 +85,15 @@ def state_outputs(self) -> list:
8285 def visualize (self ,
8386 cone_pts_3D ,
8487 ordered_cone_ground_centers_2D ,
85- goal_parking_spot ,
88+ parking_goal ,
89+ best_parking_spot ,
8690 parking_obstacles_pose ,
8791 parking_obstacles_dim ,
8892 lidar_ouster_frame ):
8993 # Transform top lidar pointclouds to vehicle frame for visualization
9094 latest_lidar_vehicle = transform_points (lidar_ouster_frame , self .T_l2v )
9195 latest_lidar_vehicle = filter_ground_points (latest_lidar_vehicle , self .ground_threshold )
92- ros_lidar_top_vehicle_pc2 = create_point_cloud (latest_lidar_vehicle , LIDAR_PC_COLOR , VEHICLE_FRAME )
96+ ros_lidar_top_vehicle_pc2 = create_point_cloud (latest_lidar_vehicle , ( 255 , 0 , 0 ), "vehicle" )
9397 self .pub_lidar_top_vehicle_pc2 .publish (ros_lidar_top_vehicle_pc2 )
9498
9599 # Create vehicle marker
@@ -100,66 +104,76 @@ def visualize(self,
100104 self .pub_vehicle_marker .publish (ros_vehicle_marker )
101105
102106 # Delete previous markers
103- ros_delete_polygon_marker = delete_markers ("polygon" , MAX_POLYGON_MARKERS )
107+ ros_delete_polygon_marker = delete_markers ("polygon" , 1 )
104108 self .pub_polygon_marker .publish (ros_delete_polygon_marker )
105- ros_delete_parking_spot_markers = delete_markers ("parking_spot" , MAX_PARKING_SPOT_MARKERS )
109+ ros_delete_parking_spot_markers = delete_markers ("parking_spot" , 1 )
106110 self .pub_parking_spot_marker .publish (ros_delete_parking_spot_markers )
107- ros_delete_obstacles_markers = delete_markers ("obstacles" , MAX_OBSTACLE_MARKERS )
111+ ros_delete_parking_goal_markers = delete_markers ("parking_goal" , 1 )
112+ self .pub_parking_goal_marker .publish (ros_delete_parking_goal_markers )
113+ ros_delete_obstacles_markers = delete_markers ("obstacles" , 5 )
108114 self .pub_obstacles_marker .publish (ros_delete_obstacles_markers )
109115
110116 # Draw polygon first
111117 if len (ordered_cone_ground_centers_2D ) > 0 :
112- ros_polygon_marker = create_polygon_marker (ordered_cone_ground_centers_2D , ref_frame = VEHICLE_FRAME )
118+ ros_polygon_marker = create_polygon_marker (ordered_cone_ground_centers_2D , ref_frame = "vehicle" )
113119 self .pub_polygon_marker .publish (ros_polygon_marker )
114120
115121 # Create parking spot marker
116- if goal_parking_spot :
117- ros_parking_spot_marker = create_parking_spot_marker (goal_parking_spot , ref_frame = VEHICLE_FRAME )
122+ if best_parking_spot :
123+ ros_parking_spot_marker = create_parking_spot_marker (best_parking_spot , ref_frame = "vehicle" )
118124 self .pub_parking_spot_marker .publish (ros_parking_spot_marker )
119125
126+ # Create parking goal marker
127+ if parking_goal :
128+ ros_parking_goal_marker = create_parking_goal_marker (x = parking_goal [0 ],
129+ y = parking_goal [1 ],
130+ ref_frame = "vehicle" )
131+ self .pub_parking_goal_marker .publish (ros_parking_goal_marker )
132+
120133 # Create parking obstacles marker
121134 if parking_obstacles_pose and parking_obstacles_dim :
122135 ros_obstacles_marker = create_markers (parking_obstacles_pose ,
123136 parking_obstacles_dim ,
124- OBSTACLE_MARKER_COLOR ,
125- "obstacles" , VEHICLE_FRAME )
137+ ( 1.0 , 0.0 , 0.0 , 0.4 ) ,
138+ "obstacles" , "vehicle" )
126139 self .pub_obstacles_marker .publish (ros_obstacles_marker )
127140
128141 # Draw 3D cone centers
129142 if len (cone_pts_3D ) > 0 :
130143 cone_ground_centers = np .array (cone_pts_3D )
131144 cone_ground_centers [:, 2 ] = 0.0
132145 cone_ground_centers = [tuple (point ) for point in cone_ground_centers ]
133- ros_cones_centers_pc2 = create_point_cloud (cone_ground_centers , color = CONE_CENTER_PC_COLOR )
146+ ros_cones_centers_pc2 = create_point_cloud (cone_ground_centers , color = ( 255 , 0 , 255 ) )
134147 self .pub_cones_centers_pc2 .publish (ros_cones_centers_pc2 )
135148
136149
137- def update (self , cone_obstacles : Dict [str , Obstacle ]):
150+ def update (self , agents : Dict [str , Obstacle ]):
138151 # Initial variables
139- goal_parking_spot = None
152+ parking_goal = None
153+ best_parking_spot = None
140154 parking_obstacles_pose = []
141155 parking_obstacles_dim = []
142156 ordered_cone_ground_centers_2D = []
143157
144158 # Populate cone points
145159 cone_pts_3D = []
146- for cone in cone_obstacles .values ():
160+ for cone in agents .values ():
147161 cone_pt_3D = (cone .pose .x , cone .pose .y , 0.0 )
148162 cone_pts_3D .append (cone_pt_3D )
149163
150164 # Detect parking spot
151- if len (cone_pts_3D ) == NUM_CONES_PER_PARKING_SPOT :
152- goal_parking_spot , parking_obstacles_pose , parking_obstacles_dim , ordered_cone_ground_centers_2D = detect_parking_spot (cone_pts_3D )
153-
165+ if len (cone_pts_3D ) >= 4 :
166+ parking_goal , best_parking_spot , parking_obstacles_pose , parking_obstacles_dim , ordered_cone_ground_centers_2D = detect_parking_spot (cone_pts_3D )
154167 # Update local variables for visualization
155168 self .cone_pts_3D = cone_pts_3D
156169 self .ordered_cone_ground_centers_2D = ordered_cone_ground_centers_2D
157- self .goal_parking_spot = goal_parking_spot
170+ self .parking_goal = parking_goal
171+ self .best_parking_spot = best_parking_spot
158172 self .parking_obstacles_pose = parking_obstacles_pose
159173 self .parking_obstacles_dim = parking_obstacles_dim
160174
161175 # Return if no goal parking spot is found
162- if not goal_parking_spot :
176+ if not parking_goal :
163177 return None
164178
165179 # Constructing parking obstacles
@@ -183,13 +197,15 @@ def update(self, cone_obstacles: Dict[str, Obstacle]):
183197 dimensions = o_dim ,
184198 outline = None ,
185199 material = ObstacleMaterialEnum .BARRIER ,
186- collidable = True , state = ObstacleStateEnum .STANDING
200+ collidable = True ,
201+ state = ObstacleStateEnum .STANDING ,
187202 )
188203 parking_obstacles [f"parking_obstacle_{ obstacle_id } " ] = new_obstacle
189204 obstacle_id += 1
190205
191206 # Constructing goal pose
192- x , y , yaw = goal_parking_spot
207+ print (f"-----GOAL: { parking_goal } " )
208+ x , y , yaw = parking_goal
193209 goal_pose = ObjectPose (
194210 t = current_time ,
195211 x = x ,
0 commit comments