Example #1
0
    def save_state(self, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()
        data['_checkpoint']['progress'] = [self._index, self.total]

        save_dict(endpoint, data)
Example #2
0
    def save_global_record(route_record, sensors, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        stats_dict = route_record.__dict__
        data['_checkpoint']['global_record'] = stats_dict
        data['values'] = [
            '{:.3f}'.format(stats_dict['scores']['score_composed']),
            '{:.3f}'.format(stats_dict['scores']['score_route']),
            '{:.3f}'.format(stats_dict['scores']['score_penalty']),
            # infractions
            '{:.3f}'.format(stats_dict['infractions']['collisions_layout']),
            '{:.3f}'.format(
                stats_dict['infractions']['collisions_pedestrian']),
            '{:.3f}'.format(stats_dict['infractions']['collisions_vehicle']),
            '{:.3f}'.format(stats_dict['infractions']['outside_route_lanes']),
            '{:.3f}'.format(stats_dict['infractions']['red_light']),
            '{:.3f}'.format(stats_dict['infractions']['route_dev']),
            '{:.3f}'.format(stats_dict['infractions']['stop_infraction']),
            '{:.3f}'.format(stats_dict['infractions']['route_timeout']),
            '{:.3f}'.format(stats_dict['infractions']['vehicle_blocked'])
        ]

        data['labels'] = [
            'avg. total score', 'avg. route score', 'avg. infraction penalty',
            'collisions with layout', 'collisions with pedestrians',
            'collisions with vehicles', 'off-road infractions',
            'red lights infractions', 'route deviation infractions',
            'stop sign infractions', 'timeouts', 'vehicle blocked'
        ]

        data['sensors'] = sensors

        save_dict(endpoint, data)
Example #3
0
    def save_global_record(route_record, sensors, total_routes, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        stats_dict = route_record.__dict__
        data['_checkpoint']['global_record'] = stats_dict
        data['values'] = ['{:.3f}'.format(stats_dict['scores']['score_composed']),
                          '{:.3f}'.format(stats_dict['scores']['score_route']),
                          '{:.3f}'.format(stats_dict['scores']['score_penalty']),
                          # infractions
                          '{:.3f}'.format(stats_dict['infractions']['collisions_pedestrian']),
                          '{:.3f}'.format(stats_dict['infractions']['collisions_vehicle']),
                          '{:.3f}'.format(stats_dict['infractions']['collisions_layout']),
                          '{:.3f}'.format(stats_dict['infractions']['red_light']),
                          '{:.3f}'.format(stats_dict['infractions']['stop_infraction']),
                          '{:.3f}'.format(stats_dict['infractions']['outside_route_lanes']),
                          '{:.3f}'.format(stats_dict['infractions']['route_dev']),
                          '{:.3f}'.format(stats_dict['infractions']['route_timeout']),
                          '{:.3f}'.format(stats_dict['infractions']['vehicle_blocked'])
                          ]

        data['labels'] = ['Avg. driving score',
                          'Avg. route completion',
                          'Avg. infraction penalty',
                          'Collisions with pedestrians',
                          'Collisions with vehicles',
                          'Collisions with layout',
                          'Red lights infractions',
                          'Stop sign infractions',
                          'Off-road infractions',
                          'Route deviations',
                          'Route timeouts',
                          'Agent blocked'
                          ]

        entry_status = "Finished"
        eligible = "True"

        route_records = data["_checkpoint"]["records"]
        progress = data["_checkpoint"]["progress"]

        if progress[1] != total_routes:
            raise Exception('Critical error with the route registry.')

        if len(route_records) != total_routes or progress[0] != progress[1]:
            entry_status = "Finished with missing data"
            eligible = "False"
        else:
            for route in route_records:
                route_status = route["status"]
                if "Agent crashed" in route_status:
                    entry_status = "Finished with agent errors"
                    break

        data['entry_status'] = entry_status
        data['eligible'] = eligible

        save_dict(endpoint, data)
Example #4
0
    def save_entry_status(entry_status, eligible, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        data['entry_status'] = entry_status
        data['eligible'] = eligible
        save_dict(endpoint, data)
Example #5
0
    def save_sensors(sensors, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        if not data['sensors']:
            data['sensors'] = sensors

            save_dict(endpoint, data)
Example #6
0
    def save_record(route_record, index, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        stats_dict = route_record.__dict__
        record_list = data['_checkpoint']['records']
        if index > len(record_list):
            print('Error! No enough entries in the list')
            sys.exit(-1)
        elif index == len(record_list):
            record_list.append(stats_dict)
        else:
            record_list[index] = stats_dict

        save_dict(endpoint, data)
Example #7
0
    def save_global_record(route_record, sensors, endpoint):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        stats_dict = route_record.__dict__
        data['_checkpoint']['global_record'] = stats_dict
        data['values'] = [
            '{:.3f}'.format(stats_dict['scores']['score_composed']),
            '{:.3f}'.format(stats_dict['scores']['score_route']),
            '{:.3f}'.format(stats_dict['scores']['score_penalty']),
            # infractions
            '{:.3f}'.format(stats_dict['infractions']['collisions_pedestrian']
                            ),
            '{:.3f}'.format(stats_dict['infractions']['collisions_vehicle']),
            '{:.3f}'.format(stats_dict['infractions']['collisions_layout']),
            '{:.3f}'.format(stats_dict['infractions']['red_light']),
            '{:.3f}'.format(stats_dict['infractions']['stop_infraction']),
            '{:.3f}'.format(stats_dict['infractions']['outside_route_lanes']),
            '{:.3f}'.format(stats_dict['infractions']['route_dev']),
            '{:.3f}'.format(stats_dict['infractions']['route_timeout']),
            '{:.3f}'.format(stats_dict['infractions']['vehicle_blocked']),
            # addition: new event
            '{:.3f}'.format(stats_dict['infractions']['on_sidewalk']),
            '{:.3f}'.format(stats_dict['infractions']['off_road']),
            '{:.3f}'.format(
                stats_dict['infractions']['outside_lane_infraction']),
            '{:.3f}'.format(stats_dict['infractions']['wrong_lane']),
            '{:.3f}'.format(stats_dict['infractions']['collisions_invisible'])
        ]

        data['labels'] = [
            'Avg. driving score', 'Avg. route completion',
            'Avg. infraction penalty', 'Collisions with pedestrians',
            'Collisions with vehicles', 'Collisions with layout',
            'Red lights infractions', 'Stop sign infractions',
            'Off-road infractions', 'Route deviations', 'Route timeouts',
            'Agent blocked', 'On Sidewalk', 'Off Road', 'Outside Lane',
            'Collisions Invisible'
        ]

        data['sensors'] = sensors

        save_dict(endpoint, data)
Example #8
0
    def save_global_record(route_record, sensors, endpoint, filename, config):
        data = fetch_dict(endpoint)
        if not data:
            data = create_default_json_msg()

        stats_dict = route_record.__dict__
        data['_checkpoint']['global_record'] = stats_dict
        data['values'] = [
            '{:.3f}'.format(stats_dict['scores']['score_composed']),
            '{:.3f}'.format(stats_dict['scores']['score_route']),
            '{:.3f}'.format(stats_dict['scores']['score_penalty']),
            # infractions
            '{:.3f}'.format(stats_dict['infractions']['collisions_layout']),
            '{:.3f}'.format(
                stats_dict['infractions']['collisions_pedestrian']),
            '{:.3f}'.format(stats_dict['infractions']['collisions_vehicle']),
            '{:.3f}'.format(stats_dict['infractions']['outside_route_lanes']),
            '{:.3f}'.format(stats_dict['infractions']['red_light']),
            '{:.3f}'.format(stats_dict['infractions']['route_dev']),
            '{:.3f}'.format(stats_dict['infractions']['stop_infraction']),
            '{:.3f}'.format(stats_dict['infractions']['route_timeout']),
            '{:.3f}'.format(stats_dict['infractions']['vehicle_blocked']),
            '{:.3f}'.format(config.weather.precipitation)
        ]

        data['labels'] = [
            'avg. total score', 'avg. route score', 'avg. infraction penalty',
            'collisions with layout', 'collisions with pedestrians',
            'collisions with vehicles', 'off-road infractions',
            'red lights infractions', 'route deviation infractions',
            'stop sign infractions', 'timeouts', 'vehicle blocked',
            'precipitation', 'precipitation_deposits', 'cloudiness',
            'wind_intensity', 'sun_azimuth_angle', 'sun_altitude_angle',
            'fog_density', 'fog_distance', 'wetness'
        ]

        data['sensors'] = sensors

        # fields = ['avg. total score', 'avg. route score', 'avg. infraction penalty', 'collisions with layout',
        #           'collisions with pedestrians', 'collisions with vehicles', 'off-road infractions',
        #           'red lights infractions', 'route deviation infractions', 'stop sign infractions',
        #           'timeouts', 'vehicle blocked']

        myvalues = [{
            'avg. total score':
            '{:.3f}'.format(stats_dict['scores']['score_composed']),
            'avg. route score':
            '{:.3f}'.format(stats_dict['scores']['score_route']),
            'avg. infraction penalty':
            '{:.3f}'.format(stats_dict['scores']['score_penalty']),
            'collisions with layout':
            math.ceil(stats_dict['infractions']['collisions_layout']),
            'collisions with pedestrians':
            math.ceil(stats_dict['infractions']['collisions_pedestrian']),
            'collisions with vehicles':
            math.ceil(stats_dict['infractions']['collisions_vehicle']),
            'off-road infractions':
            '{:.3f}'.format(stats_dict['infractions']['outside_route_lanes']),
            'red lights infractions':
            '{:.3f}'.format(stats_dict['infractions']['red_light']),
            'route deviation infractions':
            '{:.3f}'.format(stats_dict['infractions']['route_dev']),
            'stop sign infractions':
            '{:.3f}'.format(stats_dict['infractions']['stop_infraction']),
            'timeouts':
            '{:.3f}'.format(stats_dict['infractions']['route_timeout']),
            'vehicle blocked':
            '{:.3f}'.format(stats_dict['infractions']['vehicle_blocked']),
            'precipitation':
            '{:.3f}'.format(config.weather.precipitation),
            'precipitation_deposits':
            '{:.3f}'.format(config.weather.precipitation_deposits),
            'cloudiness':
            '{:.3f}'.format(config.weather.cloudiness),
            'wind_intensity':
            '{:.3f}'.format(config.weather.wind_intensity),
            'sun_azimuth_angle':
            '{:.3f}'.format(config.weather.sun_azimuth_angle),
            'sun_altitude_angle':
            '{:.3f}'.format(config.weather.sun_altitude_angle),
            'fog_density':
            '{:.3f}'.format(config.weather.fog_density),
            'fog_distance':
            '{:.3f}'.format(config.weather.fog_distance),
            'wetness':
            '{:.3f}'.format(config.weather.wetness)
        }]

        file_exists = os.path.isfile(filename)

        # writing to csv file
        with open(filename, 'a') as csvfile:
            # creating a csv dict writer object
            writer = csv.DictWriter(csvfile, fieldnames=data['labels'])

            if not file_exists:
                # writing headers (field names)
                writer.writeheader()
            # writing data rows
            writer.writerows(myvalues)

        save_dict(endpoint, data)