Este guia detalha o processo de construção de um mapa 3D de túneis utilizando o sensor LiDAR VLP-16, a linguagem C++ e a biblioteca PCL (Point Cloud Library) no ambiente ROS 2. O foco é no fluxo de execução e nos comandos de depuração.
Comandos de Depuração e Compilação
Para compilar e depurar o código, navegue até o diretório raiz do workspace e execute os seguintes comandos. A remoção de diretórios de build e instalação é útil para garantir uma compilação limpa.
cd ~/bol_ws
rm -rf install build log
colcon build --symlink-install
# Remover pacotes específicos e reconstruir se necessário
rm -rf ~/bol_ws/build/scanmatcher ~/bol_ws/install/scanmatcher
colcon build --symlink-install --packages-select scanmatcher
# Executar o nó de mapeamento com Valgrind para detecção de vazamentos de memória
valgrind --tool=memcheck --leak-check=full \
ros2 run tunnel_mapping tunnel_mapping_node
Inicialização dos Sensores e Nós
A inicialização completa do sistema envolve o driver do LiDAR, a conversão de nuvem de pontos, o nó IMU e o nó de mapeamento. Abaixo estão os comandos para iniciar cada componente em terminais separados.
Inicialização Geral (Todos os Componentes)
ros2 run master_launcher master_launcher
1. Driver do LiDAR Velodyne (Terminal 1)
ros2 run velodyne_driver velodyne_driver_node
2. Nó de Conversão de Nuvem de Pontos (Terminal 2)
ros2 launch velodyne_pointcloud velodyne_transform_node-VLP16-launch.py
3. Nó IMU (Terminal 3)
ros2 launch yesense_std_ros2 yesense_node.launch.py
Funcionalidade de Mapeamento
Para iniciar o processo de mapeamento 3D, execute o seguinte nó.
1. Executar Nó de Algoritmo de Mapeamento (Terminal 4)
ros2 launch tunnel_mapping tunnel_mapping.launch.py
Visualização e Gravação de Dados
A visualização em tempo real e a gravação de dados são essenciais para a validação do processo.
1. Visualização com RViz (Terminal 5)
Configure o RViz para exibir a nuvem de pontos processada no tópico /processed_cloud.
ros2 run rviz2 rviz2
2. Gravação e Reprodução de Dados (Terminal 6)
# Gravar dados da nuvem de pontos processada
ros2 bag record /processed_cloud -o tunnel_mapping
# Reproduzir dados gravados
ros2 bag play tunnel_mapping
Funcionalidade de Corte de Mapa
Este módulo permite o corte e a segmentação do mapa gerado.
1. Executar Nó de Corte de Mapa
ros2 run map_cutting map_cutting_node
Após a inicialização bem-sucedida, o nó indicará a disponibilidade do serviço para acionar o corte.
2. Acionar Serviço de Corte
ros2 service call /trigger_cut std_srvs/srv/Trigger "{}"
3. Configuração Interativa dos Parâmetros de Corte
O sistema solicitará a entrada do usuário para definir os parâmetros de corte após a iniciailzação do nó.
Mapeamento 3D, Mapas de Probabilidade e Conversão para Mapa 2D
Comandos para gerar mapas 3D, mapas de probabilidade e converetr para um mapa 2D, além de salvar o mapa 2D.
# Iniciar o sistema de mapeamento e visualização
ros2 launch scanmatcher lio.launch.py
ros2 run rviz2 rviz2
ros2 launch octomap_server2 octomap_server_launch.py
ros2 bag play lidar16_imu_3
# Iniciar o serviço de salvamento de mapa 2D
ros2 run nav2_map_server map_saver_server
ros2 lifecycle set /map_saver configure
ros2 lifecycle set /map_saver activate
# Salvar o mapa 2D (ajuste o caminho e o nome do arquivo conforme necessário)
ros2 service call /map_saver/save_map nav2_msgs/srv/SaveMap \
"{map_topic: '/projected_map', \
map_url: '/home/lyh/testmap_517', \
image_format: 'pgm', \
map_mode: 'trinary', \
free_thresh: 0.25, \
occupied_thresh: 0.65}"
Comandos Diversos
Uma coleção de comandos úteis para interagir com o ROS 2, incluindo reprodução de bag, listagem de tópicos e conversão de formatos de bag.
# Reprodução e visualização de dados
ros2 bag play zoulang4_18
ros2 launch scanmatcher lio.launch.py
ros2 run rviz2 rviz2
# Converter bag de ROS1 para ROS2 (formato SQLite3)
rosbags-convert --src zoulang_1.bag --dst zoulang_1 --dst-storage sqlite3
# Gravar todos os tópicos
ros2 bag record -a
# Reproduzir um bag
ros2 bag play + nome_do_bag
# Monitorar dados de tópicos específicos
ros2 topic echo /imu/data_raw
ros2 topic echo /imu_data
ros2 topic echo /imu_data_ros sensor_msgs/msg/Imu
# Listar tópicos
ros2 topic list
ros2 topic list -t # Com tipos de mensagens
# Verificar a frequência de um tópico
ros2 topic hz /imu_data_ros
# Examinar dados de tópicos com tipos de mensagens específicos
ros2 topic echo /imu_data yesense_interface/msg/ImuData
# Compilar pacotes específicos
colcon build --packages-select yesense_std_ros2
# Instalar pacotes .deb
sudo dpkg -i + nome_do_pacote.deb
# Desvincular um projeto do controle de versão Git
rm -rf .git
Gravação de Conjuntos de Dados
Comandos para configurar e gravar dados de sensores para posterior análise.
# Lançar configurações de driver de sensor
roslaunch velodyne_pointcloud VLP16_points.launch
roslaunch yesense_imu yesense_ahrs.launch
# Monitorar tópico IMU
rostopic echo /imu
# Gravar dados de múltiplos tópicos em um arquivo bag
rosbag record -O lidar16_imu.bag /imu /velodyne_points /velodyne_packets
# Listar tópicos disponíveis
rostopic list
# Obter informações sobre um arquivo bag
rosbag info lidar16_imu.bag
# Executar script de calibração
./calib.sh