Professor Benjamin

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:

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.

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.

Sair da versão mobile