Exemplo n.º 1
0
    def init(self):
        '''
        All common initialization goes here.
        '''
        self.halfExtendedViewInAngle = []
        self.shift = []
        for lane in range(0, LANES):
            self.halfExtendedViewInAngle.append(
                arcAngle(LANE_RADIUS[lane],
                         (self.totalExtendedView / 2) * SCALE))
            self.shift.append(
                arcAngle(LANE_RADIUS[lane], (CAR_LENGTH / 2) * SCALE))

        # Intialize Observation Space
        self.initObservationSpace(self.k)

        # Intialize Communication
        self.isCommEnabled = False
        if self.totalCommView > 0:
            if not (self.totalCommView % self.regWidthInMetres == 0):
                raiseValueError(
                    "communicable region should be completely divisible by comm-size"
                )

            if not (self.regWidthInMetres % self.cellSize == 0):
                raiseValueError(
                    "comm-size should be completely divisible by cell-size")

            self.isCommEnabled = True
            self.initComm()
Exemplo n.º 2
0
    def initDrawGrid(self):
        # Calculate start position and cell size in Degrees for drawing grids
        self.extendedViewInDeg = []
        self.cellSizeInDeg = []

        for lane in range(0, constants.LANES):
            self.extendedViewInDeg.append(
                arcAngle(constants.LANE_RADIUS[lane],
                         self.extendedViewInMetre * constants.SCALE))
            self.cellSizeInDeg.append(
                arcAngle(constants.LANE_RADIUS[lane],
                         self.cellSizeInMetre * constants.SCALE))
Exemplo n.º 3
0
 def initCollisionAngle(self):
     '''
     Function : Calculates the minimum angle required between two cars for no collision.
     '''
     self.minCollisionAngle = []
     for lane in range(0, LANES):
         self.minCollisionAngle.append(
             arcAngle(LANE_RADIUS[lane], CAR_LENGTH * SCALE))
Exemplo n.º 4
0
    def performDoNothing(self, laneMap, agentLane, agentIDX):
        agentSpeed = laneMap[agentLane][agentIDX]['speed']
        agentPos = laneMap[agentLane][agentIDX]['pos']

        distTravelledInMetres = self.distTravelled(0, self.tPeriod, agentSpeed)
        distTravelledInDeg = arcAngle(LANE_RADIUS[agentLane],
                                      distTravelledInMetres * SCALE)
        distTravelledInDeg %= 360
        newAgentSpeed = agentSpeed
        newAgentSpeed = np.clip(newAgentSpeed, 0, self.maxSpeed)
        '''
        Only agent's new pos is required to check for collision
        '''
        collision = False
        if not self.checkValidAction(agentLane, laneMap,
                                     agentPos + distTravelledInDeg, agentIDX):
            distTravelledInDeg = 0.0
            newAgentSpeed = 0.0
            collision = True
        return distTravelledInDeg, newAgentSpeed, collision, agentLane
Exemplo n.º 5
0
    def performDecelerate(self, laneMap, agentLane, agentIDX):
        agentSpeed = laneMap[agentLane][agentIDX]['speed']
        agentPos = laneMap[agentLane][agentIDX]['pos']
        dec = -IDM_CONSTS["DECELERATION_RATE"]
        if agentSpeed <= 0.0:
            dec = 0.0

        distTravelledInMetres = self.distTravelled(dec, self.tPeriod,
                                                   agentSpeed)
        distTravelledInDeg = arcAngle(LANE_RADIUS[agentLane],
                                      distTravelledInMetres * SCALE)
        distTravelledInDeg %= 360
        newAgentSpeed = self.newSpeed(dec, self.tPeriod, agentSpeed)
        newAgentSpeed = np.clip(newAgentSpeed, 0, self.maxSpeed)
        '''
        Only agent new pos is required to check for collision
        '''
        collision = False
        if not self.checkValidAction(agentLane, laneMap,
                                     agentPos + distTravelledInDeg, agentIDX):
            distTravelledInDeg = 0.0
            newAgentSpeed = 0.0
            collision = True
        return distTravelledInDeg, newAgentSpeed, collision, agentLane
Exemplo n.º 6
0
 def initLaneChangeAngle(self):
     self.laneChangeAngle = []
     for lane in range(0, LANES):
         self.laneChangeAngle.append(
             arcAngle(LANE_RADIUS[lane], (CAR_LENGTH) * SCALE))