Contents
Pré-requisitos
Neste tutorial, vamos inspecionar um pacote em ros-tutorials, instale-o com o seguinte comando
$ sudo apt-get install ros-<distro>-ros-tutorials
Substitua '<distro>' com o nome da sua distribuição de ROS (por exemplo: kinetic, lunar, melodic etc.)
Visão Geral dos Conceitos de Sistema de Arquivos
Pacotes: Pacotes são a unidade básica de organização de software em ROS. Cada pacote pode conter bibliotecas, executáveis, scripts ou outros artefatos.
Manifesto (package.xml): Um manifesto é uma descrição de um pacote. É utilizado para definir dependências entre pacotes e para coletar meta-informação a respeito do pacote tal como versão, mantedor, licença, etc...
Nota: Usuários de rosbuild podem estar se perguntando onde foram parar os 'stacks', o conceito de stacks foi removido no catkin para simplificar a crescente base de código e para suportar uma melhor distribuição de pacotes. Em catkin você pode definir metapackages para coletar pacotes similares e múltiplos pacotes podem viver num mesmo repositório de controle de versão. Essas duas funcionalidades substituíram o que os stacks faziam.
Ferramentas do Sistema de Arquivos
O código é espalhado através de muitos pacotes ROS. Navegando com ferramentas de linha de comando tais quais ls e cd pode se tornar bastando tedioso. Justamente por isso que o ROS disponibiliza ferramentas para lhe auxiliar.
Utilizando rospack
rospack permite você adquirir informações sobre pacotes. Neste tutorial, iremos simplesmente cobrir a utilização da opção find, que retorna o endereço do pacote.
Uso:
$ rospack find [nome_do_pacote]
Exemplo:
$ rospack find roscpp
Deveria retornar:
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp
Se você instalou ROS Kinetic, por exemplo, a partir do apt no Ubuntu, você deve ver exatamente:
/opt/ros/kinetic/share/roscpp
Utilizando roscd
roscd é parte da suíte rosbash. Esse comando permite que você mude de diretório (cd) diretamente à um pacote ou stack.
Uso:
$ roscd [local[/subdiretório]]
Execute este exemplo:
$ roscd roscpp
Para verificar que mudamos para o diretório do pacote roscpp, vamos imprimir o diretório atual utilizando o comando Unix pwd:
$ pwd
Você deveria ver:
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp
Você pode notar que DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp é o mesmo local que rospack find retornou no exemplo anterior.
Note que roscd, assim como outras ferramentas do ROS, vai apenas encontrar pacotes ROS que estão nos diretórios listados na sua variável de ambiente ROS_PACKAGE_PATH. Para ver o que está na sua ROS_PACKAGE_PATH, digite:
$ echo $ROS_PACKAGE_PATH
Sua variável ROS_PACKAGE_PATH deve conter uma lista de diretórios onde você tem pacotes ROS, separados por :. Uma ROS_PACKAGE_PATH típica deve parecer com isso:
/opt/ros/kinetic/base/install/share
Assim como outras variáveis de ambiente, você pode adicionar diretórios à sua variável ROS_PACKAGE_PATH, com cada caminho separado por dois pontos ':'.
Subdiretórios
roscd permite que você se mova para um subdiretório de um pacote ou 'stack'.
Faça:
$ roscd roscpp/cmake $ pwd
Você deve ver:
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp/cmake
roscd log
roscd log vai lhe levar para a pasta onde o ROS armazena arquivos de log. Perceba que se você não rodou nenhum programa ROS, isto gerará um erro dizendo que tal pasta ainda não existe.
Caso você já tenha executado algum programa ROS anteriormente, faça:
$ roscd log
Utilizando rosls
rosls faz parte da suíte rosbash. Esse comando permite que você visualize o interior de um pacote diretamente pelo nome, ao invés de informar o caminho absoluto para a pasta (como o comando ls).
Utilização:
# rosls [local[/subdir]]
Exemplo:
$ rosls roscpp_tutorials
Deve retornar:
cmake launch package.xml srv
Completar com TAB
Digitar o nome de um pacote inteiro pode ser um tanto quanto tedioso. No exemplo anterior, roscpp_tutorials é um nome bastante longo. Por sorte, algumas ferramentas ROS têm suporte para completar com TAB.
Comece digitando:
# roscd roscpp_tut<<< agora aperte a tecla TAB >>>
Após pressionar a tecla TAB, a linha de comando deve preencher o resto:
$ roscd roscpp_tutorials/
Isto funciona porque roscpp_tutorials é atualmente o único pacote ROS que começa com roscpp_tut.
Agora tente digitar:
# roscd tur<<< agora tecle TAB >>>
Após pressionar a tecla TAB, a linha de comando vai preencher o máximo possível:
$ roscd turtle
Entretanto, neste caso existem vários pacotes que iniciam com turtle. Tente pressionar TAB duas vezes rapidamente. Isso deve imprimir na tela todos os pacotes ROS que iniciam com turtle:
turtle_actionlib/ turtlesim/ turtle_tf/
Na linha de comando você deve ter:
$ roscd turtle
Agora digite un s após turtle e então pressione TAB
# roscd turtles<<< agora pressione TAB >>>
Já que não existe apenas um pacote que inicia com turtles, você deve ver:
$ roscd turtlesim/
Revisão
Você talvez tenha notado um padrão com a nomeação das ferramentas ROS:
- rospack = ros + pack(age) // (package = pacote)
- roscd = ros + cd
- rosls = ros + ls
Nota: cd e ls são ferramentas de linha de comando bastante comuns em ambientes Linux (e outros obviamente). cd = Change Directory, ls = LiSt.
Esta convenção de nomeação se mantém por várias outras ferramentas ROS.