@@ -100,8 +100,9 @@ def planning(self, sx, sy, gx, gy):
100
100
self .calc_grid_position (current_B .y , self .miny ), "xc" )
101
101
# for stopping simulation with the esc key.
102
102
plt .gcf ().canvas .mpl_connect ('key_release_event' ,
103
- lambda event : [exit (
104
- 0 ) if event .key == 'escape' else None ])
103
+ lambda event :
104
+ [exit (0 ) if event .key == 'escape'
105
+ else None ])
105
106
if len (closed_set_A .keys ()) % 10 == 0 :
106
107
plt .pause (0.001 )
107
108
@@ -121,61 +122,50 @@ def planning(self, sx, sy, gx, gy):
121
122
122
123
# expand_grid search grid based on motion model
123
124
for i , _ in enumerate (self .motion ):
124
- continue_A = False
125
- continue_B = False
126
125
127
- child_node_A = self .Node (current_A .x + self .motion [i ][0 ],
128
- current_A .y + self .motion [i ][1 ],
129
- current_A .cost + self .motion [i ][2 ],
130
- c_id_A )
126
+ c_nodes = [self .Node (current_A .x + self .motion [i ][0 ],
127
+ current_A .y + self .motion [i ][1 ],
128
+ current_A .cost + self .motion [i ][2 ],
129
+ c_id_A ),
130
+ self .Node (current_B .x + self .motion [i ][0 ],
131
+ current_B .y + self .motion [i ][1 ],
132
+ current_B .cost + self .motion [i ][2 ],
133
+ c_id_B )]
131
134
132
- child_node_B = self .Node (current_B .x + self .motion [i ][0 ],
133
- current_B .y + self .motion [i ][1 ],
134
- current_B .cost + self .motion [i ][2 ],
135
- c_id_B )
136
-
137
- n_id_A = self .calc_grid_index (child_node_A )
138
- n_id_B = self .calc_grid_index (child_node_B )
135
+ n_ids = [self .calc_grid_index (c_nodes [0 ]),
136
+ self .calc_grid_index (c_nodes [1 ])]
139
137
140
138
# If the node is not safe, do nothing
141
- if not self .verify_node (child_node_A ):
142
- continue_A = True
143
-
144
- if not self .verify_node (child_node_B ):
145
- continue_B = True
146
-
147
- if n_id_A in closed_set_A :
148
- continue_A = True
149
-
150
- if n_id_B in closed_set_B :
151
- continue_B = True
139
+ continue_ = self .check_nodes_and_sets (c_nodes , closed_set_A ,
140
+ closed_set_B , n_ids )
152
141
153
- if not continue_A :
154
- if n_id_A not in open_set_A :
142
+ if not continue_ [ 0 ] :
143
+ if n_ids [ 0 ] not in open_set_A :
155
144
# discovered a new node
156
- open_set_A [n_id_A ] = child_node_A
145
+ open_set_A [n_ids [ 0 ]] = c_nodes [ 0 ]
157
146
else :
158
- if open_set_A [n_id_A ] .cost > child_node_A .cost :
147
+ if open_set_A [n_ids [ 0 ]] .cost > c_nodes [ 0 ] .cost :
159
148
# This path is the best until now. record it
160
- open_set_A [n_id_A ] = child_node_A
149
+ open_set_A [n_ids [ 0 ]] = c_nodes [ 0 ]
161
150
162
- if not continue_B :
163
- if n_id_B not in open_set_B :
151
+ if not continue_ [ 1 ] :
152
+ if n_ids [ 1 ] not in open_set_B :
164
153
# discovered a new node
165
- open_set_B [n_id_B ] = child_node_B
154
+ open_set_B [n_ids [ 1 ]] = c_nodes [ 1 ]
166
155
else :
167
- if open_set_B [n_id_B ] .cost > child_node_B .cost :
156
+ if open_set_B [n_ids [ 1 ]] .cost > c_nodes [ 1 ] .cost :
168
157
# This path is the best until now. record it
169
- open_set_B [n_id_B ] = child_node_B
158
+ open_set_B [n_ids [ 1 ]] = c_nodes [ 1 ]
170
159
171
160
rx , ry = self .calc_final_bidirectional_path (
172
161
meetpointA , meetpointB , closed_set_A , closed_set_B )
173
162
174
163
return rx , ry
175
164
176
- def calc_final_bidirectional_path (self , meetnode_A , meetnode_B , closed_set_A , closed_set_B ):
177
- rx_A , ry_A = self .calc_final_path (meetnode_A , closed_set_A )
178
- rx_B , ry_B = self .calc_final_path (meetnode_B , closed_set_B )
165
+ # takes two sets and two meeting nodes and return the optimal path
166
+ def calc_final_bidirectional_path (self , n1 , n2 , setA , setB ):
167
+ rx_A , ry_A = self .calc_final_path (n1 , setA )
168
+ rx_B , ry_B = self .calc_final_path (n2 , setB )
179
169
180
170
rx_A .reverse ()
181
171
ry_A .reverse ()
@@ -198,6 +188,16 @@ def calc_final_path(self, ngoal, closedset):
198
188
199
189
return rx , ry
200
190
191
+ def check_nodes_and_sets (self , c_nodes , closedSet_A , closedSet_B , n_ids ):
192
+ continue_ = [False , False ]
193
+ if not self .verify_node (c_nodes [0 ]) or n_ids [0 ] in closedSet_A :
194
+ continue_ [0 ] = True
195
+
196
+ if not self .verify_node (c_nodes [1 ]) or n_ids [1 ] in closedSet_B :
197
+ continue_ [1 ] = True
198
+
199
+ return continue_
200
+
201
201
@staticmethod
202
202
def calc_heuristic (n1 , n2 ):
203
203
w = 1.0 # weight of heuristic
0 commit comments