def _get_vehicle_features(self): t = self.vehicle.get_transform() control = self.vehicle.get_control() imu_sensor = self.sensors['imu'] gyroscope = imu_sensor.gyroscope accelerometer = imu_sensor.accelerometer return [ env_utils.speed(self.vehicle), control.gear, control.steer, control.throttle, control.brake, # Accelerometer: accelerometer[0], accelerometer[1], accelerometer[2], # Gyroscope: gyroscope[0], gyroscope[1], gyroscope[2], # Location t.location.x, t.location.y, # Compass: math.radians(imu_sensor.compass)]
def reward(self, actions, time_cost=-1.0, a=2.0): """An example reward function. Subclass to define your own.""" speed = env_utils.speed(self.vehicle) speed_limit = self.vehicle.get_speed_limit() if speed <= speed_limit: speed_penalty = 0.0 else: speed_penalty = a * (speed_limit - speed) return time_cost - self.collision_penalty + speed_penalty
def debug_text(self, actions): return ['%d FPS' % self.clock.get_fps(), '', 'Throttle: %.2f' % self.control.throttle, 'Steer: %.2f' % self.control.steer, 'Brake: %.2f' % self.control.brake, 'Reverse: %s' % ('T' if self.control.reverse else 'F'), 'Hand brake: %s' % ('T' if self.control.hand_brake else 'F'), 'Gear: %s' % {-1: 'R', 0: 'N'}.get(self.control.gear), '', 'Speed %.1f km/h' % env_utils.speed(self.vehicle), 'Speed limit %.1f km/h' % self.vehicle.get_speed_limit(), '', 'Reward: %.2f' % self.reward(actions), 'Collision penalty: %.2f' % self.collision_penalty]