Skip to content
Snippets Groups Projects
example_controller2.py 1.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • from enum import Enum, auto
    import copy
    
    class VehicleMode(Enum):
        Normal = auto()
        SwitchLeft = auto()
        SwitchRight = auto()
        Brake = auto()
    
    class LaneMode(Enum):
        Lane0 = auto()
        Lane1 = auto()
        Lane2 = auto()
    
    class State:
        x = 0.0
        y = 0.0
        theta = 0.0
        v = 0.0
        vehicle_mode: VehicleMode = VehicleMode.Normal
        lane_mode: LaneMode = LaneMode.Lane0
    
        def __init__(self, x, y, theta, v, vehicle_mode: VehicleMode, lane_mode: LaneMode):
            self.data = []
    
    
    def controller(ego:State, other:State, lane_map):
    
        output = copy.deepcopy(ego)
        if ego.vehicle_mode == VehicleMode.Normal:
            if lane_map.get_longitudinal_position(other.lane_mode, [other.x,other.y]) - lane_map.get_longitudinal_position(ego.lane_mode, [ego.x,ego.y]) > 0 \
            and lane_map.get_longitudinal_position(other.lane_mode, [other.x,other.y]) - lane_map.get_longitudinal_position(ego.lane_mode, [ego.x,ego.y]) < 3 \
            and ego.lane_mode == other.lane_mode:
                output.vehicle_mode = VehicleMode.Brake
    
    li213's avatar
    li213 committed
        elif ego.vehicle_mode == VehicleMode.Brake:
            if lane_map.get_longitudinal_position(other.lane_mode, [other.x,other.y]) - lane_map.get_longitudinal_position(ego.lane_mode, [ego.x,ego.y]) > 10 \
                or ego.lane_mode != other.lane_mode:
                output.vehicle_mode = VehicleMode.Normal
    
    li213's avatar
    li213 committed
        return output