@@ -63,17 +63,15 @@ def __init__(self, ox: list, oy: list):
63
63
self .y_max = int (abs (max (oy ) - self .y_min_world ))
64
64
self .obstacles = [Node (x - self .x_min_world , y - self .y_min_world )
65
65
for x , y in zip (ox , oy )]
66
- self .obstacles_xy = np .array (
67
- [[obstacle .x , obstacle .y ] for obstacle in self .obstacles ]
68
- )
66
+ self .obstacles_xy = {(obstacle .x , obstacle .y ) for obstacle in self .obstacles }
69
67
self .start = Node (0 , 0 )
70
68
self .goal = Node (0 , 0 )
71
69
self .U = list () # type: ignore
72
70
self .km = 0.0
73
71
self .kold = 0.0
74
72
self .rhs = self .create_grid (float ("inf" ))
75
73
self .g = self .create_grid (float ("inf" ))
76
- self .detected_obstacles_xy = np . empty (( 0 , 2 ) )
74
+ self .detected_obstacles_xy : set [ tuple [ int , int ]] = set ( )
77
75
self .xy = np .empty ((0 , 2 ))
78
76
if show_animation :
79
77
self .detected_obstacles_for_plotting_x = list () # type: ignore
@@ -84,18 +82,8 @@ def create_grid(self, val: float):
84
82
return np .full ((self .x_max , self .y_max ), val )
85
83
86
84
def is_obstacle (self , node : Node ):
87
- x = np .array ([node .x ])
88
- y = np .array ([node .y ])
89
- obstacle_x_equal = self .obstacles_xy [:, 0 ] == x
90
- obstacle_y_equal = self .obstacles_xy [:, 1 ] == y
91
- is_in_obstacles = (obstacle_x_equal & obstacle_y_equal ).any ()
92
-
93
- is_in_detected_obstacles = False
94
- if self .detected_obstacles_xy .shape [0 ] > 0 :
95
- is_x_equal = self .detected_obstacles_xy [:, 0 ] == x
96
- is_y_equal = self .detected_obstacles_xy [:, 1 ] == y
97
- is_in_detected_obstacles = (is_x_equal & is_y_equal ).any ()
98
-
85
+ is_in_obstacles = (node .x , node .y ) in self .obstacles_xy
86
+ is_in_detected_obstacles = (node .x , node .y ) in self .detected_obstacles_xy
99
87
return is_in_obstacles or is_in_detected_obstacles
100
88
101
89
def c (self , node1 : Node , node2 : Node ):
@@ -157,7 +145,7 @@ def initialize(self, start: Node, goal: Node):
157
145
self .g = self .create_grid (math .inf )
158
146
self .rhs [self .goal .x ][self .goal .y ] = 0
159
147
self .U .append ((self .goal , self .calculate_key (self .goal )))
160
- self .detected_obstacles_xy = np . empty (( 0 , 2 ) )
148
+ self .detected_obstacles_xy = set ( )
161
149
162
150
def update_vertex (self , u : Node ):
163
151
if not compare_coordinates (u , self .goal ):
@@ -215,12 +203,7 @@ def detect_changes(self):
215
203
compare_coordinates (spoofed_obstacle , self .goal ):
216
204
continue
217
205
changed_vertices .append (spoofed_obstacle )
218
- self .detected_obstacles_xy = np .concatenate (
219
- (
220
- self .detected_obstacles_xy ,
221
- [[spoofed_obstacle .x , spoofed_obstacle .y ]]
222
- )
223
- )
206
+ self .detected_obstacles_xy .add ((spoofed_obstacle .x , spoofed_obstacle .y ))
224
207
if show_animation :
225
208
self .detected_obstacles_for_plotting_x .append (
226
209
spoofed_obstacle .x + self .x_min_world )
@@ -241,12 +224,7 @@ def detect_changes(self):
241
224
compare_coordinates (new_obs , self .goal ):
242
225
return changed_vertices
243
226
changed_vertices .append (Node (x , y ))
244
- self .detected_obstacles_xy = np .concatenate (
245
- (
246
- self .detected_obstacles_xy ,
247
- [[x , y ]]
248
- )
249
- )
227
+ self .detected_obstacles_xy .add ((x , y ))
250
228
if show_animation :
251
229
self .detected_obstacles_for_plotting_x .append (x +
252
230
self .x_min_world )
0 commit comments