예제 #1
0
def main():

    #### STEP 1 - Get classified pointcloud ####

    environment = PointCloudEnvironment(my_print, TERRAIN_ASSESSMENT_FILE,
                                        POINTCLOUD_FILE)
    coverable_points = environment.coverable_pcd.points
    traversable_points = environment.traversable_pcd.points
    motion_planner = MotionPlanner(my_print, environment.traversable_pcd)

    ###

    TIME_LIMIT = 400
    start_point = np.array([28.6, -6.7, -10.3])
    goal_coverage = 0.97
    paths_markers = []
    #Get CPP path
    for pub_path in ALL_PATHS:

        if not pub_path["do_calc"]:
            continue

        coverable_pcd = PointCloud(my_print, points=coverable_points)
        if pub_path["cpp"] == "BA*":
            cpp = BAstar(my_print,
                         motion_planner,
                         coverable_pcd,
                         time_limit=TIME_LIMIT,
                         parameters=pub_path["param"])
        if pub_path["cpp"] == "Inward Spiral":
            cpp = Spiral(my_print,
                         motion_planner,
                         coverable_pcd,
                         time_limit=TIME_LIMIT,
                         parameters=pub_path["param"])
        if pub_path["cpp"] == "Sampled BA*":
            cpp = RandomBAstar3(my_print,
                                motion_planner,
                                coverable_pcd,
                                time_limit=TIME_LIMIT,
                                parameters=pub_path["param"])

        ns = pub_path["ns"]
        pub_path["path"] = cpp.get_cpp_path(start_point,
                                            goal_coverage=goal_coverage)
        pub_path["markers"] = cpp.points_to_mark
        pub_path["stats"] = cpp.print_stats(pub_path["path"])
        save_data(ALL_PATHS)

    print("DONE!")
        "hyper_test":
        "step_param",
        "hyper_time_limit":
        250,
        "hyper_min_coverage":
        95,
        "do_experiment":
        True,
        "experiment_time_limit":
        400,
        "experiment_results": [],
        "hyper_data": [],
        "formatted_hyper_data": [],
        "cpp":
        lambda print, motion_planner, cov_points, time_limit, parameters:
        BAstar(print, motion_planner, PointCloud(print, points=cov_points),
               time_limit, parameters),
        'line':
        'r',
        'confidence_color': (1.0, 0.0, 0.0, 0.3)
    }
}

###################


def my_print(text):
    if PRINT:
        return print(text)
    else:
        return
def main():

    #with open(RESULTS_FILE, 'rb') as cached_pcd_file:
    #    cache_data = pickle.load(cached_pcd_file)
    #    pprint.pprint(cache_data)
    #return

    #with open(RESULTS_FILE, 'rb') as cached_pcd_file:
    #    cache_data = pickle.load(cached_pcd_file)
    #    for alg in ALGORITHMS:
    #        if ALGORITHMS[alg]["do_hyper"]:
    #            ALGORITHMS[alg]["opt_param"] = cache_data[alg]["opt_param"]

    with open(PREVIOUS_FILE, 'rb') as cached_pcd_file:
        cache_data = pickle.load(cached_pcd_file)
        ALGORITHMS = deepcopy(cache_data)
        for alg in ALGORITHMS:
            ALGORITHMS[alg]["do_hyper"] = False
            ALGORITHMS[alg][
                "cpp"] = lambda print, motion_planner, cov_points, time_limit, parameters: BAstar(
                    print, motion_planner, PointCloud(
                        print, points=cov_points), time_limit, parameters)
            ALGORITHMS[alg]["experiment_results"] = []

    #### STEP 1 - Get classified pointcloud ####

    environment = PointCloudEnvironment(my_print, TERRAIN_ASSESSMENT_FILE,
                                        POINTCLOUD_FILE)
    coverable_points = environment.coverable_pcd.points
    traversable_points = environment.traversable_pcd.points
    motion_planner = MotionPlanner(my_print, environment.traversable_pcd)

    #If from terrain assessment file:
    #with open(TERRAIN_ASSESSMENT_FILE, 'rb') as cached_pcd_file:
    #    cache_data = pickle.load(cached_pcd_file)
    #    coverable_points = cache_data["coverable_points"]
    #    traversable_points = cache_data["traversable_points"]
    #traversable_pcd = PointCloud(my_print, points= traversable_points)
    #motion_planner = MotionPlanner(my_print, traversable_pcd)

    #### STEP 2 - Hyper parameters ####
    for algorithm_key, algorithm in ALGORITHMS.items():
        if algorithm["do_hyper"]:
            trials = Trials()
            hyper_optimizer = HyptoOptimizer(save_data, algorithm, my_print,
                                             HYPER_START_POS, motion_planner,
                                             coverable_points)
            if algorithm_key == "BA*":
                opt_param = fmin(hyper_optimizer.hyper_test_bastar,
                                 space=(hp.uniform('angle_offset', 0,
                                                   np.pi * 2),
                                        hp.uniform('step_size', 0.5, 1),
                                        hp.uniform('visited_threshold', 0.25,
                                                   0.5)),
                                 algo=tpe.suggest,
                                 max_evals=HYPER_MAX_EVAL,
                                 trials=trials)
            elif algorithm_key == "Inward Spiral":
                opt_param = fmin(hyper_optimizer.hyper_test_inward_spiral,
                                 space=(hp.uniform('step_size', 0.5, 1),
                                        hp.uniform('visited_threshold', 0.5,
                                                   1)),
                                 algo=tpe.suggest,
                                 max_evals=HYPER_MAX_EVAL,
                                 trials=trials)
            elif algorithm_key == "Sampled BA*":
                coverage_2 = algorithm["hyper_min_coverage"] / 100
                opt_param = fmin(
                    hyper_optimizer.hyper_test_sampled_bastar_param,
                    space=(hp.uniform('coverage_1', 0.25, coverage_2),
                           hp.uniform('coverage_2', coverage_2 - 0.025,
                                      coverage_2),
                           hp.uniform('max_distance', 1, 10),
                           hp.uniform('max_distance_part_II', 1,
                                      20), hp.uniform('max_iterations', 30,
                                                      150),
                           hp.uniform('min_bastar_coverage', 0.005, 0.05),
                           hp.uniform('min_spiral_length', 2, 100),
                           hp.uniform('nbr_of_angles', 0.6,
                                      8.4), hp.uniform('step_size', 0.66,
                                                       1.33),
                           hp.uniform('visited_threshold', 0.5, 1)),
                    algo=tpe.suggest,
                    max_evals=HYPER_MAX_EVAL,
                    trials=trials)
            print(trials.statuses())
            algorithm["opt_param"] = opt_param
            algorithm["hyper_data"] = trials.trials
            ALGORITHMS[algorithm_key] = algorithm
            save_data(ALGORITHMS)

    #### STEP 3 - Full tests ####
    for start_point_nr in range(NUMBER_OF_START_POINTS):
        #start_point = get_random_point(traversable_points)
        start_point = start_points[start_point_nr]
        print("Start point " + str(start_point_nr) + ": " + str(start_point))

        for algorithm_key, algorithm in ALGORITHMS.items():
            if algorithm["do_experiment"]:
                experimenter = Experimenter(algorithm, print)
                parameters = None
                if "opt_param" in algorithm:
                    parameters = algorithm["opt_param"]

                cpp = algorithm["cpp"](my_print, motion_planner,
                                       coverable_points,
                                       algorithm["experiment_time_limit"],
                                       parameters)

                if "sample_specific_stats" in algorithm:
                    experimenter.perform_sample_cpp(cpp, start_point,
                                                    start_point_nr)
                    algorithm["sample_specific_stats"].append(
                        experimenter.sample_specific_stats)
                else:
                    experimenter.perform_cpp(cpp, start_point, start_point_nr)

                algorithm["experiment_results"].append(experimenter.results)
                ALGORITHMS[algorithm_key] = algorithm
                save_data(ALGORITHMS)
예제 #4
0
    def __init__(self):
        super().__init__('MainNode')

        #Publishers:
        self.markers_pub = self.create_publisher(
            visualization_msgs.MarkerArray, 'marker', 3000)
        self.markers_path_pub = self.create_publisher(
            visualization_msgs.Marker, 'path_markers', 3000)

        self.pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'pcd',
                                             10)
        self.coverable_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                       'coverable_pcd', 100)
        self.visited_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                     'visited_pcd', 100)
        self.visited_ground_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'visited_ground_pcd', 100)
        self.traversable_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'traversable_pcd', 100)
        self.inaccessible_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'inaccessible_pcd', 100)
        self.path_pub = self.create_publisher(nav_msgs.Path, 'path', 10)

        #Create Environment
        environment = MapEnvironment(self.print, "simple_open.dictionary",
                                     "src/exjobb/maps/map_simple_open.png",
                                     0.015)
        point_cloud = environment.full_pcd
        traversable_point_cloud = environment.traversable_pcd
        coverable_point_cloud = environment.coverable_pcd
        motion_planner = MotionPlanner(self.print, traversable_point_cloud)

        TIME_LIMIT = 400
        #start_point = np.array([5,0.55,0]) #spiral
        start_point = np.array([0.55, 0.7, 0])
        goal_coverage = 1
        paths_markers = []
        #Get CPP path
        current = "BA*"
        current_param = {
            'angle_offset': 0,
            'step_size': 0.5,
            'visited_threshold': 0.375
        }

        if current == "BA*":
            cpp = BAstar(self.print,
                         motion_planner,
                         coverable_point_cloud,
                         time_limit=TIME_LIMIT,
                         parameters=current_param)
        if current == "Inward Spiral":
            cpp = Spiral(self.print,
                         motion_planner,
                         coverable_point_cloud,
                         time_limit=TIME_LIMIT,
                         parameters=current_param)

        self.pcd_pub.publish(
            point_cloud.point_cloud(point_cloud.points, 'my_frame'))
        self.coverable_pcd_pub.publish(
            coverable_point_cloud.point_cloud(coverable_point_cloud.points,
                                              'my_frame'))
        self.traversable_pcd_pub.publish(
            traversable_point_cloud.point_cloud(traversable_point_cloud.points,
                                                'my_frame'))

        path = cpp.get_cpp_path(start_point, goal_coverage=goal_coverage)
        self.print(cpp.print_stats(path))
        current_max = 0
        coverable_point_cloud.covered_points_idx = np.array([])
        while current_max < len(path):
            self.markers_msg = visualization_msgs.MarkerArray()
            stamp = self.get_clock().now().to_msg()

            msg = ROSMessage.line_marker(0, stamp, path[0:current_max],
                                         [0.1, 1.0, 1.0], "path")
            self.markers_msg.markers = [msg]

            current_max += 2
            new_path = path[current_max - 2:current_max]

            self.markers_pub.publish(self.markers_msg)

            #if current_max > 2:
            coverable_point_cloud.visit_path(new_path)
            visited_ground_points_pcd = coverable_point_cloud.get_covered_points_as_pcd(
            )
            self.visited_ground_pcd_pub.publish(visited_ground_points_pcd)
예제 #5
0
    def __init__(self):
        super().__init__('MainNode')

        #Publishers:
        self.markers_pub = self.create_publisher(visualization_msgs.MarkerArray, 'marker', 3000)
        self.markers_path_pub = self.create_publisher(visualization_msgs.Marker, 'path_markers', 3000)

        self.pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'pcd', 10)
        self.coverable_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'coverable_pcd', 100)
        self.visited_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'visited_pcd', 100)
        self.visited_ground_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'visited_ground_pcd', 100)
        self.traversable_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'traversable_pcd', 100)
        self.inaccessible_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'inaccessible_pcd', 100)
        self.path_pub = self.create_publisher(nav_msgs.Path, 'path', 10)
        
        with open(FILE, 'rb') as cached_pcd_file:
            cache_data = pickle.load(cached_pcd_file)
            all_results = deepcopy(cache_data)
            param = list(filter(lambda x: x["ns"] == PATH_NS, all_results))[0]["param"]
            cpp_name = list(filter(lambda x: x["ns"] == PATH_NS, all_results))[0]["cpp"]
            

        #Create Environment
        environment = PointCloudEnvironment(self.print, "garage_terrain_assessment.dictionary", "garage.pcd", False)
        point_cloud  = environment.full_pcd
        traversable_point_cloud = environment.traversable_pcd
        coverable_point_cloud = environment.coverable_pcd
        motion_planner = MotionPlanner(self.print, traversable_point_cloud) 


        TIME_LIMIT = 400
        goal_coverage = 0.97
        start_point = np.array([28.6, -6.7, -10.3]) #garage
        #start_point =  np.array([-53.7, 54.2, -2.7]) #bridge
        #start_point = np.array([-20.7, 43, -1]) #cross

        if cpp_name == "BA*":
            cpp = BAstar(self.print, motion_planner, coverable_point_cloud, time_limit=TIME_LIMIT, parameters = param)
        if cpp_name == "Inward Spiral":
            cpp = Spiral(self.print, motion_planner, coverable_point_cloud, time_limit=TIME_LIMIT, parameters = param)
        if cpp_name == "Sampled BA*":
            cpp = RandomBAstar3(self.print, motion_planner, coverable_point_cloud, time_limit=TIME_LIMIT, parameters = param)

        path = cpp.get_cpp_path(start_point, goal_coverage=goal_coverage)
        all_segments = cpp.all_segments 
        all_movements = cpp.all_movements
        markers = cpp.points_to_mark

        self.pcd_pub.publish(point_cloud.point_cloud(point_cloud.points, 'my_frame'))
        self.coverable_pcd_pub.publish(coverable_point_cloud.point_cloud(coverable_point_cloud.points, 'my_frame'))
        self.traversable_pcd_pub.publish(traversable_point_cloud.point_cloud(traversable_point_cloud.points, 'my_frame'))

        self.markers_msg = visualization_msgs.MarkerArray()
        self.last_id = 0
        ANIMATION = True

        if not ANIMATION:

            #Only markers
            
            for idx, marker in enumerate(markers):
                stamp = self.get_clock().now().to_msg()
                msg = ROSMessage.point_marker(self.last_id, stamp, marker["point"], marker["color"], "markers")
                self.markers_msg.markers.append(msg)
                self.last_id += 1
        

        

        #Add segments
        coverable_point_cloud.covered_points_idx = np.array([])
        for idx, segment in enumerate(all_segments):
            if len(segment.path) == 0:
                #all_movements.pop(idx)
                continue
            stamp = self.get_clock().now().to_msg()
            msg = ROSMessage.line_marker(self.last_id, stamp, segment.path, [0.1,1.0,1.0], "segment"+str(idx))
            self.markers_msg.markers.append(msg)
            self.last_id += 1
            
            coverable_point_cloud.visit_path(segment.path)

            if ANIMATION:
                visited_ground_points_pcd = coverable_point_cloud.get_covered_points_as_pcd()
                self.visited_ground_pcd_pub.publish(visited_ground_points_pcd)
                self.markers_pub.publish(self.markers_msg)
                time.sleep(1)

        #Add Movements
        for idx, move in enumerate(all_movements):
            stamp = self.get_clock().now().to_msg()
            msg = ROSMessage.line_marker(self.last_id, stamp, move.path, [1.0,0.5,0.5], "move"+str(idx))
            self.markers_msg.markers.append(msg)
            self.last_id += 1

        
            
            

        visited_ground_points_pcd = coverable_point_cloud.get_covered_points_as_pcd()
        self.visited_ground_pcd_pub.publish(visited_ground_points_pcd)
        self.markers_pub.publish(self.markers_msg)
        return


        current_max = 0
        while current_max < len(path):
            self.markers_msg = visualization_msgs.MarkerArray()
            stamp = self.get_clock().now().to_msg()
            msg = ROSMessage.line_marker(0, stamp, path[0:current_max], [0.1,1.0,1.0], PATH_NS)
            self.markers_msg.markers = [msg]
            current_max += 10
            self.markers_pub.publish(self.markers_msg)
예제 #6
0
    def __init__(self):
        super().__init__('MainNode')

        #Publishers:
        self.markers_pub = self.create_publisher(
            visualization_msgs.MarkerArray, 'marker', 3000)
        self.markers_path_pub = self.create_publisher(
            visualization_msgs.Marker, 'path_markers', 3000)

        self.pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'pcd',
                                             10)
        self.coverable_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                       'coverable_pcd', 100)
        self.visited_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                     'visited_pcd', 100)
        self.visited_ground_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'visited_ground_pcd', 100)
        self.traversable_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'traversable_pcd', 100)
        self.inaccessible_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'inaccessible_pcd', 100)
        self.path_pub = self.create_publisher(nav_msgs.Path, 'path', 10)

        with open(FILE, 'rb') as cached_pcd_file:
            cache_data = pickle.load(cached_pcd_file)
            self.prev_file = deepcopy(cache_data)

        #Create Environment
        environment = PointCloudEnvironment(
            self.print, "garage_terrain_assessment.dictionary", "garage.pcd",
            False)
        point_cloud = environment.full_pcd
        traversable_point_cloud = environment.traversable_pcd
        coverable_point_cloud = environment.coverable_pcd
        motion_planner = MotionPlanner(self.print, traversable_point_cloud)

        TIME_LIMIT = 400
        start_point = np.array([28.6, -6.7, -10.3])
        goal_coverage = 0.97
        paths_markers = []
        #Get CPP path
        for pub_path in ALL_PATHS:

            if not pub_path["do_calc"]:
                continue

            coverable_pcd = PointCloud(self.print,
                                       points=coverable_point_cloud.points)
            if pub_path["cpp"] == "BA*":
                cpp = BAstar(self.print,
                             motion_planner,
                             coverable_pcd,
                             time_limit=TIME_LIMIT,
                             parameters=pub_path["param"])
            if pub_path["cpp"] == "Inward Spiral":
                cpp = Spiral(self.print,
                             motion_planner,
                             coverable_pcd,
                             time_limit=TIME_LIMIT,
                             parameters=pub_path["param"])
            if pub_path["cpp"] == "Sampled BA*":
                cpp = RandomBAstar3(self.print,
                                    motion_planner,
                                    coverable_pcd,
                                    time_limit=TIME_LIMIT,
                                    parameters=pub_path["param"])

            ns = pub_path["ns"]
            pub_path["path"] = cpp.get_cpp_path(start_point,
                                                goal_coverage=goal_coverage)
            pub_path["markers"] = cpp.points_to_mark
            pub_path["stats"] = cpp.print_stats(pub_path["path"])
            save_data(ALL_PATHS)
            #self.print(path_msg)
            #paths_markers.append(path_msg)
            #path_pub = self.create_publisher(nav_msgs.Path, ns + '/path', 10)
            #self.markers_pub.publish(path_msg)
        #
        #self.markers_msg = visualization_msgs.MarkerArray()
        #
        #for idx, msg in enumerate(paths_markers):
        #    stamp = self.get_clock().now().to_msg()
        #    self.markers_msg.markers.append(msg)
        #    #self.last_id += 1
        #

        markers_pub = self.create_timer(5, self.marker_publisher)

        #self.markers_pub.publish(self.markers_msg)

        for idx, pub_path in enumerate(ALL_PATHS):
            if pub_path.get("stats", False) is False:
                pub_path["stats"] = self.prev_file[idx]["stats"]
            self.print("=" * 20)
            self.print(pub_path["ns"])
            self.print(pub_path["stats"])

        self.pcd_pub.publish(
            point_cloud.point_cloud(point_cloud.points, 'my_frame'))
        self.coverable_pcd_pub.publish(
            coverable_point_cloud.point_cloud(coverable_point_cloud.points,
                                              'my_frame'))
        self.traversable_pcd_pub.publish(
            traversable_point_cloud.point_cloud(traversable_point_cloud.points,
                                                'my_frame'))
예제 #7
0
     "cpp": lambda print, motion_planner, cov_points, time_limit, parameters: RandomBAstar(print, motion_planner, PointCloud(print, points= cov_points), time_limit, parameters), 
     'line': 'm',
     'confidence_color': (1.0, 0.0, 1.0, 0.3)
 },
 "BA*": {
     "name": "BA*",
     "do_hyper": True,
     "hyper_test": "step_param",
     "hyper_time_limit": 250,
     "hyper_min_coverage": 95,
     "do_experiment": True,
     "experiment_time_limit": 400,
     "experiment_results": [],
     "hyper_data": [],
     "formatted_hyper_data": [],
     "cpp": lambda print, motion_planner, cov_points, time_limit, parameters: BAstar(print, motion_planner, PointCloud(print, points= cov_points), time_limit, parameters) ,
     'line': 'r',
     'confidence_color': (1.0, 0.0, 0.0, 0.3)
 },
 "Curved BA*": {
     "name": "Curved BA*",
     "do_hyper": False,
     "hyper_test": "step_param",
     "hyper_time_limit": 60,
     "hyper_min_coverage": 95,
     "do_experiment": False,
     "experiment_time_limit": 400,
     "experiment_no_of_angles": 1,
     "experiment_results": [],
     "hyper_data": [],
     "formatted_hyper_data": [],
예제 #8
0
    def __init__(self):
        super().__init__('MainNode')

        #Publishers:
        self.markers_pub = self.create_publisher(
            visualization_msgs.MarkerArray, 'marker', 3000)
        self.markers_path_pub = self.create_publisher(
            visualization_msgs.Marker, 'path_markers', 3000)

        self.pcd_pub = self.create_publisher(sensor_msgs.PointCloud2, 'pcd',
                                             10)
        self.coverable_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                       'coverable_pcd', 100)
        self.visited_pcd_pub = self.create_publisher(sensor_msgs.PointCloud2,
                                                     'visited_pcd', 100)
        self.visited_ground_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'visited_ground_pcd', 100)
        self.traversable_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'traversable_pcd', 100)
        self.inaccessible_pcd_pub = self.create_publisher(
            sensor_msgs.PointCloud2, 'inaccessible_pcd', 100)
        self.path_pub = self.create_publisher(nav_msgs.Path, 'path', 10)

        #Create Environment
        environment = PointCloudEnvironment(
            self.print, PCD_DATA[PCD]["terr_assessment_file"],
            PCD_DATA[PCD]["pcd_file"], False)
        point_cloud = environment.full_pcd
        traversable_point_cloud = environment.traversable_pcd
        coverable_point_cloud = environment.coverable_pcd
        motion_planner = MotionPlanner(self.print, traversable_point_cloud)

        parameters = list(
            filter(lambda x: x["pcd"] == PCD and x["cpp"] == ALGORITHM,
                   PARAMETER_DATA))[0]["param"]

        if ALGORITHM == "BA*":
            cpp = BAstar(self.print,
                         motion_planner,
                         coverable_point_cloud,
                         time_limit=TIME_LIMIT,
                         parameters=parameters)
        if ALGORITHM == "Inward Spiral":
            cpp = Spiral(self.print,
                         motion_planner,
                         coverable_point_cloud,
                         time_limit=TIME_LIMIT,
                         parameters=parameters)
        if ALGORITHM == "Sampled BA*":
            cpp = RandomBAstar3(self.print,
                                motion_planner,
                                coverable_point_cloud,
                                time_limit=TIME_LIMIT,
                                parameters=parameters)

        self.path = cpp.get_cpp_path(PCD_DATA[PCD]["start_point"],
                                     goal_coverage=GOAL_COVERAGE)
        self.print(cpp.print_stats(self.path))

        markers_pub = self.create_timer(5, self.marker_publisher)

        self.pcd_pub.publish(
            point_cloud.point_cloud(point_cloud.points, 'my_frame'))
        self.coverable_pcd_pub.publish(
            coverable_point_cloud.point_cloud(coverable_point_cloud.points,
                                              'my_frame'))
        self.traversable_pcd_pub.publish(
            traversable_point_cloud.point_cloud(traversable_point_cloud.points,
                                                'my_frame'))