Cooperative TSN tutorial
Versões de softwares
- SO Host Principal: Ubuntu 22.04.4 LTS
- SO Host TSNSched: Ubuntu 24.04
- OMNeT++: 6.0.3
- Veins: 5.2
- SUMO: 1.11.0
- Docker: 28.1.1+1
1. Instalação do cooperativeTSN
-
Download da imagem de Docker com o comando
docker pull dr.nsm.inf.tu-dresden.de/jannusch/wons25:latest - Verificar se a imagem foi baixada, via comando
docker images. O resultado deve ser algo como:REPOSITORY TAG IMAGE ID CREATED SIZE dr.nsm.inf.tu-dresden.de/jannusch/wons25 latest c74d154dec49 7 months ago 12.1GB - Cria container com a imagem baixada. Nomeie esse container como cooperativeTSN.
sudo docker run -it --name cooperativeTSN ID_IMAGEM bashOBS: Nesse exemplo, ID_IMAGEM seria: c74d154dec49.
- Verificar se container foi criado com o comando
sudo docker ps -a. O resultado deve ser algo como:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a5832644e8ce c74d154dec49 "bash" About a minute ago Exited (0) 2 seconds ago cooperativeTSN -
Acessar o container com o comando
sudo docker attach cooperativeTSN.5.1. Atualizar pacotes do sistema
sudo apt update && sudo apt upgrade -y5.2. Destravar PIP e instalar pacote para comunicação inter-processos.
python3 -m pip config set global.break-system-packages truepython3 -m pip install --user --upgrade posix_ipc5.3. Aplicar variáveis de ambiente
bash docker-env.sh -
Compilação do OMNeT++
6.1. Preparação
- Acessar pasta
omnetpp/. - Instalar todos os pacotes necessários indicados na documentação.
sudo apt install -y build-essential clang lld gdb bison flex perl \ python3 python3-pip qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools \ libqt5opengl5-dev libxml2-dev zlib1g-dev doxygen graphviz libwebkit2gtk-4.0-37 xdg-utils - Alteração no arquivo
configure.user: as flagsPREFER_CLANG=eWITH_QTENV=devem ser alteradas de yes para no.
6.2. Compilação (aproveite para tomar um café ☕, pois isso levará algum tempo…)
source setenv./configuremake -j $(nproc)Se tudo der certo, a última mensagem da compilação será: Now you can type ‘omnetpp’ to start the IDE.
- Acessar pasta
-
Compilação do SUMO
7.1. Acessar diretório
sumo/7.2. Exportar variável de ambiente
SUMO_HOMEexport SUMO_HOME="$PWD"7.3. Compilação
mkdir build/cmake-build && cd build/cmake-buildcmake ../..make -j$(nproc)make install -
Compilação do cooperativeTSN
8.1. Acessar diretório
cooperativeTSN8.2. Configurar todos os projetos
source setenv./configure8.3. Construa o projeto (pode tomar outro café ☕, pois isso também levará algum tempo…)
bear --append -- make -j $(nproc) -
Criar arquivo
cooperative_tsn_runno diretóriocooperativetsn/cooperative_tsn/bin9.1. Acessar diretório
cooperative_tsn/bin/9.2. Copiar modelo de arquivo
cp /opt/cooperativetsn/cooperative_tsn/src/scripts/cooperative_tsn.in.py cooperative_tsn_run9.3. Adicionar informações abaixo no arquivo criado, especificamente entre as linhas
v-- contents of out/config.py go heree^-- contents of out/config.py go here.run_libs = ['../plexe/src/plexe', '../veins/subprojects/veins_inet/src/veins_inet', '../inet/src/INET', '../veins/src/veins', 'src/cooperative_tsn'] run_neds = ['../plexe/src/plexe', '../veins/subprojects/veins_inet/src/veins_inet', '../inet/src', '../veins/src/veins', 'src/cooperative_tsn'] run_excs = ['../inet/.nedexclusions'] run_imgs = ['../plexe/images', '../veins/subprojects/veins_inet/images', '../inet/images', '../veins/images', 'images']9.4. Torne o arquivo executável
chmod +x cooperative_tsn_run9.5. Editar arquivo
freeway.rou.xml, emexamples/platoon_with_plexe/sumocfg/, removendo a flaglaneChangeModel="LC2013_CC".9.6. Testar instalação com o comando
./run -c Sinusoidalno diretório/opt/cooperativetsn/cooperative_tsn/examples/platoon_with_plexe/. A saída deve contar algo como:OMNeT++ Discrete Event Simulation (C) 1992-2022 Andras Varga, OpenSim Ltd. Version: 6.0.3, build: 240223-17fcae5ef3, edition: Academic Public License -- NOT FOR COMMERCIAL USE See the license for distribution terms and warranty disclaimer Setting up Cmdenv... Loading NED files from ../../../plexe/src/plexe: 36 Loading NED files from ../../../veins/subprojects/veins_inet/src/veins_inet: 10 Loading NED files from ../../../inet/src: 1139 Loading NED files from ../../../veins/src/veins: 44 Loading NED files from ../../src/cooperative_tsn: 10 Loading NED files from .: 2 Preparing for running configuration Sinusoidal, run #0... Scenario: $nCars=5, $platoonSize=5, $nLanes=1, ... Assigned runID=Sinusoidal-0-20250917-20:20:15-346339 Setting up network "Platooning"... Initializing... Running simulation... ** Event #0 t=0 Elapsed: 1.1e-05s (0m 00s) 0% completed (0% total) Speed: ev/sec=0 simsec/sec=0 ev/simsec=0 Messages: created: 4 present: 4 in FES: 4 Loading configuration ... done. ** Event #256 t=1.0103050956 Elapsed: 1.31874s (0m 01s) 6% completed (1% total) Speed: ev/sec=194.884 simsec/sec=0.766117 ev/simsec=254.379 Messages: created: 702 present: 615 in FES: 38 ... - Instalar ferramenta para testar conectividade via ping
apt install iputils-ping net-tools -y -
Instalar pacotes para comunicação gRPC, no diretório
cooperativetsn/cooperative_tsn/src/gRPC/11.1. Criar virtualenv :
set -epython3 -m venv .venv11.2. Acessar virtualenv :
source ./.venv/bin/activate11.3. Instalar
requirementsno virtualenv :pip install -r requirements.txt11.4 Sair do virtualenv :
deactivate -
CTRL + D para fechar o container.
- Feito!
2. Instalação do TSNSched
- Criar arquivo
Dockerfilecom base neste link.- Observação: mudar
FROM ubuntu:24.10paraFROM ubuntu:24.04.
- Observação: mudar
- Criar imagem chamada
tsnschedcom base noDockerfile(um terceiro café ☕ aqui? cuidado com excesso de cafeína 😅):sudo docker build -t tsnsched . - Verificar se a imagem foi criada, via comando
docker images. O resultado deve ser algo como:REPOSITORY TAG IMAGE ID CREATED SIZE tsnsched latest ae2fb4115639 11 minutes ago 2.04GB dr.nsm.inf.tu-dresden.de/jannusch/wons25 latest c74d154dec49 7 months ago 12.1GB - Cria container para servidor TSN com a imagem recém criada. Nomeie esse container como
TSNSched:sudo docker run -it --name TSNSched ID_IMAGEM bashOBS: Nesse exemplo, ID_IMAGEM seria: ae2fb4115639.
- Instalar pacotes necessários
apt install nano iputils-ping net-tools -y -
Clonar repositório
git clone https://github.com/Jannusch/TSNsched.git.6.1. Acessar diretório
TSNsched/.6.2. Executar comandos de instalação
./gradlew tasks./gradlew installDist./gradlew shadowJar - Criar script
run_server.shpara facilitar a execução#!/bin/bash java -jar /opt/TSNsched/build/libs/TSNSCHED_New-1.0-SNAPSHOT-all.jar - Permissão de execução ao script
chmod +x run_server.sh -
CTRL + D para fechar o container.
- Feito!
3. Execução
- Listar containers com o comando
sudo docker ps -a. O resultado será algo como:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 761e837ae78f c74d154dec49 "bash" 17 minutes ago Up 17 minutes cooperativeTSN 9e0826eb4ad7 ae2fb4115639 "bash" 2 hours ago Up 2 hours TSNSched -
Iniciar primeiro o container
cooperativeTSN, para receber automaticamente o endereço IP 172.17.0.2.- Comando para iniciar o container
sudo docker start cooperativeTSN - Comando para acessar o container
sudo docker attach cooperativeTSN - Atualizar variável de ambiente do OMNeT++
cd omnetpp/source setenv - Atualizar variável de ambiente do SUMO
cd sumo/export SUMO_HOME="$PWD"
- Comando para iniciar o container
-
Iniciar em outro terminal o container
TSNSched, que vai receber automaticamente o endereço IP 172.17.0.3.- Comando para iniciar o container
sudo docker start TSNSched - Comando para acessar o container
sudo docker attach TSNSched
- Comando para iniciar o container
- No container
TSNSched, executar o scriptrun_server.sh. Aparecerá algo como:Sep 17, 2025 9:22:32 PM com.tsnsched.grpc.TSNschedServer start INFO: Server started, listenig on 50051 - No container
cooperativeTSN, executar o exemplo em.../examples/platoon_with_plexe/:./run -c Platooning-TSN - O resultado da execução será algo como:
OMNeT++ Discrete Event Simulation (C) 1992-2022 Andras Varga, OpenSim Ltd. Version: 6.0.3, build: 240223-17fcae5ef3, edition: Academic Public License -- NOT FOR COMMERCIAL USE See the license for distribution terms and warranty disclaimer Setting up Cmdenv... Loading NED files from ../../../plexe/src/plexe: 36 Loading NED files from ../../../veins/subprojects/veins_inet/src/veins_inet: 10 Loading NED files from ../../../inet/src: 1139 Loading NED files from ../../../veins/src/veins: 44 Loading NED files from ../../src/cooperative_tsn: 10 Loading NED files from .: 2 Preparing for running configuration Platooning-TSN, run #0... Scenario: $nCars=5, $platoonSize=5, $nLanes=1, $ploegH=0.5, .... Assigned runID=Platooning-TSN-0-20250917-23:45:05-548 Setting up network "Platooning"... Initializing... Running simulation... ** Event #0 t=0 Elapsed: 1e-05s (0m 00s) 0% completed (0% total) Speed: ev/sec=0 simsec/sec=0 ev/simsec=0 Messages: created: 4 present: 4 in FES: 4 Loading configuration ... done. ** Event #256 t=1.0103050956 Elapsed: 1.99488s (0m 01s) 6% completed (1% total) Speed: ev/sec=128.83 simsec/sec=0.50645 ev/simsec=254.379 Messages: created: 731 present: 644 in FES: 42 Interrupt signal received, trying to exit gracefully.5 ACT 5 BUF 0) ** Event #21348 t=4.31 Elapsed: 2.49714s (0m 02s) 28% completed (4% total) Speed: ev/sec=41992.5 simsec/sec=6.56975 ev/simsec=6391.8 Messages: created: 20149 present: 1834 in FES: 44 ... - Feito!
Enjoy Reading This Article?
Here are some more articles you might like to read next: