def main_middle(sx, sy, syaw, mx, my, myaw, other_sx, other_sy, other_syaw, other_gx, other_gy, other_gyaw, other_other_x=None, other_other_y=None, other_other_yaw=None): # set obstacles global ox, oy oox = ox[:] ooy = oy[:] tox, toy = ox[:], oy[:] kdtree = planner.KDTree(np.vstack((tox, toy)).T) if vehicle_lib.check_collision(oox, ooy, [mx], [my], [myaw], kdtree) == False: return None, None, None vehicle_x, vehicle_y = planner.vehicle.plot_trailer( mx, my, myaw, 0.0, True) oox_add, ooy_add = add_obstacle(vehicle_x, vehicle_y, oox, ooy) path2 = planner.calc_hybrid_astar_path(other_sx, other_sy, other_syaw, other_gx, other_gy, other_gyaw, oox_add, ooy_add, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path2 == []: print 'The middle state is invalid(2)' return None, None, None # path generation path1 = planner.calc_hybrid_astar_path(sx, sy, syaw, mx, my, myaw, oox, ooy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path1 == []: print 'Cannot find path.(1)' return None, None, None vehicle.plot_trailer(other_sx, other_sy, other_syaw, 0) show_animation(path1, ox, oy, other_sx, other_sy, other_syaw, other_other_x, other_other_y, other_other_yaw) show_animation(path2, ox, oy, mx, my, myaw, other_other_x, other_other_y, other_other_yaw) plt.pause(0.01) return mx, my, myaw
def show_animation(path, oox, ooy, other_x=None, other_y=None, other_yaw0=None): x = path.x y = path.y yaw = path.yaw direction = path.direction steer = 0.0 for ii in range(0, len(x), 20): plt.cla() plt.plot(oox, ooy, ".k") plt.plot(x, y, "-r", label="Hybrid A* path") if ii < len(x) - 1: k = (yaw[ii + 1] - yaw[ii]) / planner.MOTION_RESOLUTION if direction[ii] == False: k *= -1 steer = math.atan2(vehicle_lib.WB * k, 1.0) else: steer = 0.0 if other_x != None and other_y != None and other_yaw0 != None: vehicle.plot_trailer(other_x, other_y, other_yaw0, 0) vehicle.plot_trailer(x[ii], y[ii], yaw[ii], steer) plt.grid(True) plt.axis("equal") plt.pause(0.01)
def estimate_total_rs_cost(self, sx, sy, syaw, mx, my, myaw, gx, gy, gyaw, ox, oy): vehicle.plot_trailer(sx, sy, syaw, 0) vehicle.plot_trailer(OTHER_SX, OTHER_SY, OTHER_SYAW, 0) cost1 = self.estimate_rs_cost(sx, sy, syaw, mx, my, myaw, ox, oy) vehicle_x, vehicle_y = planner.vehicle.plot_trailer( mx, my, myaw, 0.0, True) oox_add, ooy_add = add_obstacle(vehicle_x, vehicle_y, ox, oy) cost2 = self.estimate_rs_cost(OTHER_SX, OTHER_SY, OTHER_SYAW, OTHER_GX, OTHER_GY, OTHER_GYAW, oox_add, ooy_add) cost3 = self.estimate_rs_cost(mx, my, myaw, gx, gy, gyaw, ox, oy) return cost1 + cost2 + cost3
ox.append(i) oy.append(4.0) for i in range(-8, 8): ox.append(i) oy.append(-1.0) for i in range(4, 9): ox.append(-25) oy.append(i) for i in range(4, 9): ox.append(25) oy.append(i) plt.grid(True) plt.axis("equal") plt.plot(ox, oy, '.k') vehicle.plot_trailer(SX, SY, SYAW, 0) vehicle.plot_trailer(OTHER_SX, OTHER_SY, OTHER_SYAW, 0) plt.pause(3) class States(object): def __init__(self, sx, sy, syaw, mx, my, myaw, gx, gy, gyaw, ox, oy): self.sx = sx self.sy = sy self.syaw = syaw self.mx = mx self.my = my self.myaw = myaw self.gx = gx self.gy = gy self.gyaw = gyaw
def main(x,y,yaw): sx = SX # [m] sy = SY # [m] syaw0 = SYAW # goal state gx = GX # [m] gy = GY # [m] gyaw0 = GYAW other_sx = OTHER_SX # [m] other_sy = OTHER_SY # [m] other_syaw0 = OTHER_SYAW other_gx = OTHER_GX # [m] other_gy = OTHER_GY # [m] other_gyaw0 = OTHER_GYAW mx = x # [m] my = y # [m] myaw0 = yaw # set obstacles global ox,oy oox = ox[:] ooy = oy[:] tox, toy = ox[:], oy[:] kdtree = planner.KDTree(np.vstack((tox, toy)).T) if vehicle_lib.check_collision(oox, ooy, [mx], [my], [myaw0], kdtree) == False: return # path generation path1 = planner.calc_hybrid_astar_path(sx, sy, syaw0, mx, my, myaw0, oox, ooy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path1 == []: print 'Cannot find path.(1)' return vehicle_x,vehicle_y = planner.vehicle.plot_trailer(mx, my, myaw0, 0.0, True) oox_add, ooy_add = add_obstacle(vehicle_x, vehicle_y, oox, ooy) path2 = planner.calc_hybrid_astar_path(other_sx, other_sy, other_syaw0, other_gx, other_gy, other_gyaw0, oox_add, ooy_add, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path2 == []: print 'The middle state is invalid(2)' return path3 = planner.calc_hybrid_astar_path(mx, my, myaw0, gx, gy, gyaw0, oox, ooy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path3 == []: print 'Cannot find path.(3)' return vehicle.plot_trailer(other_sx, other_sy, other_syaw0, 0) show_animation(path1, ox, oy, other_sx, other_sy, other_syaw0) show_animation(path2, ox, oy, mx, my, myaw0) show_animation(path3, ox, oy, other_gx, other_gy, other_gyaw0) plt.pause(0.1)
def main(x, y, yaw): sx = SX # [m] sy = SY # [m] syaw0 = SYAW # goal state gx = GX # [m] gy = GY # [m] gyaw0 = GYAW other_sx = OTHER_SX # [m] other_sy = OTHER_SY # [m] other_syaw0 = OTHER_SYAW other_gx = OTHER_GX # [m] other_gy = OTHER_GY # [m] other_gyaw0 = OTHER_GYAW mx = x # [m] my = y # [m] myaw0 = np.deg2rad(yaw) # set obstacles ox = [] oy = [] # for i in range(-8, 8): # ox.append(i) # oy.append(12.0) for i in range(-25, -8): ox.append(i) oy.append(9.0) for i in range(8, 25): ox.append(i) oy.append(9.0) for i in range(-25, -8): ox.append(i) oy.append(4.0) for i in range(-3, 5): ox.append(-8.0) oy.append(i) for i in range(-3, 5): ox.append(8.0) oy.append(i) for i in range(8, 25): ox.append(i) oy.append(4.0) # for i in range(-8, 8): # ox.append(i) # oy.append(1.0) for i in range(-8, 8): ox.append(i) oy.append(12.0) for i in range(4, 9): ox.append(-25) oy.append(i) for i in range(4, 9): ox.append(25) oy.append(i) oox = ox[:] ooy = oy[:] tox, toy = ox[:], oy[:] kdtree = planner.KDTree(np.vstack((tox, toy)).T) # plt.plot(ox,oy,'.k') # plt.show() if vehicle_lib.check_collision(oox, ooy, [mx], [my], [myaw0], kdtree) == False: return # path generation path1 = planner.calc_hybrid_astar_path(sx, sy, syaw0, mx, my, myaw0, ox, oy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path1 == []: print 'Cannot find path.(1)' return vehicle_x, vehicle_y = planner.vehicle.plot_trailer( mx, my, myaw0, 0.0, True) oox_add, ooy_add = add_obstacle(vehicle_x, vehicle_y, oox, ooy) path2 = planner.calc_hybrid_astar_path(other_sx, other_sy, other_syaw0, other_gx, other_gy, other_gyaw0, oox_add, ooy_add, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path2 == []: print 'The middle state is invalid(2)' return path3 = planner.calc_hybrid_astar_path(mx, my, myaw0, gx, gy, gyaw0, ox, oy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) if path3 == []: print 'Cannot find path.(3)' return # global total_cost # global final_path1 # global final_path2 # global final_path3,final_mx,final_my,final_myaw0 # # if path1.cost + path2.cost + path3.cost < total_cost: # final_path1 = path1 # final_path2 = path2 # final_path3 = path3 # final_mx = mx # final_my = my # final_myaw0 = myaw0 vehicle.plot_trailer(other_sx, other_sy, other_syaw0, 0) show_animation(path1, oox, ooy, other_sx, other_sy, other_syaw0) show_animation(path2, oox, ooy, mx, my, myaw0) show_animation(path3, oox, ooy, other_gx, other_gy, other_gyaw0) plt.show()
for i in range(61): ox.append(i) oy.append(60.0) for i in range(61): ox.append(0.0) oy.append(i) for i in range(20): ox.append(i) oy.append(30.0) for i in range(45): ox.append(i) oy.append(40.0) plt.grid(True) plt.axis("equal") plt.plot(ox, oy, '.k') vehicle.plot_trailer(SX, SY, SYAW, 0) path1 = planner.calc_hybrid_astar_path(SX, SY, SYAW, GX, GY, GYAW, ox, oy, planner.XY_GRID_RESOLUTION, planner.YAW_GRID_RESOLUTION) #plt.scatter(path1.x, path1.y, "-r", label="Hybrid A* path") show_animation(path1, ox, oy) # #plt.scatter(x_path,y_path) plt.axis([-40, 40, -40, 40]) plt.grid(True) plt.axis("equal") # plt.plot(ox, oy, '.k') plt.show()