Não se esqueça de acessar o tutorial de ROS2 para facilitar esta tarefa!
Assumimos que você já possui o sistema ROS2 instalado
É essencial para os robôs autônomos que naveguem de forma eficaz em ambientes desconhecidos
ou dinâmicos. Para isso, surgiu o SLAM (Simultaneous Localization and Mapping), uma técnica
na qual o robô mapeia um ambiente desconhecido enquanto localiza sua posição no mesmo.
Hoje, existem diversas bibliotecas para implementação de SLAM, comoa Nav2 -- utilizada para o
planejamento de trajetória, a evasão de obstáculos e outras tarefas de navegação em robótica
-- e o pacote SLAM TollBox. Sendo assim, os utilizaremos para criar nosso próprio mapa. Então,
certifique-se de instalar:
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup
sudo apt install ros-humble-slam-toolbox
Uma das grandes vantagens do ROS2 é a possibilidade de simularmos robôs e ambientes de forma
simples. Para isso, utilizaremos o simulador Gazebo, o qual possui uma ótima integração com o
sistema operacional. Para instalar o Gazebo, execute:
sudo apt install ros-humble-gazebo-*
O robô que utilizaremos para mapear o ambiente é o Turtlebot3, muito utilizado na área educacional.
Ele apresenta um sensor de distância à laser, o LIDAR que utilizaremos para detectar objetos. Logo,
é importante não se esquecer que os raios atingem apenas a altura do sensor. A seguir você pode
observar a versão Burger do robô e suas features:
Sendo desenvolvido para o ROS2, o robô possui seus próprios pacotes, crie seu workspace para o
turtlebot3 e clone os arquivos referentes à ele:
mkdir -p ~/turtlebot3_ws/src
cd ~/turtlebot3_ws/src/
git clone -b humble-devel https://github.com/ROBOTIS-GIT/DynamixelSDK.git
git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
Compile:
source /opt/ros/<distro>/setup.bash
cd ~/turtlebot3_ws && colcon build --symlink-install
source ~/turtlebot3_ws/install/setup.bash
Se lembra que devemos inicializar o ROS a cada terminal que abrimos? Agora, para configurar
seu workspace para uso, é necessário digitar em cada terminal:
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=burger
source ~/turtlebot3_ws/install/setup.bash
export ROS_DOMAIN_ID=30 #TURTLEBOT3
Não se esqueça que é possível adicionar os comandos para o arquivo bashrc, evitando ter que
digita-los novamente.
Como você deve ter notado, para iniciar o conjunto de pacotes do robô, precisamos exportar
uma variável de ambiente para especificar qual versão queremos iniciar (burger, waffle,
waffle pi). Vamos usar a versão "burguer", equivalente à versão física que possuimos.
Vamos mapear nosso ambiente no Gazebo! Para isso, inicialize o ROS2 em um novo terminal e
inicialize o turtlebot3 em uma casa simulada no Gazebo.
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
Agora, em um novos terminais, inicialize o Nav2 e o SLAM Toolbox, a implementação de SLAM
escolhida, fornecida pela Nav2:
ros2 launch nav2_bringup navigation_launch.py use_sim_time:=True
ros2 launch slam_toolbox online_async_launch.py use_sim_time:=True
No quarto terminal, iniciaremos o RViz, uma ferramenta de visualização 3D que permite os
usuários visualizarem dados de sensores e informações do robô em tempo real. Para facilitar,
podemos começar com uma configuração do RViz já existente para o Nav2.
ros2 run rviz2 rviz2 -d /opt/ros/humble/share/nav2_bringup/rviz/nav2_default_view.rviz
Anteriormente, você já utilizou o teclado para controlar a simulação do robô. Então, inicialize
o ROS2 em um novo terminal e execute o pacote teleop:
ros2 run turtlebot3_teleop teleop_keyboard
Tudo pronto! Agora, através do LIDAR, o Turtlebot3 irá mapear o ambiente e localizar sua posição
no mesmo.
Quando estiver satisfeito com seu mapa, salve-o:
ros2 run nav2_map_server map_saver_cli -f my_map
Agora, você deve ter dois novos arquivos:
my_map.yaml
: Contém os metadados do mapa e o caminho para o arquivo de imagem.my_map.pgm
: Este é o arquivo de imagem com pixels brancos, pretos e cinza, representando o
espaço livre, ocupado e desconhecido.
Perfeito! Agora você poderá utilizar o mapa que criou para tarefas como navegação autônoma
e planejamento de trajetória. Então, desafio-os à fazer o Turtlebot3 caminhar sozinho até um ponto
especificado por você no mapa do RViz.
Foi desenvolvido um ambiente do DINF para o Gazebo!
Adicione a pasta "2ndo_andar_passarela_escadas_v4" ao seus models em
/turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo, o arquivo "dinf_world.sdf" em worlds
e o arquivo disponível neste repositório do Github em "launch". Agora, para inicializar o ambiente, siga
os comandos citados anteriormente:
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
-
Ao tentar compilar seu workspace usando colcon build, é possível que receba a seguinte mensagem
de erro: “setup.py install is deprecated. Use build and pip and other standards-based tools”.
Nesse caso, a sua versão do python deve ser 58.2.0 ou anterior. Para isso, digite:
$ pip install setuptools==58.2.0. -
Caso seu computador avise que algum pacote do turtlebot3 está faltando mesmo após seguir todos
os passos, baixe:
$ sudo apt install ros-humble-turtlebot3* -
Caso o Gazebo mostre alguma mensagem de erro tente rodar o seguinte comando antes de tentar
resolver de alguma outra forma:
$ killall -9 gzserver
Um problema conhecido dessa versão do gazebo é que às vezes o server side dele acaba não sendo
encerrado corretamente após uma execução.