Skip to content

Tópicos

O ROS nada mais é do que um sistema capaz de provisionar a comunicação entre nós dentro de uma rede (tipicamente em uma rede local, mas é possível configurá-lo para acesso através da internet). O seu motivo de existir é para que seja possível promover uma arquitetura desacoplada para códigos de aplicações de robótica. Essa decisão arquitetural faz com que seja possível o compartilhamento de algoritmos de difícil implementação de uma forma que seja fácil integrá-los a qualquer projeto sem nem ao menos entender profundamente como se dá seu funcionamento.

Quer um exemplo? Pesquise sobre filtros de kalmann ou slam. Esses algoritmos estão sob seu alcance ao utilizar o ROS e seriam bastante onerosos para implementar do zero.

As únidades fundamentais do ROS são os nós e os tópicos. A seguir, vamos ver um pouco melhor como eles funcionam.

ROS nodes

Um “nó” é um dos principais elementos do ROS 2. Cada nó deve ser responsável por uma única função modular. Por exemplo, um nó pode ser responsável por controlar os motores das rodas ou por publicar dados de sensores, como um laser range-finder. Os nós podem enviar e receber dados de outros nós através de tópicos, serviços, ações ou parâmetros. Um sistema robótico completo é composto por muitos nós trabalhando em conjunto. Em ROS 2, um único executável (programa C++, programa Python, etc.) pode conter um ou mais nós.

Existem várias ferramentas que permitem interagir com os nós em ROS 2:

  1. ros2 run: Este comando lança um executável de um pacote. Por exemplo, para executar o “turtlesim”, você usaria o comando ros2 run turtlesim turtlesim_node.

  2. ros2 node list: Este comando mostra os nomes de todos os nós em execução. É útil quando você quer interagir com um nó ou quando tem muitos nós em execução e precisa monitorá-los.

  3. ros2 node info: Depois de conhecer os nomes dos nós, você pode obter mais informações sobre eles usando este comando. Ele retorna uma lista de assinantes, publicadores, serviços e ações, ou seja, as conexões do gráfico ROS que interagem com aquele nó.

O remapeamento permite reatribuir propriedades padrão do nó, como nomes de nós, nomes de tópicos, nomes de serviços, etc., para valores personalizados. Por exemplo, você pode reatribuir o nome do nó “/turtlesim” para “/my_turtle” usando o comando ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle.

ROS nodes

O ROS 2 utiliza tópicos como um dos principais meios de comunicação entre nós. Os tópicos permitem que os dados sejam transmitidos entre nós, possibilitando a interação e a execução de tarefas complexas em sistemas robóticos. Aqui está um guia sobre como os tópicos funcionam no ROS 2, com base no tutorial fornecido.

Antes de começar a explorar os tópicos, você precisa ter o ROS 2 e o pacote turtlesim instalados. Você deve iniciar os nós do turtlesim e do turtle_teleop_key em terminais separados usando os comandos:

Terminal window
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

O rqt_graph é uma ferramenta gráfica que permite visualizar os nós, tópicos e as conexões entre eles. Para executá-lo, use o comando:

Terminal window
rqt_graph

Você verá os nós e tópicos em execução, bem como as conexões entre eles.

Para listar todos os tópicos ativos no sistema, use o comando:

Terminal window
ros2 topic list

Para ver os tipos de mensagens associados a cada tópico, adicione a opção -t:

Terminal window
ros2 topic list -t

Para ver os dados sendo publicados em um tópico específico, use o comando:

Terminal window
ros2 topic echo <nome_do_tópico>

Por exemplo:

Terminal window
ros2 topic echo /turtle1/cmd_vel

Isso mostrará os dados sendo publicados no tópico /turtle1/cmd_vel.

Para obter informações sobre um tópico específico, como o número de publicadores e assinantes, use o comando:

Terminal window
ros2 topic info <nome_do_tópico>

2.6. Visualizando a Estrutura de uma Mensagem

Section titled “2.6. Visualizando a Estrutura de uma Mensagem”

Para ver a estrutura de uma mensagem de um tipo específico, use o comando:

Terminal window
ros2 interface show <tipo_da_mensagem>

Por exemplo:

Terminal window
ros2 interface show geometry_msgs/msg/Twist

Você pode publicar dados em um tópico diretamente da linha de comando usando o comando:

Terminal window
ros2 topic pub <nome_do_tópico> <tipo_da_mensagem> '<dados>'

Por exemplo:

Terminal window
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}'

Para ver a taxa na qual os dados estão sendo publicados em um tópico, use o comando:

Terminal window
ros2 topic hz <nome_do_tópico>