Newer
Older
def __init__(self, env, s_start, s_goal, step_len, goal_sample_rate, iter_max, r, sampled_vertices=None):
super().__init__(env, s_start, s_goal, step_len, goal_sample_rate, iter_max, sampled_vertices=None)
self.r = r
self.name="RRT*"
def nearest_neighbor(self, node_list, node):
# print("using correct nn funct")
node_new = super().nearest_neighbor(node_list, node)
# node_new = self.new_state(node_nearest, node)
if node_new:
# rewire optimization
for node_n in node_list:
# inside the optimization circle
new_dist = self.dist(node_n, node_new)
if new_dist < self.r:
cost = node_n.g + new_dist
# update new sample node's cost and parent
if node_new.g > cost and not self.is_collision(node_n, node_new):
node_new.parent = node_n.current
node_new.g = cost
else:
# update nodes' cost inside the radius
cost = node_new.g + new_dist
if node_n.g > cost and not self.is_collision(node_n, node_new):
node_n.parent = node_new.current
node_n.g = cost
else:
continue
return node_new
else:
return None
if __name__ == "__main__":
# x_start = (18, 8) # Starting node
# x_goal = (37, 18) # Goal node
x_start = (6.394267984578837, 0.25010755222666936) # Starting node
x_goal = (2.7502931836911926, 2.2321073814882277) # Goal node
# rrt = RRT(x_start, x_goal, 0.5, 0.05, 10000)
# path = rrt.run()
rrtstar = RRTStar(x_start, x_goal, 0.5, 0.05, 10000, r=10.0)
path = rrtstar.run()