{"id":495,"date":"2014-08-18T23:54:56","date_gmt":"2014-08-19T02:54:56","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/?p=495"},"modified":"2021-06-24T07:42:12","modified_gmt":"2021-06-24T10:42:12","slug":"introducao-ao-sumo","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/blog\/introducao-ao-sumo\/","title":{"rendered":"Introdu\u00e7\u00e3o ao SUMO"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">SUMO (Simulation of Urban MObility) \u00e9 uma ferramenta de c\u00f3digo aberto (<em>open source<\/em>) para simula\u00e7\u00e3o microsc\u00f3pica de tr\u00e2nsito. A ferramenta est\u00e1 dispon\u00edvel em <a href=\"http:\/\/sumo-sim.org\" target=\"_blank\" rel=\"noopener\">http:\/\/sumo-sim.org<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para usu\u00e1rios do sistemas operacional Windows, o link para download se encontra na p\u00e1gina inicial no item &#8220;Download (for Windows)&#8221;. Para usu\u00e1rios Linux, pode ser acessado o item &#8220;Download&#8221; no menu superior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nesse tutorial \u00e9 explicado como criar uma simula\u00e7\u00e3o b\u00e1sica, com a cria\u00e7\u00e3o de um cruzamento semaforizado e a inclus\u00e3o de um ve\u00edculo para percorrer a via criada.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><b>Especificando uma network (rede)<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A defini\u00e7\u00e3o de uma network inicia com a especifica\u00e7\u00e3o de pontos (n\u00f3s ou v\u00e9rtices) que ser\u00e3o ligados, conectando-se. Para isso ser\u00e1 necess\u00e1rio especificar dois arquivos no formato XML esperado do SUMO, sendo esse o arquivo de n\u00f3s\/pontos (nodes) e o arquivo de liga\u00e7\u00e3o\/jun\u00e7\u00e3o (edges).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Figura abaixo ilustra a rede que ser ir\u00e1 desenvolver inicialmente. Ela \u00e9 constitu\u00edda de 3 pontos que s\u00e3o interligados formando 2 ruas. Cada ponto est\u00e1 identificado iniciando com a letra &#8220;p&#8221; e seguida de um n\u00famero.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"364\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo1.png\" alt=\"projeto_sumo1\" class=\"wp-image-517\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo1.png 661w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo1-150x82.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo1-300x165.png 300w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O arquivo de n\u00f3s para formar a rede \u00e9 mostrado a seguir e deve ser salvo com a extens\u00e3o \u201c.nod.xml\u201d. A extens\u00e3o do nome do arquivo n\u00e3o \u00e9 obrigat\u00f3ria, mas \u00e9 recomendado seguir essa conven\u00e7\u00e3o na nomenclatura.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;nodes&gt;\n  &lt;node id=\"p1\" x=\"0\"   y=\"0\" \/&gt;\n  &lt;node id=\"p2\" x=\"100\" y=\"0\" \/&gt;\n  &lt;node id=\"p3\" x=\"50\"  y=\"50\" \/&gt;\n&lt;\/nodes&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada tag nomeada \u201cnode\u201d possui a indica\u00e7\u00e3o de um ponto, sendo necess\u00e1rio especificar seu posicionamento no eixos \u201cx\u201d e \u201cy\u201d e um identificar \u00fanico (id) que permitir\u00e1 posteriormente identificar o n\u00f3 para realizar sua liga\u00e7\u00e3o com outro n\u00f3. Opcionalmente tamb\u00e9m pode ser fornecido uma coordenada \u201cz\u201d representando uma altura, mostrando que os mapas podem ser especificados em 3D, embora n\u00e3o ser\u00e1 abordado nesse material.<\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><span style=\"color: #808080;\"><strong>Dica:<\/strong> os arquivos do SUMO s\u00e3o escritos utilizando a linguagem XML. Sendo assim, recomendo que seja utilizado algum editor de textos que suporte a escrita de XMLs, como o Notepad++ (<a style=\"color: #808080;\" title=\"Link para o site do notepad++\" href=\"http:\/\/notepad-plus-plus.org\" target=\"_blank\" rel=\"noopener\">http:\/\/notepad-plus-plus.org<\/a>)<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para a liga\u00e7\u00e3o dos pontos ser\u00e1 utilizado a especifica\u00e7\u00e3o mostrada a seguir. Cada liga\u00e7\u00e3o gerar\u00e1 uma via seguindo do ponto indicado no par\u00e2metro \u201cfrom\u201d e indo at\u00e9 o ponto indicado em \u201cto\u201d. O par\u00e2metro para essas propriedades \u00e9 o identificador do n\u00f3 indicado anteriormente no arquivo de n\u00f3s (nome dos pontos indicados na propriedade &#8220;id&#8221; do arquivo anterior).<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;edges&gt;\n  &lt;edge from=\"p1\" to=\"p2\" id=\"1to2\" \/&gt;\n  &lt;edge from=\"p2\" to=\"p3\" id=\"2to3\" \/&gt;\n&lt;\/edges&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Criando efetivamente a network (rede)<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tendo especificado os dois arquivos anteriores (arquivo de n\u00f3s\/<em>nodes<\/em> e de liga\u00e7\u00f5es\/<em>edges<\/em>) \u00e9 poss\u00edvel criar a <em>network<\/em>, que a jun\u00e7\u00e3o dos n\u00f3s e liga\u00e7\u00e3o gerando as rede vi\u00e1ria. Essa tarefa \u00e9 feita a partir do execut\u00e1vel netconvert, presente na parta \u201cbin\u201d do SUMO. O que ser\u00e1 mostrado a seguir \u00e9 minha recomenda\u00e7\u00e3o de como fazer o processo de criar a rede. Considero esse o jeito mais simples e que dispensa detalhamentos t\u00e9cnicos. A forma \u201cpadr\u00e3o\u201d encontrada em outros materiais, como a pr\u00f3pria documenta\u00e7\u00e3o, \u00e9 mais trabalhosa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inicialmente, copie os arquivos&nbsp;&#8220;netconvert.exe&#8221; (dependendo da vers\u00e3o do SUMO que foi baixada, o arquivo se chamar\u00e1 netconvert64.exe) e as DLLs&nbsp;&#8220;xerces-c_3_1.dll&#8221;, &#8220;proj.dll&#8221;&nbsp;e &#8220;gdal18.dll&#8221;&nbsp;para a pasta onde est\u00e3o sendo salvos os arquivos do projeto. Crie um arquivo com extens\u00e3o &#8220;.netc.cfg&#8221; e insira o c\u00f3digo a seguir nesse arquivo. Esse arquivo \u00e9 um arquivo de configura\u00e7\u00e3o para o Netconvert e informa qual o nome do arquivo de n\u00f3s\/<em>nodes<\/em> (est\u00e1 sendo considerado que o nome do arquivo de n\u00f3s foi salvo como meu.nod.xml), qual o nome do arquivo de liga\u00e7\u00e3o\/<em>edges<\/em> (est\u00e1 sendo considerado o nome do arquivo salvo como meu.edg.xml) e tamb\u00e9m \u00e9 especificado um nome para o arquivo da rede que ser\u00e1 gerada pelo Netconvert (que no caso do arquivo de configura\u00e7\u00e3o foi especificado o nome meu.net.xml).<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;configuration&gt;\n   &lt;input&gt;\n       &lt;edge-files value=\"meu.edg.xml\"\/&gt;\n       &lt;node-files value=\"meu.nod.xml\"\/&gt;\n   &lt;\/input&gt;\n   &lt;output&gt;\n       &lt;output-file value=\"meu.net.xml\"\/&gt;\n   &lt;\/output&gt; \n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tendo o arquivo de configura\u00e7\u00e3o especificado, basta arrastar o arquivo para cima do Netconvert. Uma janela de fundo preto ser\u00e1 rapidamente aberta e um arquivo chamado &#8220;meu.net.xml&#8221; ser\u00e1 criado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para testar se a rede foi especificada conforme foi planejado, \u00e9 poss\u00edvel abrir a network no SUMO e visualiz\u00e1-la. Fa\u00e7a isso abrindo o sumo a partir do arquivo SUMO-GUI, clique em \u201cfile\u201d e depois na op\u00e7\u00e3o \u201copen network\u201d, abrindo o arquivo rec\u00e9m criado. O resultado esperado \u00e9 o apresentado na figura abaixo.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"533\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo1.png\" alt=\"sumo1\" class=\"wp-image-497\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo1.png 985w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo1-150x81.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo1-300x162.png 300w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se o arquivo network n\u00e3o for gerado \u00e9 que algum erro aconteceu nas especifica\u00e7\u00f5es. A tela de fundo preto que abriu deve ter mostrado o erro, mas ela se fecha muito r\u00e1pido. Nesse caso \u00e9 preciso utilizar o &#8220;prompt de comando&#8221; (no caso do Windows) ou o terminal (para usu\u00e1rios do Linux). Chamarei ambos de terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No terminal \u00e9 preciso entrar no diret\u00f3rio onde est\u00e3o sendo salvos os arquivos do projeto e para onde foi copiado o Netconvert e DLLs necess\u00e1rias.&nbsp;No terminal digite o comando (sem as aspas) &#8220;netconvert &#8211;node-files=meu.nod.xml &#8211;edge-files=meu.edg.xml &#8211;output-file=meu.net.xml&#8221;. Preste aten\u00e7\u00e3o que o \u00faltimo par\u00e2metro (output-file) est\u00e1 na singular, diferente dos dois anteriores que est\u00e3o no plural. Repare tamb\u00e9m que os par\u00e2metros informados s\u00e3o os nomes dos arquivos de n\u00f3s, liga\u00e7\u00f5es e o arquivo da rede que deve ser gerado.<\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><span style=\"color: #808080;\"><strong>Importante:<\/strong> de um usu\u00e1rio do Linux j\u00e1 \u00e9 esperado que ele saiba utilizar o terminal. Usu\u00e1rios do Windows podem conferir meu v\u00eddeo em&nbsp;<a title=\"Video tutorial do SUMO no Youtube\" href=\"https:\/\/www.youtube.com\/watch?v=PahY1W5_lCc\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=PahY1W5_lCc<\/a> a partir do instante 4:33min, onde demonstro melhor esse processo.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Adicionando mais detalhes a network (rede)<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A rede gerada \u00e9 ainda muito simples, composta de duas ruas de m\u00e3o \u00fanica. Para fazer uma rua de m\u00e3o dupla, \u00e9 necess\u00e1rio especificar duas liga\u00e7\u00f5es, invertendo os valores \u201cfrom\u201d e \u201cto\u201d. O resultado \u00e9 mostrado na figura a seguir. A&nbsp;rua na diagonal possui m\u00e3o dupla com a liga\u00e7\u00e3o dos pontos &#8220;p2&#8221;&nbsp;e &#8220;p3&#8221;&nbsp;e depois dos pontos &#8220;p3&#8221;&nbsp;e &#8220;p2&#8221;. A via na horizontal&nbsp;possui apenas um sentido, indo do ponto &#8220;p1&#8221;&nbsp;para o &#8220;p2&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo2_.png\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"200\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo2_.png\" alt=\"projeto_sumo2_\" class=\"wp-image-518\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo2_.png 655w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo2_-150x45.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo2_-300x91.png 300w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;edges&gt;\n  &lt;edge from=\"p1\" id=\"1to2\" to=\"p2\" \/&gt;\n  &lt;edge from=\"p2\" id=\"2to3\" to=\"p3\" \/&gt;\n  &lt;edge from=\"p3\" id=\"3to2\" to=\"p2\" \/&gt;\n&lt;\/edges&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Um detalhe importante \u00e9 que qualquer modifica\u00e7\u00e3o feita no arquivo de n\u00f3s e <em>edges<\/em> precisa com que seja executado o Netconvert novamente, afinal \u00e9 o arquivo de rede (network) que \u00e9 aberto no SUMO. Sendo assim, siga os passos j\u00e1 vistos do uso do Netconvert e s\u00f3 depois abra a rede no SUMO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Criando um cruzamento<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inicialmente a tentativa de criar um cruzamento seria criar um novo ponto (p4, na coordenada 50,-40) e um novo <em>edge<\/em> ligando o ponto &#8220;p3&#8221; com o novo ponto. As especifica\u00e7\u00f5es abaixo para os n\u00f3s e <em>edges<\/em> correspondem a figura a seguir. O cruzamento que se pretendia criar est\u00e1 demarcado pelo c\u00edrculo pontilhado.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"635\" height=\"540\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo4.png\" alt=\"projeto_sumo4\" class=\"wp-image-503\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo4.png 635w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo4-150x127.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo4-300x255.png 300w\" sizes=\"auto, (max-width: 635px) 100vw, 635px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3digo dos n\u00f3s (adi\u00e7\u00e3o da linha 5 com rela\u00e7\u00e3o a especifica\u00e7\u00e3o anterior):<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;nodes&gt;\n  &lt;node id=\"p1\" x=\"0\"   y=\"0\" \/&gt;\n  &lt;node id=\"p2\" x=\"100\" y=\"0\" \/&gt;\n  &lt;node id=\"p3\" x=\"50\"  y=\"50\" \/&gt;\n  <strong>&lt;node id=\"p4\" x=\"50\"  y=\"-40\" \/&gt;<\/strong>\n&lt;\/nodes&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3digo dos <em>edges&nbsp;(adi\u00e7\u00e3o da linha 5 com rela\u00e7\u00e3o a especifica\u00e7\u00e3o anterior)<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;edges&gt;\n  &lt;edge from=\"p1\" id=\"1to2\" to=\"p2\" \/&gt;\n  &lt;edge from=\"p2\" id=\"2to3\" to=\"p3\" \/&gt;\n  &lt;edge from=\"p3\" id=\"3to2\" to=\"p2\" \/&gt;\n  &lt;edge from=\"p3\" id=\"3to4\" to=\"p4\" \/&gt;\n&lt;\/edges&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A forma especificada n\u00e3o cria efetivamente o cruzamento, sendo essa uma maneira incorreta. A seguir mostro como criar corretamente o cruzamento, mas se voc\u00ea gerar a rede, ao abrir no SUMO voc\u00ea ver\u00e1 o resultado mostrado abaixo. Voc\u00ea pode estranhar ver as partes marcadas com o c\u00edrculo pontilhado, mas isso n\u00e3o \u00e9 problema e a rede est\u00e1 correta. A apar\u00eancia estranha \u00e9 apenas um defeito visual e n\u00e3o pode ser corrigido.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"496\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo4.png\" alt=\"sumo4\" class=\"wp-image-504\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo4.png 557w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo4-150x133.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo4-300x267.png 300w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Para criar corretamente o cruzamento \u00e9 preciso que o cruzamento possua mais um n\u00f3, como \u00e9 mostrado na figura abaixo e especificado a seguir.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"558\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo5.png\" alt=\"projeto_sumo5\" class=\"wp-image-519\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo5.png 656w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo5-150x127.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/projeto_sumo5-300x255.png 300w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3digo dos n\u00f3s:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;nodes&gt;\n  &lt;node id=\"p1\" x=\"0\"   y=\"0\" \/&gt;\n  &lt;node id=\"p2\" x=\"100\" y=\"0\" \/&gt;\n  &lt;node id=\"p3\" x=\"50\"  y=\"50\" \/&gt;\n  &lt;node id=\"p4\" x=\"50\"  y=\"0\" \/&gt;\n  &lt;node id=\"p5\" x=\"50\"  y=\"-40\" \/&gt;\n&lt;\/nodes&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3digo dos <em>edges<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;edges&gt;\n  &lt;edge from=\"p1\" id=\"1to4\" to=\"p4\" \/&gt;\n  &lt;edge from=\"p4\" id=\"4to2\" to=\"p2\" \/&gt;\n  &lt;edge from=\"p2\" id=\"2to3\" to=\"p3\" \/&gt;\n  &lt;edge from=\"p3\" id=\"3to4\" to=\"p4\" \/&gt;\n  &lt;edge from=\"p4\" id=\"4to5\" to=\"p5\" \/&gt;\n&lt;\/edges&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Observe que o arquivo de n\u00f3s apenas precisou adicionar mais um n\u00f3, mas que o arquivo de <em>edges<\/em> precisou de mais especifica\u00e7\u00f5es, sendo necess\u00e1rio ligar o primeiro ponto ao cruzamento e o cruzamento ao final daquela via. Sendo assim a especifica\u00e7\u00e3o do que seria uma rua precisa ser especificado por suas partes (no caso, duas partes: antes do cruzamento e depois do cruzamento).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao gerar a nova rede o resultado \u00e9 o mostrado a seguir. O resultado pode parecer um pouco estranho, mas \u00e9 que o cruzamento \u00e9 de duas vias de m\u00e3o \u00fanica. No t\u00f3pico a seguir, sobre sem\u00e1foro, ser\u00e1 mostrado a adi\u00e7\u00e3o de duas m\u00e3os e o cruzamento parecer\u00e1 mais &#8220;normal&#8221;. Observe pela setas que o SUMO j\u00e1 determina as dire\u00e7\u00f5es poss\u00edveis de se seguir atrav\u00e9s das setas.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"511\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo5.png\" alt=\"sumo5\" class=\"wp-image-506\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo5.png 574w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo5-150x133.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo5-300x267.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Lembre-se de a cada vez que alterar os n\u00f3s ou <em>edges<\/em>, \u00e9 preciso gerar novamente a rede.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Implantando um sem\u00e1foro<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sem\u00e1foros podem ser colocados em qualquer n\u00f3 e o SUMO ir\u00e1 gerar automaticamente sua programa\u00e7\u00e3o semaf\u00f3rica e os ve\u00edculos sempre a ir\u00e3o respeitar. Os n\u00f3s que precisam ter um sem\u00e1foro deve ser alterados adicionando o par\u00e2metro <em>type=&#8221;traffic_light&#8221;<\/em>, conforme exemplifica\u00e7\u00e3o&nbsp;no c\u00f3digo&nbsp;a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;nodes&gt;\n  &lt;node id=\"p1\" x=\"0\"   y=\"0\" \/&gt;\n  &lt;node id=\"p2\" x=\"100\" y=\"0\" \/&gt;\n  &lt;node id=\"p3\" x=\"50\"  y=\"50\" \/&gt;\n  &lt;node id=\"p4\" x=\"50\"  y=\"0\" type=\"traffic_light\" \/&gt;\n  &lt;node id=\"p5\" x=\"50\"  y=\"-40\" \/&gt;\n&lt;\/nodes&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo a especifica\u00e7\u00e3o, o ponto &#8220;p4&#8221; passou a conter um sem\u00e1foro. A parte a esquerda da figura abaixo ilustra o resultado obtido no cruzamento. Em posterior funcionamento da simula\u00e7\u00e3o, ser\u00e1 poss\u00edvel observar os sinais se alterarem e os ve\u00edculos obedecerem o sem\u00e1foro. A parte a direita da figura mostra o cruzamento obtido com a adi\u00e7\u00e3o de mais uma m\u00e3o na via horizontal especificada.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"234\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo6.png\" alt=\"sumo6\" class=\"wp-image-508\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo6.png 574w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo6-150x61.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/sumo6-300x122.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Com rela\u00e7\u00e3o a adi\u00e7\u00e3o da nova m\u00e3o na via que possui um cruzamento, esse deve ser cuidado pois, assim como foi ligado o ponto &#8220;p1&#8221; com o ponto &#8220;p4&#8221; do cruzamento, ser\u00e1 necess\u00e1rio fazer as liga\u00e7\u00e3o contr\u00e1rias, no caso, ligando o &#8220;p4&#8221; com o &#8220;p1&#8221; e a liga\u00e7\u00e3o entre &#8220;p4&#8221; e &#8220;p2&#8221; precisa ser complementada com uma liga\u00e7\u00e3o entre &#8220;p2&#8221; e &#8220;p4&#8221;, conforme c\u00f3digo de <em>edges<\/em> a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;edges&gt;\n  &lt;edge from=\"p1\" id=\"1to4\" to=\"p4\" \/&gt;\n  &lt;edge from=\"p4\" id=\"4to1\" to=\"p1\" \/&gt;\n  &lt;edge from=\"p4\" id=\"4to2\" to=\"p2\" \/&gt;\n  &lt;edge from=\"p2\" id=\"2to4\" to=\"p4\" \/&gt;\n  &lt;edge from=\"p2\" id=\"2to3\" to=\"p3\" \/&gt;\n  &lt;edge from=\"p3\" id=\"3to4\" to=\"p4\" \/&gt;\n  &lt;edge from=\"p4\" id=\"4to5\" to=\"p5\" \/&gt;\n&lt;\/edges&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Adicionando ve\u00edculos<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At\u00e9 o momento o que se obteve nas especifica\u00e7\u00f5es \u00e9 a elabora\u00e7\u00e3o da malha vi\u00e1ria, sem qualquer ve\u00edculo fazendo uso dessa. Os passos seguintes consistem em adicionar ve\u00edculos fazendo certo percurso nas vias especificadas. Sendo assim, a adi\u00e7\u00e3o de ve\u00edculos depende da elabora\u00e7\u00e3o de rotas e de que ve\u00edculos atuar\u00e3o na rota definida. A especifica\u00e7\u00e3o a seguir deve ser salva com a extens\u00e3o \u201c.rou.xml\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O primeiro passo para criar a rota \u00e9 especificar um tipo de ve\u00edculo. A segunda linha da especifica\u00e7\u00e3o abaixo realiza isso utilizando&nbsp;a <em>tag<\/em>&nbsp;&#8220;vType&#8221;. Nela s\u00e3o especificadas as acelera\u00e7\u00e3o (accel), desacelera\u00e7\u00e3o (decel) e velocidade m\u00e1xima que o ve\u00edculo ir\u00e1 alcan\u00e7ar, utilizando a unidade de metros por segundo (m\/s). O par\u00e2metro &#8220;id&#8221;, assim como visto na especifica\u00e7\u00e3o de n\u00f3s e <em>edges<\/em>, servir\u00e1 para identificar esse tipo de ve\u00edculo. Tamb\u00e9m est\u00e1 sendo definido um tamanho (length) que o ve\u00edculo dever\u00e1 ter largura, definido em metros. Todos os tipos de ve\u00edculos que ir\u00e3o transitar nas vias deveria estar especificado atrav\u00e9s dessa <em>tag<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Definido um tipo de ve\u00edculo, o pr\u00f3ximo passo \u00e9 especificar as rotas (caminhos) que os ve\u00edculos ir\u00e3o fazer. Na especifica\u00e7\u00e3o a seguir apenas uma rota foi definida, mas na pr\u00e1tica dever\u00e3o ser especificadas diversas rotas especificando os caminhos que os ve\u00edculos ir\u00e3o fazer na simula\u00e7\u00e3o. A rota \u00e9 definida pela <em>tag<\/em>&nbsp;&#8220;route&#8221; e \u00e9 composta por um identificador (id) \u00fanico e o par\u00e2metro <em>edges<\/em>, que \u00e9 o nome especificados para os <em>edges<\/em> e separados por espa\u00e7o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para finalizar \u00e9 especificado realmente o ve\u00edculo, que dever\u00e1 ser de um tipo e trafegar em uma rota. A linha 4 da especifica\u00e7\u00e3o das rotas \u00e9 respons\u00e1vel por essa especifica\u00e7\u00e3o. O primeiro par\u00e2metro (type) define de qual tipo \u00e9 o ve\u00edculo (que no caso da especifica\u00e7\u00e3o \u00e9 identificado por &#8220;Car&#8221;) e a rota (route) do ve\u00edculo (definida como &#8220;rotaO&#8221;). Tamb\u00e9m \u00e9 especificado um identificador para o ve\u00edculo especificado atrav\u00e9s da <em>tag<\/em> &#8220;id&#8221; e finalizando com a especifica\u00e7\u00e3o apresentada na <em>tag<\/em> &#8220;depart&#8221;, onde \u00e9 especificado em que&nbsp;tempo da simula\u00e7\u00e3o o ve\u00edculo ser\u00e1 gerado, que no caso significa logo ao in\u00edcio da simula\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;routes&gt;\n  &lt;vType accel=\"2\" decel=\"4\" maxSpeed=\"20\" id=\"Car\" length=\"5\" \/&gt;\n  &lt;route id=\"rota0\" edges=\"1to2 2to3\" \/&gt;\n  &lt;vehicle type=\"Car\" route=\"rota0\" id=\"carro1\" depart=\"1\" \/&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ao simular, observe que na rota especificada, o ve\u00edculo n\u00e3o percorre toda a via, desaparecendo no n\u00f3 final que comp\u00f5e a via. Para fazer um trajeto que percorra toda a via seria preciso especificar outra rota e fazer o ve\u00edculo trafegar por ela. Mais adiante \u00e9 mostrado como realizar tal a\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Criando um arquivo de configura\u00e7\u00e3o<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Temos agora o \u00faltimo arquivo que precisa ser especificado para conseguir executar a simula\u00e7\u00e3o. Ele \u00e9 um arquivo que configura que arquivos ser\u00e3o utilizados para a simula\u00e7\u00e3o, sendo o arquivo de configura\u00e7\u00e3o o respons\u00e1vel por associar os arquivo da network e da rota especificados. A especifica\u00e7\u00e3o abaixo gera a configura\u00e7\u00e3o e deve ser salva com a extens\u00e3o .sumocfg.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;configuration&gt;\n  &lt;input&gt;\n    &lt;net-file value=\"meu.net.xml\"\/&gt;\n    &lt;route-files value=\"meu.rou.xml\"\/&gt;\n  &lt;\/input&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Basicamente precisamos fornecer no par\u00e2metro \u201cvalue\u201d, o nome dos arquivos de especifica\u00e7\u00e3o gerados da network e da rota. Eles s\u00e3o obrigat\u00f3rios. Uma forma simplificada de escrever o arquivo de configura\u00e7\u00e3o \u00e9 mostrada a seguir, mas faz exatamente a &nbsp;mesma coisa.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;configuration&gt;\n  &lt;n v=\"meu.net.xml\"\/&gt;\n  &lt;r v=\"meu.rou.xml\"\/&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vale lembrar que os arquivos de n\u00f3s e <em>edges<\/em> n\u00e3o s\u00e3o necess\u00e1rios na especifica\u00e7\u00e3o pois eles foram utilizados na gera\u00e7\u00e3o do arquivo de rede (meu.net.xml).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora sim \u00e9 poss\u00edvel executar a simula\u00e7\u00e3o e acompanhar todo o esfor\u00e7o na especifica\u00e7\u00e3o dos arquivos realizados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Executando uma simula\u00e7\u00e3o<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tendo finalizado o arquivo de configura\u00e7\u00e3o \u00e9 poss\u00edvel abrir a interface do SUMO executando o arquivo sumo-gui.exe (<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-520\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_gui.png\" alt=\"icon_gui\" width=\"16\" height=\"16\">), que fica dentro da pasta &#8220;bin&#8221; de onde o SUMO foi descompactado,&nbsp;e indo na op\u00e7\u00e3o \u201cfile\u201d, e em seguida \u201copen\u201d, localizando o arquivo de configura\u00e7\u00e3o rec\u00e9m gerado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A interface do SUMO \u00e9 bastante simples, sendo composta basicamente dos controles da simula\u00e7\u00e3o. De importante destacam-se os \u00edcones que ser\u00e3o relacionados a seguir e o display do &#8220;Time&#8221; que mostra o avan\u00e7o dos instantes da simula\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para executar a simula\u00e7\u00e3o \u00e9 utilizando o bot\u00e3o play (<a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_play.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-523\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_play.png\" alt=\"icon_play\" width=\"17\" height=\"19\"><\/a>) e \u00e9 interessante tamb\u00e9m alterar o tempo de <em>delay<\/em> (<a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_delay.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-522\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_delay.png\" alt=\"icon_delay\" width=\"119\" height=\"26\"><\/a>). A simula\u00e7\u00e3o acontece em ciclos n\u00e3o baseados em tempo, sendo a configura\u00e7\u00e3o de <em>delay<\/em> uma forma conseguir acompanhar a simula\u00e7\u00e3o. Se o <em>delay<\/em> for configurado para 1000, entre cada ciclo ser\u00e1 dado 1 segundo, gerando uma simula\u00e7\u00e3o pr\u00f3xima do tempo real.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/gui-sumo.png\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"436\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/gui-sumo.png\" alt=\"gui-sumo\" class=\"wp-image-521\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/gui-sumo.png 612w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/gui-sumo-150x106.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/gui-sumo-300x213.png 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Para uma primeira visualiza\u00e7\u00e3o, configure o <em>delay<\/em> para 1000 e clique em <em>play<\/em>, acompanhando o carro gerado e seu trajeto. Quando o \u00faltimo carro presente na pista finalizar sua rota e nenhum outro carro estiver especificado para iniciar, a simula\u00e7\u00e3o ser\u00e1 dada por encerrada. Para reexecut\u00e1-la clique no bot\u00e3o de <em>reload<\/em> (<a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_reload.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-524\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/icon_reload.png\" alt=\"icon_reload\" width=\"20\" height=\"20\"><\/a>) e de novamente <em>play<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso encerra o b\u00e1sico da utiliza\u00e7\u00e3o do SUMO. Para simula\u00e7\u00e3o \u00e9 poss\u00edvel aumentar a complexidade da rede vi\u00e1ria, inclus\u00e3o de diferentes tipos de ve\u00edculo e rotas, configura\u00e7\u00e3o dos tempos semaf\u00f3ricos, entre outras op\u00e7\u00f5es avan\u00e7adas que ser\u00e3o exploradas posteriormente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Artigos complementares<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veja mais informa\u00e7\u00f5es sobre cria\u00e7\u00e3o de simula\u00e7\u00e3o &nbsp;utilizando o SUMO acessando os materiais adicionais dispon\u00edveis no blog, que seguem:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a title=\"Gerar diversas rotas, tipos de ve\u00edculo e ve\u00edculos no SUMO\" href=\"http:\/\/www.galirows.com.br\/meublog\/blog\/diversos-veiculos-sumo\/\">Gerar diversas rotas, tipos de ve\u00edculo e ve\u00edculos no SUMO<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>SUMO (Simulation of Urban MObility) \u00e9 uma ferramenta de c\u00f3digo aberto (open source) para simula\u00e7\u00e3o microsc\u00f3pica de tr\u00e2nsito. A ferramenta est\u00e1 dispon\u00edvel em http:\/\/sumo-sim.org. Para usu\u00e1rios do sistemas operacional Windows, o link para download se encontra na p\u00e1gina inicial no item &#8220;Download (for Windows)&#8221;. Para usu\u00e1rios Linux, pode ser acessado o item &#8220;Download&#8221; no menu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":632,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[13],"tags":[18],"class_list":["post-495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-simulacao","tag-sumo"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/comments?post=495"}],"version-history":[{"count":9,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/495\/revisions"}],"predecessor-version":[{"id":1075,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/495\/revisions\/1075"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media\/632"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media?parent=495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/categories?post=495"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/tags?post=495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}