def METHOD_NAME(self, node_x, node_y, rr, obstacle_tree):
    """
    Road map generation
    node_x: [m] x positions of sampled points
    node_y: [m] y positions of sampled points
    rr: Robot Radius[m]
    obstacle_tree: KDTree object of obstacles
    """
    road_map = []
    n_sample = len(node_x)
    node_tree = cKDTree(np.vstack((node_x, node_y)).T)
    for (i, ix, iy) in zip(range(n_sample), node_x, node_y):
        dists, indexes = node_tree.query([ix, iy], k=n_sample)
        edge_id = []
        for ii in range(1, len(indexes)):
            nx = node_x[indexes[ii]]
            ny = node_y[indexes[ii]]
            if not self.is_collision(ix, iy, nx, ny, rr, obstacle_tree):
                edge_id.append(indexes[ii])
            if len(edge_id) >= self.N_KNN:
                break
        road_map.append(edge_id)
    #  plot_road_map(road_map, sample_x, sample_y)
    return road_map