Setup do Turtlebot3
Esse autoestudo ainda está em uma versão antiga.
Ele VAI ser atualizado.
Pode ler à vontade, pois o conteúdo ainda está correto. No entanto, vai melhorar consideravelmente e também vai mudar o sistema operacional sugerido (troca do server para o ubuntu normal)
É isso, tchau! =*
1. Instalando o sistema operacional no raspberry pi
Antes de mais nada, baixe e instale o raspberry pi imager
Após instalado, abra o software e comece a configurar o sistema operacional a ser inserido no cartão SD da raspberry. O primeiro passo é definir o sistema operacional. Para isso, clique no botão destacado na imagem abaixo:
Agora precisamos escolher o sistema operacional. Selecione a opção "Other general-purpose OS"
Entre os sistemas operacionais que aparecem, selecione o Ubuntu:
Selecione a versão "Ubuntu Server 22.04 LTS (64-bit)":
A seguir, precisamos definir qual cartão SD será utilizado. Para isso, clique no botão "Choose storage":
Na nova tela, selecione o cartão SD que quer utilizar:
Antes de gravarmos o sistema operacional, vamos definir algumas configurações necessárias para uma configuração do tipo headless (instalação sem monitor e teclado para a raspberry). Para isso, clique no ícone de engrenagem:
Aqui você deve:
- Configurar o hostname do dispositivo (evite o padrão raspberry ou raspberrypi, pois a nossa rede tem muitos dispositivos e é possível que haja outros dispositivos com o mesmo hostname se mantivermos o padrão)
- Ativar o SSH
- Configurar o usuário e a senha (evite o padrão aqui também)
- Configure o SSID e senha para acesso ao Wifi
Pronto! Agora podemos clicar em "Write" e aguardar até que o processo esteja concluído.
2. Conectando-se ao raspberry pi
Para conectar-se ao raspberry pi, há duas alternativas:
- Conectar-se utilizando mouse, teclado e monitor; e
- Conectar-se utilizando ssh para uma solução headless.
Neste tutorial, vamos focar na solução headless. Para utilizar o raspberry pi por ssh, será necessário conectar-se a ele utilizando o seu IP local ou o seu hostname. Abra um terminal e rode:
ssh <usuário>@<hostname-pi>
Onde <usuário>
é o nome do usuário configurado na raspberry e <hostname-pi>
é o nome do hostname configurado. Caso esteja tentando executar esse comando em
um sistema Linux, certifique-se de que o avahi-daemon
está instalado e
rodando (impossível em WSL) e execute uma versão modificada do comando acima:
ssh <usuário>@<hostname-pi>.local
Se tudo der certo, você deve ver uma mensagem perguntando se você deseja adicionar o hostname à sua lista de hosts conhecidos. A partir daí, basta digitar sua senha e utilizar o terminal do raspberry.
2.1. Alternativa: configurando SSH por USB
Para os casos em que a rede local utilizada não possui funcionalidade de DNS, existe uma alternativa que envolve configurar a porta USB do raspberry como porta Ethernet e realizar a conexão por ssh utilizando um cabo USB. Para isso, siga esse tutorial
3. Instalando o ROS Humble
Antes de mais nada, garanta que o sistema operacional está com todos os seus pacotes atualizados e com as definições do banco de dados do apt mais novas. Para garantir essas características, rode:
sudo apt update && sudo apt upgrade
Se você receber uma mensagem de que o pacote dpkg
não foi atualizado com
sucesso, rode:
sudo apt-get --with-new-pkgs upgrade dpkg
Você vai precisar reiniciar o raspberry antes de continuar.
Siga o tutorial disponível aqui
4. Instalando os pacotes do Turtlebot3
Para instalar os pacotes do turtlebot3, basta rodar o seguinte comando:
sudo apt install ros-humble-turtlebot3*
5. Compilando o pacote do LIDAR LDS-02
Vamos precisar criar um workspace ROS para compilar o pacote necessário para utilizar o LIDAS LDS-02. Rode:
mkdir -p ~/turtlebot3_ws/src && cd ~/turtlebot3_ws/src
Agora vamos clonar o repositório do firmware do LIDAR com:
git clone -b ros2-devel https://github.com/ROBOTIS-GIT/ld08_driver.git
Voltamos para a pasta do workspace com:
cd ~/turtlebot3_ws/
E finalmente vamos compilar o pacote com:
colcon build --symlink-install
Após compilar o pacote, configuramos o nosso bashrc
para dar source
no
arquivo de instalação do pacote com:
echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
Também precisamos especificar o modelo do LIDAR em uma variável de ambiente. Rode:
echo 'export LDS_MODEL=LDS-02' >> ~/.bashrc
Lembre-se que para poder utilizar essas mudanças sem reiniciar o terminal ainda precisa rodar:
source ~/.bashrc
6. Setup do OpenCR
Antes de mais nada, precisamos atualizar as configurações para a porta USB do Raspberry. Para isso, vamos rodar:
sudo cp `ros2 pkg prefix turtlebot3_bringup`/share/turtlebot3_bringup/script/99-turtlebot3-cdc.rules /etc/udev/rules.d/
Seguido por:
sudo udevadm control --reload-rules
E por fim:
sudo udevadm trigger
A seguir, precisamos adicionar a arquitetura armhf
às definições do dpkg
.
Rode:
sudo dpkg --add-architecture armhf
Para que essa alteração entre em efeito, precisamos rodar:
sudo apt update
Agora podemos instalar a biblioteca libc6
para a arquitetura armhf
com:
sudo apt install libc6:armhf
Conecte a OpenCR no Raspberry utilizando a porta USB e verifique em que porta ela está utilizando:
ls /dev/ttyACM*
O mais provável é que ele esteja conectado na porta /dev/ttyACM0
, então
seguiremos com os comandos para essa porta. Precisamos agora adicionar algumas
variáveis de ambiente para compilar e fazer upload do firmware. Rode:
echo 'export OPENCR_PORT=/dev/ttyACM0' >> ~/.bashrc
E:
echo 'export OPENCR_MODEL=burger' >> ~/.bashrc
Agora vamos baixar o firmware do repositório do github com:
wget https://github.com/ROBOTIS-GIT/OpenCR-Binaries/raw/master/turtlebot3/ROS2/latest/opencr_update.tar.bz2
Vamos descompactar a pasta com:
tar -xvf ./opencr_update.tar.bz2
Finalmente estamos prontos para fazer o upload do firmware. Para isso, precisamos entrar na pasta que acabamos de descompactar:
cd ~/opencr_update
E o comando final é para fazer o upload do firmware:
./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr
7. Comandando o Turtlebot3
Para comandar o turtlebot, primeiro precisamos setar a variável de ambiente que define qual o modelo do robô utilizado:
echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc && source ~/.bashrc
Em um terminal, rode o comando para iniciar a operação do pacote do turtlebot3:
ros2 launch turtlebot3_bringup robot.launch.py
Em outro terminal, rode o pacote teleop:
ros2 run turtlebot3_teleop teleop_keyboard
7.1. Por ssh
Para comandar o robô por ssh, basta conectar-se utilizando o comando:
ssh <usuário>@<hostname>
E, a partir daí, seguir os passos da seção anterior.
7.2. Por rede
Para comandar o robô por rede, é necessário definir o mesmo ROS_DOMAIN_ID
para todos os computadores envolvidos. Essa variável de ambiente define quais
portas UDP
o ROS utilizará para sua comunicação em rede. Se os dois
computadores se encontram na mesma rede e estão configurados com o mesmo
ROS_DOMAIN_ID
, e comunicação entre os seus nós é automática.
Para setar a variável de ambiente, use:
echo 'export ROS_DOMAIN_ID=<Valor-numérico-de-0-a-232> #TURTLEBOT3' >> ~/.bashrc
Lembre-se de dar source
no bashrc
:
source ~/.bashrc