← Últimos artigos
💻 computer science

Deterministic Execution of ROS~2 Applications via Lingua Franca

Este artigo apresenta um framework que converte aplicações ROS 2 não modificadas em programas Lingua Franca para impor execução determinística e previsibilidade de tempo, eliminando, assim, o não determinismo inerente à ordenação de callbacks e ao entrelaçamento de mensagens do ROS 2.

Autores originais: Harun Teper, Shaokai Lin, Shulu Li, Edward A. Lee, Jian-Jia Chen

Publicado 2026-06-09
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Harun Teper, Shaokai Lin, Shulu Li, Edward A. Lee, Jian-Jia Chen

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). ✨ Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você está administrando uma cozinha de restaurante movimentada. Em uma cozinha padrão (que é como o ROS 2, o software usado para construir robôs), o chef principal grita os pedidos e os cozinheiros (as diferentes partes do robô) os pegam sempre que os ouvem.

O problema? Se dois pedidos chegarem exatamente ao mesmo tempo, o cozinheiro pode pegar o pedido da "salada" antes do pedido do "bife", ou vice-versa, dependendo de quem estava mais perto da janela de pedidos ou de quem foi mais rápido naquele dia. Às vezes o bife chega antes da salada, às vezes depois. Isso é nondetermínistico. Para um robô dirigindo um carro, isso é perigoso: se o robô receber um sinal de "parar" e um sinal de "ir" ao mesmo tempo, ele precisa saber exatamente qual processar primeiro, todas as vezes. Se ele adivinhar errado, o carro pode bater.

Os autores deste artigo construíram um controlador de tráfego (chamado Lingua Franca, ou LF) que pode se instalar sobre sua cozinha de robôs existente e forçá-la a seguir um cronograma rigoroso e imutável sem que você precise reescrever as receitas (o código).

Aqui está como eles fizeram isso, detalhado de forma simples:

1. O Problema: A "Cozinha Caótica"

No sistema ROS 2 padrão, a ordem em que as tarefas acontecem depende de coisas físicas como:

  • Como o computador está rápido naquele segundo exato.
  • Quanto tempo leva para uma mensagem viajar pela rede (como um garçom correndo para a cozinha).
  • Qual thread do computador pega a mensagem primeiro.

Por causa disso, se você executar o mesmo programa de robô duas vezes com as mesmas entradas, ele pode realizar as tarefas em uma ordem diferente na segunda vez. Isso torna impossível provar que o robô é seguro, porque você não consegue prever exatamente o que ele fará a seguir.

2. A Solução: O "Relógio Lógico"

Os autores introduziram um conceito chamado Tempo Lógico. Imagine que a cozinha tem um relógio mágico que não tica com base nos segundos na parede, mas sim com base em "passos" na receita.

  • Passo 1: O temporizador toca.
  • Passo 2: A salada é preparada.
  • Passo 3: O bife é cozido.

Neste sistema, o "tempo" que leva para cozinhar o bife não importa. Se a receita diz "Preparar salada, então cozinhar bife", o sistema espera até que a salada esteja pronta antes mesmo de pensar no bife. Isso garante que o Passo 2 sempre aconteça antes do Passo 3, não importa a velocidade do hardware. Isso garante que a ordem seja preservada, independentemente da velocidade do mundo real.

3. O Truque de Mestre: "Sem Necessidade de Reescrever"

Normalmente, para obter esse tipo de ordem perfeita, você teria que jogar fora suas receitas antigas e escrever novas do zero em uma linguagem diferente. Isso é difícil e caro.

Os autores criaram uma ferramenta de tradução.

  • Você fornece seu código de robô ROS 2 existente (as "receitas antigas").
  • A ferramenta analisa o código, entende como as partes se conectam (quem fala com quem) e constró constantemente um "wrapper" (envelope) ao redor dele.
  • Este wrapper força o robô a rodar sob as regras estritas do "Tempo Lógico".
  • Crucialmente: O código original dentro do robô nunca é tocado. Ele roda exatamente como foi escrito, mas a ordem em que ele roda agora é perfeitamente controlada pelo novo wrapper.

4. O Que Eles Descobriram (Os Resultados)

Eles testaram isso em duas coisas:

  1. Um robô fictício simples com algumas partes.
  2. Um sistema de direção autônoma real (chamado Autoware) que possui 24 partes diferentes trabalhando juntas.

Os Resultados:

  • ROS 2 Padrão: A ordem das tarefas mudava toda vez que eles executavam o teste. Às vezes o robô processava dados em uma ordem, às vezes em outra. O tempo para concluir uma tarefa variava drasticamente (às vezes 5 milissegundos, às vezes 900 milissegundos).
  • O Novo Sistema Deles (controlado por LF): A ordem das tarefas era idêntica todas as vezes. O tempo para concluir uma tarefa também era idêntico todas as vezes.

Eles também mostraram que você pode usar este sistema para "ajustar" o robô. Você pode dizer ao sistema: "Eu quero que o robô seja super consistente (sempre faça A antes de B), mesmo que isso signifique esperar um pouco mais", ou "Eu quero que seja super rápido, mesmo que a ordem varie ligeiramente". Você pode ajustar esse "botão de ajuste" sem mudar o código do robô.

Resumo

Pense neste artigo como a invenção de um maestro para uma orquestra caótica. Os músicos (o código do robô) ainda estão tocando seus próprios instrumentos exatamente como sempre fizeram, mas agora o maestro (o novo framework) diz a eles exatamente quando tocar suas notas. Isso garante que cada performance soe exatamente igual, tornando o robô seguro, previsível e confiável, sem precisar ensinar os músicos a ler uma nova partitura.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →