(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Rodando o ROS em múltiplas máquinas.

Description: Este tutorial explica como iniciar um sistema ROS usando duas máquinas. Ele explica como usar o ROS_MASTER_URI para confgirar múltiplas máquinas para usar um master único.

Tutorial Level: INTERMEDIATE

Next Tutorial: Defining Custom Messages

Visão geral

O ROS foi desenvolvido com o conceito de processamento distribuido em mente. Um nó bem escrito não faz nehuma premissa em relação a rede que ele roda, permitindo que o processamento possa ser realocado no momento de execução (run-time) para os recursos disponíveis (existem exceções, por exemplo, um nó de driver que comunica com uma parte do hardware precisa rodar na máquina em que está fisicamente conectado). Instalar um sistema ROS em múltiplas máquinas é facil. Mantenha os conceitos abaixo em mente:

  • Você precisa somente de um master. Selecione um máquina e rode o master nela.
  • Todos os nós devem ser configurados para usar o mesmo master, através do ROS_MASTER_URI.

  • É necessário que exista um conectividade bi-lateral entre as máquinas através de todas as portas (veja ROS/NetworkSetup).

  • Cada máqina deve se anunciar pelo nome que todas as outras máquinas possam indentificar (veja ROS/NetworkSetup)

Comunicação Talker / listener entre duas máquinas

Digamos que nós queremos rodar um sistema talker / listener entre duas máquinas, chamadas marvin and hal. Essas são os nomes das máquinas, o que significa que esses são os nomes que você dever endereçar elas. Por exemplo, para logar em marvin, voê tem que digitar:

ssh marvin

O mesmo para hal.

Rodando o master

Precisamos selecionar uma máquina para rodar o master. Vamos selecionar a hal. Então o primeiro passo é rodar o master:

ssh hal
roscore

Rodando o listener

Agora vamos rodar o listener na máquina hal, configurando ROS_MASTER_URI para o master que acabamos de rodar:

ssh hal
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials listener.py

Rodando o talker

Agora vamos rodar o talker na máquina marvin, configurando também ROS_MASTER_URI para apontar para o master rodando na máquina hal:

ssh marvin
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials talker.py

Você deve ver agora o listener na máquina hal recebendo mensagens do talker da máquina marvin.

Observe que a sequência de inicio do talker / listener não importa, os nós podem ser iniciados em qualquer ordem. O único requisito é rodar o master antes de rodar os nós.

Variação: Conectando na direção contrária

Agora vamos tentar na direção contrária. Deixe o master rodando na máquina hal, cancele o talker e o listener, então rode-os na máquina marvin.

Primeiro o listener na máquina marvin:

ssh marvin
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials listener.py

Agora o talker na máquina hal:

ssh hal
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials talker.py

Caso tenha problemas

Caso tenha algum problema ao fazer o tutorial acima, provavelmente a causa seja a sua configuração de rede. Veja ROS/NetworkSetup para saber os requisitos de configuração e dicas de resolução de problemas.

Wiki: pt_BR/ROS/Tutorials/MultipleMachines (last edited 2020-04-25 00:03:57 by ximenes)