Pacotes

Sumário

  1. Listagem e localização de pacotes
  2. Inspecionando um pacote

Todos os softwares ROS são organizados dentro de pacotes. Um pacote ROS é uma coleção coerente de arquivos, geralmente incluindo tanto executáveis como arquivos de apoio, que servem para um propósito específico. No exemplo, utilizamos dois executáveis chamados turtlesim_node e turtle_teleop_key. Ambos são membros do pacote turtlesim.

⚠️ Tome cuidado com a diferença entre os pacotes ROS e os pacotes utilizados pelo seu gestor de pacotes do sistema operacional, tais como os pacotes deb usados pelo Ubuntu. Os conceitos são similares, e instalar um pacote deb pode adicionar um ou mais pacotes ROS na sua instalação, mas os dois não são equivalentes.

Não é um exagero dizer que todos os softwares ROS são parte de um pacote ou de outro. É importante notar que isto inclui novos programas que você cria. Nós veremos como criar novos pacotes na seção 3.1. Enquanto isso, o ROS oferece diversos comandos para interagir com os pacotes instalados.

Listagem e localização de pacotes

É possivel obter uma lista de todos os pacotes ROS instalados usando este comando:

rospack list

No sistema do autor isso produz uma lista de 188 pacotes. Cada pacote é definido por um manifesto, que é um arquivo chamado package.xml. Este arquivo define alguns detalhes sobre o pacote, incluindo o seu nome, versão, mantenedor e dependências. O diretório contendo package.xml é chamado de diretório de pacote. (De fato, isto é a definição de um pacote ROS: Qualquer diretório que o ROS pode encontrar que contém um arquivo chamado package.xml é um diretório de pacote.) Este diretório armazena a maior parte dos arquivos de pacote.

⏩ Uma exceção importante é que, para a maior parte dos pacotes — especialmente aqueles que vem sendo atualizados para usar o novo sistema de construção catkin — compiladores de executáveis não são armazenados no diretorio de pacotes, mas numa hierarquia de diretórios padronizada separada. Para pacotes instalados pelo apt-get, essa hierarquia está baseada em /opt/ros/indigo. Executáveis são armazenados no subdiretório lib abaixo dessa base. Da mesma forma, automaticamente gerados inclui arquivos que são armazenados dentro do subdiretório include sob essa base. Quando precisa deles a ROS encontra esses arquivos procurando nos diretórios listados na variável de ambiente CMAKE_PREFIX_PATH, que é definida automaticamente por setup.bash. Esse tipo de compilação sem fonte é uma das mudanças principais introduzidas pelo catkin na distribuição groovy do ROS, comparado fuerte e distribuições antigas. Geralmente, no entanto, tudo isso acontece atrás das cenas, e podemos confiar no ROS para encontrar os arquivos necessárias.

Para encontrar o diretório de um único pacote, use o comando de procura rospack:

rospack find package-name

Claro que, podem ter vezes que você não sabe (ou não se lembra) o nome completo do pacote que você está interessado. Nesses casos, é bem conveniente que rospack suporte o preenchimento de tabulações para nome de pacotes. Por exemplo, você pode escrever

rospack find turtle

e, antes de pressionar Enter, pressione a tecla Tab duas vezes para ver a lista de todos os pacotes ROS instalados dos quais os nomes começam com turtle.

De fato, a maior parte dos comandos ROS suportam esse tipo de preenchimento, não só para nomes de pacotes, mas em todos os locais em que isso faz sentido. No comando acima, você também poderia usar Tabs para completar tanto o nome do comando rospack como do “subcommand” find.

⚠️ A utilização frequente do preenchimento de tabulações pode contribuir muito para a redução do numero de coisas que você precisa se lembrar, incluindo os nomes completos dos pacotes, nós, tópicos, tipos de mensagens e serviços. Computadores são bastante bons para armazenar e recordar este tipo de coisa. Conselho não solicitado: deixe o seu computador fazer esse trabalho por você.

Inspecionando um pacote

Para visualizar os arquivos em um diretório de pacote, use um comando como este:

rosls package-name

Se quiser “ir” a um diretório de pacote, é possível mudar o diretório atual para um pacote particular, usando um comando como este:

roscd package-name

Com um exemplo simples, suponha que você queria ver a coleção de imagens de tartarugas usadas pelo turtlesim. O código abaixo mostra um exemplo sobre como poderia usar rosls e roscd para ver a lista dessas imagens e visualizar cada uma delas.

$ rosls turtlesim
cmake
images
msg
package.xml
srv
$ rosls turtlesim/images
box−turtle.png
diamondback.png
electric.png
fuerte.png
groovy.png
hydro.png
hydro.svg
indigo.png
indigo.svg
palette.png
robot−turtle.png
sea−turtle.png
turtle.png
$ ros cdturtlesim/images/
$ eog box−turtle.png

⚠️ Em algumas partes da documentação online, é possível ver referências para o conceito de uma pilha. Uma pilha é uma coleção de pacotes relacionados. Começando com uma versão groovy o conceito de pilha foi gradualmente eliminado e substituído por meta-pacotes. A grande diferença é um “achatamento” da hierarquia: Um meta-pacote é um pacote — que tem um manifesto assim como qualquer outro pacote, e nenhum outro pacote é armazenado dentro deste diretório — onde uma pilha é um contêiner para pacotes armazenados como subdiretórios. Raramente há uma razão para novos usuários interagirem diretamente com os pacotes.