Programação de semáforo no SUMO

No material introdutório sobre o sumo (link) foi mostrado como adicionar um semáforo a um nó da rede. A especificação mostrada no material faz com que o SUMO gere uma programação semafórica automática, que não necessariamente representa a programação dos semáforos que se quer simular, ou também pode ser necessário alterar a programação para experimentar determinado cenário.

Nessa etapa do tutorial de uso do SUMO, será explicado como funciona a programação dos semáforos da simulação e como alterá-la.

Entendendo a programação do semáforo

A especificação vista anteriormente faz com que o Netconvert gere uma programação semafórica padrão e a adicione aos nós onde se solicitou o semáforo. Essa definição padrão pode ser alterada, permitindo assim especificar aquela que desejamos/precisamos.

Antes de criar uma programação semafórica, é preciso entender como funciona a programação. Quando se utiliza o Netconvert, ele se encarrega de criar uma programação semafórica que condiz com as definições da rede. Essa programação gerada pelo Netconvert está escrita no arquivo gerado por ele (com extensão .net.xm), cujo trecho responsável pelo tempo semafórico segue a seguir:

    <tlLogic id="p4" type="static" programID="0" offset="0">
        <phase duration="31" state="rrrGgGG"/>
        <phase duration="4" state="rrrygyy"/>
        <phase duration="6" state="rrrrGrr"/>
        <phase duration="4" state="rrrryrr"/>
        <phase duration="31" state="GGGrrrr"/>
        <phase duration="4" state="yyyrrrr"/>
    </tlLogic>

A cor do sinal de cada semáforo está disposta no parâmetro “state” e a duração dos sinais naquele estado é definido pelo parâmetro “duration”. A duração é um valor inteiro que define o tempo de duração da fase. Já a fase é a sequência de cores que o semáforo assumirá durante a duração de tempo. A fase é configurada a partir de uma string contendo as letras “r”, “y”, “g” e “G” sendo o significado de cada uma explicado a seguir:

  • r: define a cor vermelha (red) para o sinal;
  • y: define a cor amarela (yellow) para o sinal;
  • g: define a cor verde (green) para o sinal, sendo que a via com esse sinal não tem prioridade e deverão esperar, se existirem, os veículos de um sinal com prioridade passar para depois poder prosseguir;
  • G: define a cor verde, mas essa com prioridade.

O número de letras que compõem a string do estado depende da quantidade de sinais que precisam ser dados. Considerando o cruzamento abaixo, 7 sinais precisam ser programados e por isso a string possui 7 letras. Observe que o semáforo mais de cima possui destacado 3 sinais. Isso porque, mesmo sendo uma via simples, ela permite virar para a esquerda, direita e também ir reto. Para cada opção da via é gerado um sinal, o que permite ter sinal vermelho para virar a direita ou ir reto, mas sinal verde para virar a esquerda.

semaforo

A figura acima mostra como fica o semáforo para a string “rrrgggg”: os três  primeiro sinais (sinais destacados como 1, 2 e 3) são vermelhos (r – red) e os demais sinais são verdes (g – green). O semáforo ficará com essas cores pelo período especificado na duração (duration) da fase.

Programando um novo funcionamento para o semáforo

Tendo o conceito básico de como configurar os sinais do semáforo, é preciso agora criar um novo arquivo de especificação. Essa especificação é realizada através de um arquivo de especificação de semáforo que será executado, juntamente com os demais, pelo Netconvert na hora de criar a rede. A recomendação de nome para o arquivo a seguir é a extensão .tls.xml (no caso desse material o arquivo se chama meu.tls.xml).

<tlLogic id="p4" programID="meuTLS" offset="0" type="static">
 <phase duration="31" state="rrrgggg"/>
 <phase duration="4" state="rrrygyy"/>
 <phase duration="6" state="rrrrgrr"/>
 <phase duration="4" state="rrrryrr"/>
 <phase duration="31" state="gggrrrg"/>
 <phase duration="4" state="yyyrrrg"/>
</tlLogic>

A tag tlLogic (traffic light logic) precisa da especificação de um programID, sendo um nome único que identifique esse elemento. Também é preciso especificar um “id”, que é o nome do nó que possui o semáforo (definido no parâmetro “id” no arquivo de nós – arquivo com extensão .nod.xml). Também pode ser fornecido o parâmetro offset, que é um número inteiro que define um tempo inicial de offset para o programa, e o type, que aceita os valores “static” e “actuated” e que define, respectivamente, se a duração das fases será fixa ou se existirá uma prolongação baseada no time gaps entre os veículos.

Ao finalizar a especificação das fases do semáforo, ainda será necessário alterar o arquivo de configuração da criação da rede. Para isso é necessário adicionar a quinta linha mostrada na configuração a seguir e executar o arquivo mais uma vez no Netconvert.

<configuration>
   <input>
       <edge-files value="meu.edg.xml"/>
       <node-files value="meu.nod.xml"/>
       <tllogic-files value="meu.tls.xml"/>
   </input>
   <output>
       <output-file value="meu.net.xml"/>
   </output> 
</configuration>

A simulação poderá agora ser aberta, mas ao ser executada, a nova programação não entrará em vigor. É preciso clicar no semáforo com o botão direito e selecionar a opção “Switch to ‘meuTLS’, conforme mostra a figura abaixo. Sendo assim, é possível elaborar várias programações semafóricas e ficar alternando entre elas nas simulações, podendo compará-las, sem ter que gerar uma nova rede.

semaforo2

Share

9 opiniões sobre “Programação de semáforo no SUMO

  1. Thiago Henrique Pereira

    Boa noite,
    Preciso desenvolver para meu TCC, um semáforo que receba um feedback de fluxo de veículos e calcule o tempo ótimo através do método de Webster. Tem como eu inserir no arquivo de programação do semáforo esse cálculo?

     
    Reply
    1. Ghivvago Damas

      Sei que esse cálculo estabelece-se externamente utilizando a TraCi, que por coincidência também é minha intenção, só que irei definir os tempos por meio de Algoritmos Genéticos.

       
      Reply
      1. Vinicius Mansur

        É possível realizar a sincronização de um semáforo com o SUMO , apenas com XML ou obrigatoriamente preciso utilizar uma API, (acho que é a TRACI) e utilizar PYTHON???

         
        Reply
        1. Nivali

          A sincronização pode ser feita apenas com o XML, inclusive gerando a “onda verde”, bastando calcular os tempos necessários e reconfigurando os semáforos, conforme mostrado nesse artigo.

           
          Reply
  2. Aly

    Não aparece a opção “Switch to ‘meuTLS” o que pode ser?

     
    Reply
    1. Benjamin Grando Moreira

      Uma possibilidade é que você não tenha realmente clicado na junção. As vezes acontece. Verifique se aparece o nome “tlLogic” no topo do menu que abri ao clicar com o botão direito. Caso ainda não funcione, me envia a versão do seu SUMO que eu dou uma olhada.

       
      Reply
      1. Aly

        tlLogic aparece sim! Más não aparece ainda a opção escolher “Switch to ‘meuTLS'”. Uso a versão SUMO 0.29.0.

         
        Reply
  3. Marina S. Morales

    Minha simulação tem mais de um cruzamento e eu só consigo alterar os semáforos de um cruzamento apenas, quando eu insiro mais um nó de cruzamento com semáforo dá erro, mesmo eu escrevendo a programação corretamente e do mesmo jeito que aparece no arquivo .net.xml, alguma ideia do que está errado? Grata.

     
    Reply
    1. Benjamin Grando Moreira

      Tenha certeza de ter indicado corretamente o identificar do cruzamento e que um novo nome para a programação tenha sido dado.

      Na tag tlLogic, reveja id=”NOME_DO_CRUZAMENTO” e programID=”NOVO_NOME_PARA_A_PROGRAMAÇÃO”

       
      Reply

Deixe um comentário para Aly Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.