E agora?

Sumário

  1. Executando o ROS em uma rede
  2. Escrevendo programas mais limpos
  3. Visualizando dados com o rviz
  4. Criando tipos de mensagem e serviço
  5. Gerenciando enquadramentos de coordenada com tf
  6. Simulando com o Gazebo

Esta seção contém pequenas pré-visualizações (com links para a documentação relevante) de alguns tópicos adicionais que, muito embora não tenhamos abordado aqui, ocorrem comumente em sistemas reais ROS.

Executando o ROS em uma rede

Você deve se lembrar do Capítulo 1 que uma das vantagens do ROS é que ele facilita a operação distribuída de robôs, na qual inúmeros programas diferentes sendo executados em múltiplos computadores podem interagir uns com os outros. Entretanto, ao longo deste livro, o sistema ROS esteve restrito a um único computador.

Utilizar o ROS em uma rede de múltiplos computadores requer configurações tanto a nível da rede (para garantir que todos os computadores podem comunicar-se uns com os outros), quanto a nível ROS (para garantir que todos os nós podem se comunicar com o mestre). A boa notícia é que, uma vez que você configurou tudo corretamente, o ROS se encarregará dos detalhes de comunicação da rede. Nós em diferentes máquinas podem se comunicar perfeitamente utilizando, precisamente, os mesmos métodos que utilizamos em uma única máquina.

Escrevendo programas mais limpos

O código-fonte para os programas exemplo neste livro é otimizado especialmente em termos de brevidade e clareza, mais do que extensibilidade e manutenção. Na verdade, várias diretrizes são comumente sugeridas na escrita de programas “mais limpos”, as quais não obedecemos neste livro. Por exemplo, alguns desenvolvedores sugerem o uso dos callbacks do ros::Timer ao invés dos objetos ros::Rate. Alguns desenvolvedores também preferem reduzir o número de variáveis globais e funções ao encapsulá-las ou torná-las parte dos dados de um nó em uma classe, utilizando métodos desta classe como callbacks. O benefício destes tipos de técnicas tende a aumentar à medida em que o tamanho e a complexidade dos programas crescem.

Visualizando dados com o rviz

Ao trabalhar com o turtlesim, quase todos os dados nas nossas mensagens lidaram com informações relativamente simples, tais como posições bidimensionais, orientações e velocidades. Na realidade, robôs reais costumam ser substancialmente mais complexos, e nenhuma das técnicas que aprendemos neste livro são realmente apropriadas para visualizar os dados complexos e ruídosos tipicamente gerados. Para preencher esta lacuna, o ROS provê uma ferramenta gráfica denominada rviz que pode exibir uma gama de informações — naturalmente, por meio de uma inscrição a tópicos de tipos apropriados escolhidos pelo usuário — sobre a operação do robô.

Criando tipos de mensagem e serviço

Todos os exemplos neste livro basearam-se exclusivamente em tipos de dados existentes para mensagens e serviços. No entanto, é fácil criar novos tipos de dados que pertencem aos nossos próprios pacotes.

Gerenciando enquadramentos de coordenada com tf

Pelo fato de robôs operarem no mundo físico, é natural utilizar coordenadas para descrever as posições de várias partes do robô, conjuntamente com objetos que o robô desejaria desviar ou interagir. Assim, torna-se crucial ter um rastreamento cuidadoso dos enquadramentos de coordenada, nos quais as coordenadas são expressas. Vários tipos de mensagens incluem um campo frame_id que identifica o enquadramento de coordenada no qual os dados da mensagem são expressos.

Para dar sentido a esses diferentes enquadramentos de coordenada, precisamos saber que eles se relacionam uns com os outros. Especificamente, frequentemente gostaríamos de saber a transformação que é capaz de converter coordenadas de um enquadramento para outro. O ROS provê um pacote padrão chamado tf — sigla para “transformação” — cujo papel é habilitar nós a utilizarem informações sobre esses tipos de transformações 1234. O pacote tf é projetado para funcionar robustamente, mesmo quando os dados de transformação estão distribuídos ao longo de múltiplos nós e até mesmo quando as transformações mudam ao longo do tempo.

Simulando com o Gazebo

Uma das grandes vantagens do projeto modular de software que o ROS encoraja é que podemos facilmente “trocar” vários componentes de um sistema em execução, de modo a reduzir o tempo de desenvolvimento e tornar os testes mais fáceis. O Capítulo 9 descreve um exemplo desta capacidade, com a qual podemos temporariamente substituir um ou mais nós com uma bag gravada de mensagens dos nós publicadas. Outra opção ainda mais poderosa é utilizar o Gazebo, que é um simulador de robôs de alta fidelidade. Ao utilizá-lo, podemos definir características o robô (ou robôs) e do mundo, bem como interagir com o robô, via ROS, da mesma forma que interagiríamos no mundo real.


1 http://wiki.ros.org/tf/Tutorials/Introduction%20to%20tf
2 http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20(C++)
3 http://wiki.ros.org/tf/Overview/Data%20Types
4 http://gazebosim.org/wiki/Tutorials/1.9/Overview_of_new_ROS_integration