Já tendo o ambiente do ROS configurado, basta acessar o repositório do TurtleBot 3 no Git (https://github.com/ROBOTIS-GIT/turtlebot3/tree/master) e clonar o repositório dentro da pasta source do catkin workspace.
$ cd catkin_ws/src
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
Não se esqueça de selecionar o branch compatível com a distribuição do ROS instalada. Neste caso:
$ cd turtlebot3
$ git checkout noetic-devel
Além disso, é preciso instalar o pacote de mensagens (https://github.com/ROBOTIS-GIT/turtlebot3_msgs) e simulações (https://github.com/ROBOTIS-GIT/turtlebot3_simulations). Repita os passos acima, sempre instalando em catkin_ws/src/, e com a distro do ROS correta.
Agora, retorne ao workspace, execute o comando make para gerar as dependências necessárias do projeto, o script de configuração e selecione o modelo de simulação desejado.
$ cd ~user/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ export TURTLEBOT3_MODEL=burger
Um passo opcional é configurar o bash para configurar o ambiente ambiente automaticamente sempre que uma nova instância do terminal for aberta. Abra o arquivo
$ vim .bashrc
e acrescente, ao fim, as linhas
cd catkin_ws
source devel/setup.bash
export TURTLEBOT3_MODEL=burger
Lembrando que o vim tem alguns comandos diferentes:
- i insere texto antes do cursor;
- a adiciona texto após o cursor;
- esc retorna ao modo de comandos;
- :wq salva e sai.
Dica: usar o comando echo para imprimir essas frases no fim do arquivo, sem abrir um editor:
echo "cd catkin_ws" >> .bashrc
echo "source devel/setup.bash" >> .bashrc
echo "export TURTLEBOT3_MODEL=burger" >> .bashrc
Tendo o ambiente configurado, agora basta lançar a aplicação do turtlebot3_gazebo com o ambiente de simulação desejado. Neste exemplo, será utilizado o mundo aberto.
$ roslaunch turtlebot3_gazebo turtlebot3_emty_world.launch
Para efeitos de curiosidade, dê uma olhada nos tópicos ativos em um novo terminal, lançados pela simulação.
$ rostopic list
Para controlar o robô, antes de mais nada, vá no gazebo e insira qualquer objeto no mapa (será mais fácil de ver o deslocamento tendo um referencial).
Feito isso, publique uma mensagem no tópico cmd_vel, que comanda a velocidade do robô. Ao começar a digitar o comando e dar duplo tab, o auto-completar do terminal já informa o formato da mensagem.
$ rostopic pub cmd_vel geometry_msgs/Twist " linear: x: 0.2 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.5 "
Uma outra forma (bem melhor) de controlar o Burger é chamando a aplicação de Teleop, que captura as teclas (W/A/S/D/X) e publica o comando no tópico cmd_vel. Para executar essa aplicação, digite
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
Agora, vamos testar o modelo Waffle em um mapa elaborado, experimentar a câmera do robô em ação.
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch
Em um novo terminal, abra o programa e visualização gráfica dos tópicos.
$ rosrun rviz rviz
Então clique em Add, filtre por tópicos e selecione
/camera/depth/image_raw/Image
Após uns instantes de inicialização, irá aparecer a imagem capturada pela câmera do waffle. Experimente executar o teleop para mover o robô e explorar a casa.
Agora vamos lançar 2 turtlebots ao mesmo tempo, e controlar ambos pelo teclado usando teleop.
Primeiro, crie um novo pacote e, dentro, duas pastas: launch e script.
$ cd catkin_ws/src
$ catkin_create_pkg turtleparty std_msgs rospy
$ cd turtleparty
$ mkdir launch
$ mkdir script
Na pasta de launch irá o código para lançar ambos os robôs num mapa aberto, enquanto que a pasta de script conterá um arquivo que vai interceptar as mensagens do teleop e publicará para ambos os robôs da simulação.
$ vim launch/two_tb3.launch
$ vim script/repeat_teleop.py
$ sudo chmod +x script/repeat_teleop.py
Adicione a execução do nó de repetição ao launch com a entrada
<node pkg="turtleparty" name="repeat_teleop" type="repeat_teleop.py" />
Na pasta do catkin workspace, lance o projeto e em seguida o teleop.
$ catkin_make
$ source devel/setup.bash
$ roslaunch turtleparty two_tb3.launch
Ctrl+Z
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch