def __publish_ground_actors_data(self, timestamp, watermark_msg): # Get all the actors in the simulation. actor_list = self._world.get_actors() (vehicles, people, traffic_lights, speed_limits, traffic_stops) = extract_data_in_pylot_format(actor_list) # Send ground people and vehicles. self.ground_obstacles_stream.send( pylot.simulation.messages.GroundObstaclesMessage( timestamp, vehicles + people)) self.ground_obstacles_stream.send(erdos.WatermarkMessage(timestamp)) # Send ground traffic lights. self.ground_traffic_lights_stream.send( pylot.simulation.messages.GroundTrafficLightsMessage( timestamp, traffic_lights)) self.ground_traffic_lights_stream.send( erdos.WatermarkMessage(timestamp)) # Send ground speed signs. self.ground_speed_limit_signs_stream.send( pylot.simulation.messages.GroundSpeedSignsMessage( timestamp, speed_limits)) self.ground_speed_limit_signs_stream.send( erdos.WatermarkMessage(timestamp)) # Send stop signs. self.ground_stop_signs_stream.send( pylot.simulation.messages.GroundStopSignsMessage( timestamp, traffic_stops)) self.ground_stop_signs_stream.send(erdos.WatermarkMessage(timestamp))
def send_perfect_detections(self, perfect_obstacles_stream, perfect_traffic_lights_stream, timestamp, tl_camera_location): """Send perfect detections for agents and traffic lights. This method first connects to the simulator to extract all the agents and traffic light in a scenario. Next, it transforms them into the types Pylot expects, and sends them on the streams for perfect detections. Note: This is only used when executing using a perfect perception component. """ if not (FLAGS.simulator_obstacle_detection or FLAGS.simulator_traffic_light_detection or FLAGS.evaluate_obstacle_detection or FLAGS.evaluate_obstacle_tracking): return from pylot.simulation.utils import extract_data_in_pylot_format actor_list = self._world.get_actors() (vehicles, people, traffic_lights, _, _) = extract_data_in_pylot_format(actor_list) if (FLAGS.simulator_obstacle_detection or FLAGS.evaluate_obstacle_detection or FLAGS.evaluate_obstacle_tracking): perfect_obstacles_stream.send( ObstaclesMessage(timestamp, vehicles + people)) perfect_obstacles_stream.send(erdos.WatermarkMessage(timestamp)) if FLAGS.simulator_traffic_light_detection: vec_transform = pylot.utils.Transform.from_simulator_transform( self._ego_vehicle.get_transform()) tl_camera_transform = pylot.utils.Transform( tl_camera_location, pylot.utils.Rotation()) visible_tls = [] if self._town_name is None: self._town_name = self._world.get_map().name for tl in traffic_lights: if tl.is_traffic_light_visible( vec_transform * tl_camera_transform, self._town_name, distance_threshold=FLAGS. static_obstacle_distance_threshold): if self._town_name not in ['Town01', 'Town02']: delta_y = -5 if self._town_name == 'Town04': delta_y = -2 # Move the traffic light location to the road. tl.transform = tl.transform * pylot.utils.Transform( pylot.utils.Location(delta_y, 0, 5), pylot.utils.Rotation()) visible_tls.append(tl) perfect_traffic_lights_stream.send( TrafficLightsMessage(timestamp, visible_tls)) perfect_traffic_lights_stream.send( erdos.WatermarkMessage(timestamp))
def __publish_ground_actors_data(self, timestamp, watermark_msg): # Get all the actors in the simulation. actor_list = self._world.get_actors() (vehicles, people, traffic_lights, speed_limits, traffic_stops) = extract_data_in_pylot_format(actor_list) obstacles_msg = ObstaclesMessage(timestamp, vehicles + people) self._ground_obstacles_stream.send(obstacles_msg) self._ground_obstacles_stream.send(watermark_msg) traffic_lights_msg = TrafficLightsMessage(timestamp, traffic_lights) self._ground_traffic_lights_stream.send(traffic_lights_msg) self._ground_traffic_lights_stream.send(watermark_msg) speed_limit_signs_msg = SpeedSignsMessage(timestamp, speed_limits) self._ground_speed_limit_signs_stream.send(speed_limit_signs_msg) self._ground_speed_limit_signs_stream.send(watermark_msg) stop_signs_msg = StopSignsMessage(timestamp, traffic_stops) self._ground_stop_signs_stream.send(stop_signs_msg) self._ground_stop_signs_stream.send(watermark_msg)