O que é o flatland? É um “simulador de robôs bidimensional com foco na performance e compatível com ROS”[1].
O vídeo abaixo mostra o flatland em ação:
Fiz a instalação e alguns testes preliminares no Pop! OS 20.04 e usando a versão noetic do ROS. Para outras versões pode ser necessário adaptar algum comando.
Como instalar?
1º) Fazer a instalação do ROS versão Noetic (versão base)
Mais detalhes em http://wiki.ros.org/noetic/Installation/Ubuntu
2º) Instalar as dependências
Precisei instalar as dependências a seguir para o simulador funcionar. Eles englobam vários pacotes e pode ser que alguns deles já estejam instalados no seu sistema. As dependências podem ser instaladas através do apt:
sudo apt install ros-noetic-tf ros-noetic-tf2 ros-noetic-tf2-geometry-msgs ros-noetic-interactive-markers libyaml-cpp-dev qtbase5-dev liblua5.3-dev
3º) Instalar o simulador em si
Seguir o tutorial “Create Plugin Tutorial”: https://flatland-simulator.readthedocs.io/en/latest/flatland_tutorials/create_plugin.html
Até esse ponto, usando o comando roslaunch (último comando do tutorial) deve abrir o simulador sem nada muito interessante
4º) Rodar o modelo básico
Uma vez instalado o flatland é possível criar um modelo básico que pode interagir com o mapa
Para isso siga o tutorial “Quick start”: https://flatland-simulator.readthedocs.io/en/latest/quick_start.html
Se tudo deu certo agora você pode mandar mensagens nos tópicos do ROS controlando o robô.
Se você não entendeu o parágrafo acima e/ou o que é o ROS vale a pena visitar o site do projeto antes de mais nada: https://www.ros.org/
Se você já sabe o que é o ROS e o que é um tópico pode mandar mensagens do tipo Twist para controlar o robô via linha de comando da seguinte maneira
rostopic pub -1 /cmd_vel geometry_msgs/Twist ‘{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}’
O comando acima faz o robô andar para a frente. Se o valor de x for negativo ele vai andar para trás. Para girar o robô modifique o valor de z da velocidade angular.
5) Controlando o robô via Python
Fiz um programa em Python bem básico que faz o robô ser controlável pelo teclado: ‘a’ e ‘z’ fazem o robô andar para frente e para trás respectivamente e ‘s’ e ‘x’ para girar o robô. A tecla ‘q’ faz o robô parar e encerra o programa.
O código está disponível abaixo.
Script em Python para controlar um robô via ROS
Se o ROS estiver corretamente instalado o programa abaixo deve funcionar sem precisar de nenhuma instalação adicional.
Referências:
[1] Site do flatland https://flatland-simulator.readthedocs.io/en/latest/index.html
[2] Site do ROS https://www.ros.org/