Source code for OpenRacer.example
import numpy as np
import math
from OpenRacer.Interface import Interface
from OpenRacer.Model import ModelInterface, ModelBase
[docs]class RandomModel(ModelBase):
def __init__(self, seed:int=0):
super().__init__()
self.name = "rand"
[docs] def clamp(self, n, smallest, largest):
return max(smallest, min(n, largest))
[docs] def scale(self, n, smallest, largest, newSmallest, newLargest):
return n* (newLargest - newSmallest)/( largest - smallest )
[docs] def preProcess(self, inputData):
return inputData
[docs] def trainEval(self, inputData):
return np.clip(np.random.rand(len(inputData),2) * 5 -2, -1,1)
[docs] def testEval(self, inputData):
res = []
for carInputData in inputData:
x = carInputData["x"]
y = carInputData["y"]
nextpointId = (carInputData["closest_waypoints"][0] + 0) % len(self.track)
temp = self.track[nextpointId]
nextpoint = [temp[0], temp[2]]
dy = nextpoint[1]-y
dx = nextpoint[0]-x
angle = self.clamp(math.degrees(math.atan(-dy/dx)), -30, 30)
angleScaled = self.scale(angle, -30, 30, -1, 1)
magnitude = self.clamp(math.sqrt(dx **2 + dy** 2), -5, 5)
res.append([angleScaled, magnitude])
return res
[docs] def rewardFn(self, action, inputData):
return [0 for i in range(len(action))]
[docs] def save(self, epocNum:int, dirPath):
print(f"Saved model for epoch {epocNum}")
return
if __name__ == '__main__':
randModel = RandomModel()
modelInterface = ModelInterface()
modelInterface.addModel(randModel)
modelInterface.setModel(randModel.name)
Interface(model=modelInterface).start()