Configurações do ROS
O ROS 2 depende da noção de combinar espaços de trabalho (workspaces) usando o ambiente do shell. O espaço de trabalho principal do ROS 2 é chamado de "underlay", e os subsequentes são chamados de "overlays". Combinar espaços de trabalho facilita o desenvolvimento com diferentes versões do ROS 2 ou contra diferentes conjuntos de pacotes. Isso é realizado ao fontar arquivos de configuração toda vez que você abre um novo shell.
1. Instalação do ROS
Para instalar o ROS 2 Humble, basta utilizar o script disponível no repositório de scripts.
- Clonando o repositorio
- Setup dos scripts
- Instalando o ROS
git clone https://github.com/rmnicola/Scripts ~/Scripts
cd ~/Scripts && sudo ./install.sh
install-ros
2. Setup do script de inicialização do ROS
Para que os comandos e pacotes do ROS sejam reconhecidos pelo sistema, é necessário executar um script de inicialização. A maneira sugerida de trabalhar é rodando esse script toda vez que sua sessão de shell seja iniciada. Para isso, deve-se adicionar um comando ao script de inicialização do shell:
- Bash
- Zsh
- Zsh com a minha config.
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "source /opt/ros/humble/setup.zsh" >> ~/.zshrc
echo "source /opt/ros/humble/setup.zsh" >> '$ZODTDIR'/.zshrc
3. Verificação das variáveis de ambiente
Para que o ROS funcione adequadamente, são necessárias algumas variáveis de
ambiente para definir aspectos relacionados ao underlay
.
O script configurado acima já deve ter feito toda a configuração necessária,
mas não custa nada conferir. Vamos rodar o comando:
printenv | grep -i ROS
Vamos aproveitar a ocasião para aumentar o entendimento de vocês sobre os programas básicos UNIX? Vamos.
O comando printenv
exibe todas as variáveis de ambiente do sistema. Como são
muitas variáveis, acaba ficando um pouco difícil de encontrar as variáveis
relacionadas ao ROS. Como resolver esse problema? Utilizando um segundo programa,
o grep
. O grep
é uma ferramenta de linha de comando usada para pesquisar
padrões específicos dentro de arquivos ou entrada de texto, baseando-se em
expressões regulares. No caso, estamos buscando o padrão ROS
.
Beleza, mas como o grep
sabe o que tem na saída do printenv
? Caso vocês
ainda não conheçam, faço a apresentação formal: pipe (|
), queridos alunos.
Queridos alunos, pipe. O pipe serve para redirecionar a saída de ferramentas
de linha de comando, mexendo direto no fluxo do stdin
, stdout
e stderr
.
O pipe é o que faz funcionar a filosofia Unix de criar um programa que faça
uma coisa, mas uma coisa bem feita. Com ele, podemos encadear diversas ferramentas
simples para criar uma funcionalidade mais complexa. Aprendam a encadear
"tubulações" e vocês nunca mais vão querer voltar pro deserto do powershell
.
Referência sobre pipes
Depois desse redirecionamento, vamos às variáveis de ambiente que devem ter sido setadas no seu sistema pelo ROS:
ROS_DISTRO=humble
ROS_LOCALHOST_ONLY=0
ROS_PYTHON_VERSION=3
ROS_VERSION=2
3.1. ROS_DOMAIN_ID
Para configurar a funcionalidade de rede do ROS, é necessário setar uma
variável de ambiente chamada ROS_DOMAIN_ID
. Essa variável é responsável por
definir internamente a porta UDP que será utilizada pelo DDS (camada do ROS
responsável pela comunicação em rede). Sendo assim, caso queira que seus nós
comuniquem-se com nós em outro dispositivo, deve-se configurar ambos para usar
o mesmo ROS_DOMAIN_ID
. A saber, os endereços recomentados para essa variável
estão entre 0
e 121
ou entre 215
e 232
.