Construção de Mapa 3D de Túneis com VLP-16, C++ e PCL

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
 

Tags: ROS2 C++ PCL VLP-16 Mapeamento 3D

Publicado em 6-20 04:20