Este repositório contém o workspace ROS utilizado para simulação, mapeamento e navegação autônoma de um robô móvel utilizando ROS Noetic, Gazebo 11 e RViz.
O projeto foi desenvolvido com foco em uma aplicação de robótica móvel em ambiente interno, utilizando um robô diferencial equipado com sensor LiDAR para criação de mapas e posterior navegação autônoma.
O projeto permite:
- Simulação do robô móvel no Gazebo
- Criação de mapas utilizando SLAM (GMapping)
- Visualização do ambiente no RViz
- Localização do robô utilizando AMCL
- Navegação autônoma utilizando Move Base
- Planejamento de trajetória em ambiente conhecido
- Controle manual via teleoperação
- Testes em ambiente de armazém simulado
- Navegação utilizando pontos fixos (waypoints)
- Execução de rotas sequenciais entre diferentes pontos do mapa
- Controle de destinos pelo terminal utilizando comandos de teclado
- Ubuntu 20.04
- ROS Noetic
- Gazebo 11
- RViz
- Catkin Workspace
gazebo_rosslam_gmappingmap_serveramclmove_baserviznavigation stack
Rob_Movel_ws
│
├── src
│ │
│ ├── atom
│ │ ├── launch
│ │ ├── urdf
│ │ ├── meshes
│ │ ├── model
│ │ ├── worlds
│ │ └── scripts
│ │
│ ├── navigation_stack
│ │ ├── launch
│ │ ├── param
│ │ ├── rviz
│ │ ├── config
│ │ │ └── waypoints.yaml
│ │ ├── scripts
│ │ │ └── waypoint_keyboard.py
│ │ └── src
│ │
│ └── maps
│ └── armazem_leve
│ ├── map.yaml
│ └── map.pgm
│
└── README.md
mkdir -p ~/Rob_Movel_ws/src
cd ~/Rob_Movel_wsgit clone https://github.com/Leite02/Rob_Movel_ws.gitsudo apt update
sudo apt install \
ros-noetic-gazebo-ros \
ros-noetic-gmapping \
ros-noetic-navigation \
ros-noetic-map-server \
ros-noetic-amcl \
ros-noetic-move-baseDentro do workspace:
cd ~/Rob_Movel_ws
catkin_makeApós a compilação:
source devel/setup.bashPara criar um novo mapa:
roslaunch atom atom_mapping.launchEsse comando inicia:
- Gazebo
- Robô móvel
- Sensor LiDAR
- GMapping
- RViz configurado para mapeamento
Durante o mapeamento, mova o robô utilizando teleoperação.
Após finalizar, salve o mapa:
rosrun map_server map_saver -f ~/Rob_Movel_ws/src/maps/nome_do_mapaSerão gerados:
nome_do_mapa.yaml
nome_do_mapa.pgm
Com o mapa previamente criado:
roslaunch atom armazem_navigation.launchEsse launch inicia:
- Gazebo com ambiente conhecido
- Map Server
- AMCL para localização
- Move Base
- RViz para navegação
No RViz:
Inicialize a posição do robô utilizando:
2D Pose Estimate
Defina o destino utilizando:
2D Nav Goal
O robô irá calcular uma trajetória e navegar automaticamente.
Além da navegação pelo RViz, o projeto possui um sistema de navegação utilizando pontos previamente definidos no mapa.
Os pontos são armazenados no arquivo:
~/Rob_Movel_ws/src/navigation_stack/config/waypoints.yaml
Cada waypoint possui:
- posição X
- posição Y
- orientação do robô (Yaw)
Exemplo:
waypoints:
1:
x: 7.323
y: 6.041
yaw: -3.14Primeiro inicie a navegação:
roslaunch atom armazem_navigation.launchEm outro terminal:
source ~/Rob_Movel_ws/devel/setup.bash
rosrun navigation_stack waypoint_keyboard.pyO programa exibirá:
NAVEGAÇÃO POR WAYPOINTS
Digite o número do waypoint desejado.
Exemplo:
5
O robô irá navegar automaticamente até o ponto 5.
Também é possível executar uma sequência de pontos.
Exemplo:
rota 1 5 9 13
O robô executará:
Waypoint 1
↓
Waypoint 5
↓
Waypoint 9
↓
Waypoint 13
Ao finalizar:
ROTA FINALIZADA
Para criar ou modificar pontos de navegação:
Editar:
~/Rob_Movel_ws/src/navigation_stack/config/waypoints.yaml
Os pontos devem estar dentro da região conhecida pelo mapa utilizado pelo AMCL.
O robô pode ser movimentado utilizando comandos de velocidade:
rostopic pub /atom/cmd_vel geometry_msgs/Twist \
'{linear: {x: 0.2, y: 0.0, z: 0.0},
angular: {x: 0.0, y: 0.0, z: 0.0}}'atom/launch/atom_mapping.launch
Executa o processo de SLAM.
atom/launch/armazem_navigation.launch
Executa navegação autônoma utilizando mapa existente.
atom/launch/atom_warehouse.launch
Carrega o ambiente simulado.
O robô possui:
Responsável por:
- criação do mapa
- localização
- detecção de obstáculos
Tópico:
/scan
Responsável pela estimativa de movimento:
/atom/odom
Comando:
/atom/cmd_vel
O projeto utiliza o ambiente:
maps/armazem_leve
Contendo:
map.yaml
map.pgm
O mapa foi criado utilizando GMapping através do sensor LiDAR do robô.
Utilize:
2D Pose Estimate
e informe a posição inicial.
Verifique se o ambiente foi carregado:
source ~/Rob_Movel_ws/devel/setup.bashVerifique:
rostopic list | grep cmd_velDeve existir:
/atom/cmd_vel
Verifique se o arquivo existe:
ls ~/Rob_Movel_ws/src/navigation_stack/config/Deve aparecer:
waypoints.yaml
Verifique a permissão do script:
chmod +x ~/Rob_Movel_ws/src/navigation_stack/scripts/waypoint_keyboard.pyEste projeto está disponibilizado para fins acadêmicos e de pesquisa.