Diretório
7.2 Comparação de algoritmos SLAM a laser comumente usados
7.2.1 Gmapping SLAM chart chart
7.2.2 Gráfico de cálculo Karto SLAM
7.2.3 Gráfico de cálculo do Hector SLAM
7 ROS SLAM a laser
Os principais problemas da navegação por robôs podem ser divididos em três partes: mapeamento, localização e planejamento de caminhos. O problema do posicionamento e mapeamento simultâneos (SLAM) está na interseção do posicionamento e do mapeamento. O SLAM exige que o robô construa gradualmente um mapa em um ambiente desconhecido e determine sua própria posição com base no mapa para localizar ainda mais.
O SLAM pode ser dividido em três categorias: laser, visão, laser + visão. Este capítulo estuda principalmente o algoritmo SLAM a laser.
7.1 Mapa
O mapa no ROS é uma imagem comum em escala de cinza, geralmente no formato pgm. Pixels pretos nesta imagem indicam obstáculos, pixels brancos indicam áreas viáveis e cinza são áreas inexploradas. Como mostrado abaixo:
O mapa é mantido e apresentado na forma de um tópico no ROS.O nome do tópico é / map e seu tipo de mensagem é nav_msgs / OccupancyGrid
Você pode visualizar o formato da mensagem através de rosmsg show nav_msgs / OccupancyGrid:
std_msgs/Header header #消息的报头
uint32 seq
time stamp
string frame_id #地图消息绑定在TF的哪个frame上,一般为map
nav_msgs/MapMetaData info #地图相关信息
time map_load_time #加载时间
float32 resolution #分辨率 单位:m/pixel
uint32 width #宽 单位:pixel
uint32 height #高 单位:pixel
geometry_msgs/Pose origin #原点
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
int8[] data #地图具体信息
O item acima define a estrutura de dados do tópico / map, que contém três partes principais: cabeçalho, informações e dados. O cabeçalho é o cabeçalho da mensagem, que armazena informações gerais, como número de sequência, registro de data e hora, quadro, etc. , [] É adicionado após int8, que pode ser entendido como um contêiner do tipo vetor, que armazena dados do tipo width * height int8, que são cada pixel deste mapa.
Para o mapa da área desconhecida, o robô pode ser construído dinamicamente usando o algoritmo SLAM em movimento.
Para um mapa de uma área conhecida, você pode primeiro iniciar o nó do algoritmo SLAM, mover o robô para varrer o ambiente circundante e criar um mapa e, em seguida, usar map_server ( $ rosrun map_server map_saver -f map ) para salvar o mapa. Use o mapa salvo para navegação futura.
7.2 Comparação de algoritmos SLAM a laser comumente usados
Os algoritmos SLAM a laser comumente usados no ROS são Gmapping, Karto, Hector e outros algoritmos.
A comparação específica é mostrada na tabela a seguir:
|
gmapping |
Karto |
Hector |
Sensor necessário |
Lidar Odômetro |
Lidar Odômetro |
Lidar (requer radar de alta frequência) |
Inserir tópico |
|
|
|
Tópico de saída |
|
|
|
Serviço prestado |
/ dynamic_map: o tipo é nav_msgs / GetMap, usado para obter o mapa atual |
/ dynamic_map: o tipo é nav_msgs / GetMap, usado para obter o mapa atual |
/ dynamic_map: o tipo é nav_msgs / GetMap, usado para obter o mapa atual |
Realização técnica |
Filtro de partículas |
Otimização baseada em gráficos |
correspondência de varredura (equação de Gaussian-Newton) |
Efeito |
Efeitos maduros, confiáveis e estáveis, muitos robôs baseados em ROS executam gmapping_slam |
Semelhante ao mapeamento gmap, mais adequado para ambientes de mapas grandes |
O efeito não é tão bom quanto o Gmapping e o Karto, porque ele usa apenas informações do lidar |
(1) O odômetro inclui uma roda de código fotoelétrico na roda, uma unidade de navegação inercial (IMU) e um odômetro visual. Você pode usar apenas um deles para odom ou selecionar vários para fusão de dados, e o resultado da fusão é usado como odom.
(2)https://blog.csdn.net/dddxxxx/article/details/78460636
(3) Consulte 《Uma avaliação das técnicas 2D SLAM disponíveis no sistema operacional do robô》
7.2.1 Gmapping SLAM chart chart
7.2.2 Gráfico de cálculo Karto SLAM
7.2.3 Gráfico de cálculo do Hector SLAM