Skip to content

Interfaces de Controle Adaptativas

Interface Yutraffic

A comunicação entre Aimsun.next e a Ferramenta Aimsun do Yutraffic Adapter (SimAdapter) é feita através da Interface de Protocolo-Buffer.

No início da simulação, Aimsun.next irá iniciar o SimAdapter e enviar as informações necessárias para cada um dos controladores Yutraffic definidos na rede.

A comunicação ocorre a cada segundo, mesmo que o passo da simulação seja menor.

Diagrama de Comunicação

sequenceDiagram
    Aimsun Next->>+SimAdapter: ANMessage::ANConfig
    loop Loop de Simulação
        Aimsun Next->>+SimAdapter: ANMessage::ANData
        SimAdapter->>+Aimsun Next: SitrafficMessage::SitrafficData
    end
    Aimsun Next->>+SimAdapter: ANMessage::ANEnd
    SimAdapter->>+Aimsun Next: SitrafficMessage::SitrafficEnd

Estruturas

As seguintes estruturas são definidas em SitrafficOffice.proto

Mensagens Aimsun.next

Mensagens enviadas por Aimsun Next para SimAdapter

Envelope da Mensagem

message ANMessage {
    oneof msg {
        ANConfig config = 1;
        ANData   data = 2;
        ANEnd    ended = 3;
    }
}

Mensagem de Início

message ANConfig {
    uint64              time = 1;
    repeated ANConfigController controller = 2;
    uint32              simulationStep = 3;
}
  • time: tempo de início da simulação em milissegundos desde a Era Unix
  • simulationStep: em milissegundos

Mensagem de Dados

message ANData {
    uint64          time = 1;
    repeated ANController   controller = 2;
}

Mensagem de Fim

message ANEnd {
    bool cancelled = 1;
}
  • cancelled: verdadeiro se a simulação foi cancelada

Informações do Controlador

message ANController {
    int32           id = 1;
    repeated ANDetector detectors = 2;
    repeated ANPublicTransport publicTransport = 3;
    ANControllerState       state = 4;
}

Informações de Configuração do Controlador

message ANConfigController {
    int32           id = 1;
    string          configurationFolder = 2;
    ANControllerState   state = 4;
    bool            reducedCommunication = 5;
}
  • reducedCommunication: entrega um mínimo de valores, por exemplo, não enviar os valores do AP

Informações da Linha de Transporte Público

message ANPublicTransport {
    uint32          reportingPointNumber = 1;
    uint32          lineNumber = 2;
    uint32          bearingNumber = 3;
    uint32          routeNumber = 4;
    uint32          priority = 5;
    uint32          length = 6;
    uint32          direction = 7;
    int32           timeTableSituation = 8;
}

Informações do Veículo

Nota: Não utilizado no momento

enum VehicleClass 
{
    ALL = 0;
    CAR = 1;
    TRUCK = 2;
    DELIVERY_TRUCK = 3;
    MOTORCYCLE = 4;
    UNCLASSIFIED = 5;
    CAR_WITH_TRAILER = 6;
    TRUCK_WITH_TRAILER = 7;
    TRUCK_WITH_SEMI_TRAILER = 8;
    BUS = 9;
}

message ANDetectorVehicleValue 
{
    VehicleClass vehicleType = 1; 
    int32 speed = 2;
    int32 length = 3;
    int32 occupancy = 4;
    int32 time_span_before = 5;
    int32 duration_a_b = 6; 
    int32 age = 7;
}
  • speed: Velocidade do veículo em km/h
  • length: Comprimento do veículo em metros
  • occupancy: a duração em que o veículo foi detectado em ms. Tempo em que o detector estava ativo
  • time_span_before: tempo em ms que o detector estava livre antes do veículo ser detectado
  • duration_a_b: tempo em ms que o veículo leva para ir do primeiro loop ao segundo em caso de um loop duplo
  • age: quão antiga é essa informação em segundos

Informações do Detector

message ANDetectorValue {
    uint32          time = 1;
    bool            present = 2;
}

message ANDetector {
    int32               id = 1;
    repeated ANDetectorValue    values = 2;
}

Estado do Controlador

message PartialIntersectionState
{
    uint32  partialIntersectionNr = 1;
    bool    on = 2;
}

message ANControllerState {
    bool            On = 1;
    uint32          signalProgram = 2;
    bool            modificationIv = 3; 
    bool            modificationPt = 4;
    repeated PartialIntersectionState   partialIntersectionState = 5;
    bool            centralMode = 6;
}
  • On = 1;
  • signalProgram
  • modificationIv: o controlador reage a indivíduos
  • modificationPt: estendido para V2, o controlador reage ao transporte público
  • partialIntersectionState: estendido para V2; ligando(desligando)
  • centralMode: estendido para V2, verdadeiro se o Controlador Central está operando

Mensagens do Yutraffic Tools Aimsun Adapter

Mensagens enviadas pelo Yutraffic Tools Aimsun Adapter para Aimsun.next

Envelope da Mensagem

message SitrafficMessage {
    oneof msg {
        SitrafficData data = 1;
        SitrafficEnd  ended = 2;
    }
}

Mensagem de Dados

message SitrafficData {
    repeated SitrafficIntersection intersection = 1;
}

Mensagem de Fim

message SitrafficEnd {
    bool Error = 1;
}

Informações da Fase

enum StageState
{
    StageOff  = 0;
    StageOn   = 1;
    SwitchingTo = 2;
}

message SitrafficStage {
    int32       id = 1;
    StageState  state = 2;
}

Informações do Quadro

message SitrafficFrame {
    int32 id = 1;
    bool IsActive = 2;
    bool IvDemandActive = 3;
    bool IvExtensionActive = 4;
    bool PtDemandActive = 5; 
    bool PtExtensionActive = 6;
}

Informações da Porta

enum PortState
{
    PortIsOff = 0;
    PortIsFlashing1Hz = 3;
    PortIsFlashing2Hz = 5;
    PortIsOn = 15;
}

message SitrafficPort {
    int32           id = 1;
    PortState       state = 2;
}

Informações do Grupo Semafórico

enum SignalColor {
    Off = 0;
    On = 1;
    Red = 2;
    RedAmber = 3;
    Green = 4;
    Amber = 5;
    AmberFlashing = 6;
    RedFlashing = 7;
    GreenFlashing = 8;
    AlternateFlashing = 9;
    GreenAmber = 10;
    Undefined=99;
}

message SitrafficSignalGroup {
    int32       id = 1;
    SignalColor state = 2;
}

Informações do Grupo Semafórico

message TrafficActuationVariable {
    int32   code = 1;
    int32   instance = 2;
    int32   value = 3;
}

Informações da Interseção

message SitrafficIntersection {
    int32                   id = 1;
    uint32                  cycle = 2;
    uint32                  secondInTheCycle = 3;
    uint32                  program = 4;
    repeated SitrafficSignalGroup       signalGroups = 5;
    repeated TrafficActuationVariable   variables = 6;
    repeated SitrafficStage         stages = 7;
    repeated SitrafficFrame         frames = 8;
    repeated SitrafficPort          ports = 9;
}