Tópicos
Introdução ao ROS
Section titled “Introdução ao ROS”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.
1. Nós
Section titled “1. Nós”
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.
1.1. Interagindo com Nós
Section titled “1.1. Interagindo com Nós”Existem várias ferramentas que permitem interagir com os nós em ROS 2:
-
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. -
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.
-
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ó.
1.2. Remapeamento (Remapping)
Section titled “1.2. Remapeamento (Remapping)”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.
2. Tópicos
Section titled “2. Tópicos”
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.
2.1. Configuração Inicial
Section titled “2.1. Configuração Inicial”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:
ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key2.2. Visualizando com rqt_graph
Section titled “2.2. Visualizando com rqt_graph”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:
rqt_graphVocê verá os nós e tópicos em execução, bem como as conexões entre eles.
2.3. Listando Tópicos
Section titled “2.3. Listando Tópicos”Para listar todos os tópicos ativos no sistema, use o comando:
ros2 topic listPara ver os tipos de mensagens associados a cada tópico, adicione a opção -t:
ros2 topic list -t2.4. Visualizando Dados de um Tópico
Section titled “2.4. Visualizando Dados de um Tópico”Para ver os dados sendo publicados em um tópico específico, use o comando:
ros2 topic echo <nome_do_tópico>Por exemplo:
ros2 topic echo /turtle1/cmd_velIsso mostrará os dados sendo publicados no tópico /turtle1/cmd_vel.
2.5. Informações sobre um Tópico
Section titled “2.5. Informações sobre um Tópico”Para obter informações sobre um tópico específico, como o número de publicadores e assinantes, use o comando:
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:
ros2 interface show <tipo_da_mensagem>Por exemplo:
ros2 interface show geometry_msgs/msg/Twist2.7. Publicando em um Tópico
Section titled “2.7. Publicando em um Tópico”Você pode publicar dados em um tópico diretamente da linha de comando usando o comando:
ros2 topic pub <nome_do_tópico> <tipo_da_mensagem> '<dados>'Por exemplo:
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}}'2.8. Verificando a Taxa de Publicação
Section titled “2.8. Verificando a Taxa de Publicação”Para ver a taxa na qual os dados estão sendo publicados em um tópico, use o comando:
ros2 topic hz <nome_do_tópico>