Esempio n. 1
0
 def __init__(self, pose_stream: erdos.ReadStream,
              prediction_stream: erdos.ReadStream,
              static_obstacles_stream: erdos.ReadStream,
              lanes_stream: erdos.ReadStream,
              route_stream: erdos.ReadStream,
              open_drive_stream: erdos.ReadStream,
              time_to_decision_stream: erdos.ReadStream,
              waypoints_stream: erdos.WriteStream, flags):
     pose_stream.add_callback(self.on_pose_update)
     prediction_stream.add_callback(self.on_prediction_update)
     static_obstacles_stream.add_callback(self.on_static_obstacles_update)
     lanes_stream.add_callback(self.on_lanes_update)
     route_stream.add_callback(self.on_route)
     open_drive_stream.add_callback(self.on_opendrive_map)
     time_to_decision_stream.add_callback(self.on_time_to_decision)
     erdos.add_watermark_callback([
         pose_stream, prediction_stream, static_obstacles_stream,
         lanes_stream, time_to_decision_stream, route_stream
     ], [waypoints_stream], self.on_watermark)
     self._logger = erdos.utils.setup_logging(self.config.name,
                                              self.config.log_file_name)
     self._flags = flags
     # We do not know yet the vehicle's location.
     self._ego_transform = None
     self._map = None
     self._world = World(flags, self._logger)
     if self._flags.planning_type == 'waypoint':
         # Use the FOT planner for overtaking.
         from pylot.planning.frenet_optimal_trajectory.fot_planner \
             import FOTPlanner
         self._planner = FOTPlanner(self._world, self._flags, self._logger)
     elif self._flags.planning_type == 'frenet_optimal_trajectory':
         from pylot.planning.frenet_optimal_trajectory.fot_planner \
             import FOTPlanner
         self._planner = FOTPlanner(self._world, self._flags, self._logger)
     elif self._flags.planning_type == 'hybrid_astar':
         from pylot.planning.hybrid_astar.hybrid_astar_planner \
             import HybridAStarPlanner
         self._planner = HybridAStarPlanner(self._world, self._flags,
                                            self._logger)
     elif self._flags.planning_type == 'rrt_star':
         from pylot.planning.rrt_star.rrt_star_planner import RRTStarPlanner
         self._planner = RRTStarPlanner(self._world, self._flags,
                                        self._logger)
     else:
         raise ValueError('Unexpected planning type: {}'.format(
             self._flags.planning_type))
     self._state = BehaviorPlannerState.FOLLOW_WAYPOINTS
     self._pose_msgs = deque()
     self._prediction_msgs = deque()
     self._static_obstacles_msgs = deque()
     self._lanes_msgs = deque()
     self._ttd_msgs = deque()
Esempio n. 2
0
    def __init__(self, pose_stream, rgb_camera_stream, tl_camera_stream,
                 prediction_camera_stream, depth_camera_stream,
                 point_cloud_stream, segmentation_stream, imu_stream,
                 obstacles_stream, obstacles_error_stream, traffic_lights_stream,
                 tracked_obstacles_stream, lane_detection_stream,
                 prediction_stream, waypoints_stream, control_stream,
                 display_control_stream, pygame_display, flags):
        visualize_streams = []
        self._pose_msgs = deque()
        pose_stream.add_callback(
            partial(self.save, msg_type="Pose", queue=self._pose_msgs))
        visualize_streams.append(pose_stream)

        self._bgr_msgs = deque()
        rgb_camera_stream.add_callback(
            partial(self.save, msg_type="RGB", queue=self._bgr_msgs))
        visualize_streams.append(rgb_camera_stream)

        self._imu_msgs = deque()
        imu_stream.add_callback(
            partial(self.save, msg_type="IMU", queue=self._imu_msgs))
        visualize_streams.append(imu_stream)

        """
        self._obstacle_msgs = deque()
        obstacles_stream.add_callback(
            partial(self.save, msg_type="Obstacle", queue=self._obstacle_msgs))
        visualize_streams.append(obstacles_stream)
        """

        self._obstacle_error_msgs = deque()
        obstacles_error_stream.add_callback(
            partial(self.save, msg_type="ObstacleError", queue=self._obstacle_error_msgs))
        visualize_streams.append(obstacles_error_stream)

        self._tracked_obstacle_msgs = deque()
        tracked_obstacles_stream.add_callback(
            partial(self.save,
                    msg_type="TrackedObstacle",
                    queue=self._tracked_obstacle_msgs))
        visualize_streams.append(tracked_obstacles_stream)

        self._tl_camera_msgs = deque()
        tl_camera_stream.add_callback(
            partial(self.save, msg_type="TLCamera",
                    queue=self._tl_camera_msgs))
        visualize_streams.append(tl_camera_stream)

        self._traffic_light_msgs = deque()
        traffic_lights_stream.add_callback(
            partial(self.save,
                    msg_type="TrafficLight",
                    queue=self._traffic_light_msgs))
        visualize_streams.append(traffic_lights_stream)

        self._waypoint_msgs = deque()
        waypoints_stream.add_callback(
            partial(self.save, msg_type="Waypoint", queue=self._waypoint_msgs))
        visualize_streams.append(waypoints_stream)

        self._prediction_camera_msgs = deque()
        prediction_camera_stream.add_callback(
            partial(self.save,
                    msg_type="PredictionCamera",
                    queue=self._prediction_camera_msgs))
        visualize_streams.append(prediction_camera_stream)

        self._prediction_msgs = deque()
        prediction_stream.add_callback(
            partial(self.save,
                    msg_type="Prediction",
                    queue=self._prediction_msgs))
        visualize_streams.append(prediction_stream)

        self._point_cloud_msgs = deque()
        point_cloud_stream.add_callback(
            partial(self.save,
                    msg_type="PointCloud",
                    queue=self._point_cloud_msgs))
        visualize_streams.append(point_cloud_stream)

        self._lane_detection_msgs = deque()
        lane_detection_stream.add_callback(
            partial(self.save,
                    msg_type="Lanes",
                    queue=self._lane_detection_msgs))
        visualize_streams.append(lane_detection_stream)

        self._depth_msgs = deque()
        depth_camera_stream.add_callback(
            partial(self.save, msg_type="Depth", queue=self._depth_msgs))
        visualize_streams.append(depth_camera_stream)

        self._segmentation_msgs = deque()
        segmentation_stream.add_callback(
            partial(self.save,
                    msg_type="Segmentation",
                    queue=self._segmentation_msgs))
        visualize_streams.append(segmentation_stream)

        self._control_msgs = deque()
        control_stream.add_callback(
            partial(self.save, msg_type="Control", queue=self._control_msgs))
        visualize_streams.append(control_stream)

        # Register a watermark callback on all the streams to be visualized.
        erdos.add_watermark_callback(visualize_streams, [], self.on_watermark)

        # Add a callback on a control stream to figure out what to display.
        display_control_stream.add_callback(self.change_display)
        self._logger = erdos.utils.setup_logging(self.config.name,
                                                 self.config.log_file_name)
        self.display = pygame_display

        # Set the font.
        fonts = [x for x in pygame.font.get_fonts() if 'mono' in x]
        default_font = 'ubuntumono'
        mono = default_font if default_font in fonts else fonts[0]
        mono = pygame.font.match_font(mono)
        self.font = pygame.font.Font(mono, 14)

        # Array of keys to figure out which message to display.
        self.current_display = 0
        self.display_array = []
        self.window_titles = []
        if flags.visualize_rgb_camera:
            self.display_array.append("RGB")
            self.window_titles.append("RGB Camera")
        if flags.visualize_detected_obstacles: 
            # include obstacles error here; todo: seperate into flags
            self.display_array.append("ObstacleError")
            self.window_titles.append("Detected obstacles")
            #self.display_array.append("Obstacle")
            #self.window_titles.append("Detected obstacles")
        if flags.visualize_tracked_obstacles:
            self.display_array.append("TrackedObstacle")
            self.window_titles.append("Obstacle tracking")
        if flags.visualize_detected_traffic_lights:
            self.display_array.append("TLCamera")
            self.window_titles.append("Detected traffic lights")
        if flags.visualize_waypoints:
            self.display_array.append("Waypoint")
            self.window_titles.append("Planning")
        if flags.visualize_prediction:
            self.display_array.append("PredictionCamera")
            self.window_titles.append("Prediction")
        if flags.visualize_lidar:
            self.display_array.append("PointCloud")
            self.window_titles.append("LiDAR")
        if flags.visualize_detected_lanes:
            self.display_array.append("Lanes")
            self.window_titles.append("Detected lanes")
        if flags.visualize_depth_camera:
            self.display_array.append("Depth")
            self.window_titles.append("Depth Camera")
        if flags.visualize_segmentation:
            self.display_array.append("Segmentation")
            self.window_titles.append("Segmentation")
        if flags.visualize_world:
            self._planning_world = World(flags, self._logger)
            top_down_transform = pylot.utils.get_top_down_transform(
                pylot.utils.Transform(pylot.utils.Location(),
                                      pylot.utils.Rotation()),
                flags.top_down_camera_altitude)
            self._bird_eye_camera_setup = RGBCameraSetup(
                'bird_eye_camera', flags.camera_image_width,
                flags.camera_image_height, top_down_transform, 90)
            self.display_array.append("PlanningWorld")
            self.window_titles.append("Planning world")
        else:
            self._planning_world = None
        assert len(self.display_array) == len(self.window_titles), \
            "The display and titles differ."
            
        # Save the flags.
        self._flags = flags