Entendendo Erros e Otimização no SLAM
Uma olhada nos erros em SLAM e o papel dos Jacobianos na otimização.
― 8 min ler
Índice
A Localização e Mapeamento Simultâneos (SLAM) é uma tecnologia super importante que ajuda as máquinas a entenderem onde estão em um ambiente desconhecido, enquanto criam um mapa desse lugar. Pra isso, o SLAM usa diferentes tipos de erros e técnicas matemáticas. Neste artigo, vamos focar em vários erros que aparecem no SLAM e como os Jacobianos são usados na otimização deles.
Tipos de Erros no SLAM
Os erros nos modelos de SLAM se referem às diferenças entre o que é medido e o que é previsto. Aqui, vamos discutir alguns tipos principais de erros que são comuns no SLAM.
Erro de Reprojeção
O erro de reprojeção é essencial no SLAM visual, especialmente em métodos baseados em características. Esse erro surge das projeções de pontos 3D em um plano de imagem 2D. Em termos simples, quando um ponto 3D é visto através de uma câmera, ele deve aparecer em um local específico na imagem. Qualquer desvio desse local representa o erro de reprojeção.
Erro Fotométrico
O erro fotométrico é usado principalmente em SLAM visual direto. Esse erro se concentra nas mudanças de brilho entre imagens tiradas em momentos diferentes. Ele mede o quão parecidos são os valores de pixel de duas imagens. Uma diferença menor indica que as imagens estão bem alinhadas no espaço.
Erro de Posição Relativa
O erro de posição relativa é crítico na otimização do grafo de poses. Ele compara a posição e orientação esperadas de uma pose em relação a outra. Quando um robô revisita um local, ele cria um loop, permitindo que o sistema SLAM compare essas poses e corrija qualquer desvio ou imprecisão.
Erro de Reprojeção de Linha
Esse erro lida com linhas representadas de uma forma específica, conhecida como coordenadas de Plücker. Ele ajuda a otimizar a representação de uma linha 3D na imagem, garantindo um mapeamento preciso do ambiente.
Erro de Medição de IMU
As Unidades de Medição Inercial (IMUs) fornecem dados sobre movimento, incluindo velocidade e orientação. O erro de medição da IMU captura a diferença entre o movimento esperado, calculado a partir de estados anteriores, e o movimento realmente observado. Ele ajuda a refinar a trajetória do robô, garantindo que ela permaneça precisa.
Importância dos Jacobianos na Otimização
Uma vez que os erros são definidos no SLAM, o próximo passo é minimizar esses erros para otimizar o processo de SLAM. Isso envolve encontrar os melhores parâmetros para a posição do robô, orientação ou características no ambiente. Os Jacobianos são vitais nesse processo de otimização.
Um Jacobiano é uma matriz que descreve como mudanças em um conjunto de variáveis afetam outro conjunto. No SLAM, os Jacobianos são usados para entender como mudanças nas medições dos sensores ou nas variáveis de estado impactam o erro total.
Jacobianos para Erro de Reprojeção
- Pose da Câmera (baseada em SO(3)): Esse Jacobiano descreve como a rotação da câmera afeta o erro de reprojeção.
- Pose da Câmera (baseada em SE(3)): Essa versão leva em conta tanto a rotação quanto a tradução, oferecendo uma visão completa de como a pose da câmera impacta o erro de reprojeção.
- Ponto do Mapa: Esse Jacobiano representa como mudanças em um ponto 3D no mapa influenciam o erro de reprojeção.
- Pose Relativa (baseada em SE(3)): Semelhante à pose da câmera, mas foca em como as posições relativas entre diferentes poses de câmera afetam o erro.
- Linha Plücker 3D: Esse Jacobiano é relevante para erros associados a linhas no espaço 3D.
- Representação de Quaternion: Esse Jacobiano se concentra na representação de rotação usando quaternions.
- Intrínsecos da Câmera: Esse leva em conta como mudanças nos parâmetros da câmera afetam o erro de medição.
- Profundidade Inversa: Esse Jacobiano está relacionado a como a representação da profundidade impacta o erro.
Jacobianos para Erro Fotométrico
Os Jacobianos para erro fotométrico seguem uma estrutura semelhante àqueles para erro de reprojeção, focando em como mudanças na pose da câmera e nos valores de brilho dos pixels influenciam o erro fotométrico.
Jacobianos para Erro de Posição Relativa
O Jacobiano do erro de posição relativa ajuda a otimizar os movimentos do robô ao revisitar locais. Ele avalia como mudanças nas posições relativas dos nós no grafo afetam a estimativa geral da pose.
Jacobianos para Erro de Reprojeção de Linha
Esses Jacobianos se concentram em como a representação de linhas no espaço afeta o erro ao projetar essas linhas na imagem.
Jacobianos para Erro de Medição de IMU
Os Jacobianos relacionados às medições da IMU ajudam a refinar a trajetória do robô, analisando como mudanças nos dados da IMU impactam a estimativa geral do estado no SLAM.
Derivação da Função de Erro
No SLAM, uma função de erro pode ser construída com base nos erros definidos. A função de erro representa o erro total no sistema SLAM e é crítica para a otimização.
- Cálculo do Erro: A função de erro é derivada tomando a diferença entre os valores observados e os valores previstos. Essa diferença pode ser modelada como seguindo uma distribuição normal.
- Estimação de Máxima Verossimilhança (MLE): O objetivo é encontrar parâmetros que minimizem o erro total. Isso envolve maximizar a verossimilhança dos dados observados dado o modelo previsto.
- Mínimos Quadrados Não Lineares: Como muitos termos no SLAM são não lineares, métodos de otimização não lineares são usados, como os algoritmos de Gauss-Newton e Levenberg-Marquardt. Esses métodos refinam iterativamente os parâmetros para minimizar o erro.
Processo de Otimização
O processo de otimização no SLAM geralmente segue esses passos:
- Definir a Função de Erro: O primeiro passo é definir claramente a função de erro com base nos erros discutidos.
- Linearização Aproximada: Usar a expansão de Taylor para aproximar a função de erro em torno das variáveis de estado atuais.
- Definir Derivadas como Zero: Encontrar os parâmetros ideais definindo a primeira derivada da função de erro como zero.
- Atualizações Iterativas: Atualizar os parâmetros usando os Jacobianos calculados até que a convergência seja alcançada. Isso significa que o erro evita grandes mudanças.
Exemplos Detalhados de Erros
Análise do Erro de Reprojeção
Quando se usa erro de reprojeção, uma câmera captura um ponto 3D projetado em sua imagem. A posição esperada é comparada com a posição realmente observada. Analisar essa diferença permite que o processo de otimização ajuste a posição da câmera para a precisão. A abordagem geralmente envolve iterar através de múltiplas poses de câmera e ajustá-las com base nos erros acumulados.
Análise do Erro Fotométrico
O erro fotométrico se concentra nos valores dos pixels em vez das localizações dos pontos. Comparando os níveis de brilho entre as imagens, o sistema SLAM ajusta a pose da câmera com base nas diferenças nos valores de pixel. A otimização ajustará a posição e a orientação da câmera para minimizar essas diferenças de brilho.
Análise do Erro de Posição Relativa
Quando se trata de loops no SLAM, o erro de posição relativa se torna fundamental. Esse erro depende de entender como uma pose se relaciona com outra, especialmente ao revisitar locais. Isso ajuda a refinar as estimativas de movimento e corrige erros potenciais de desvio que se acumulam ao longo do tempo.
Análise do Erro de Reprojeção de Linha
Em certos cenários, as linhas são cruciais para mapear ambientes, e seu erro de reprojeção se torna essencial. Ele avalia quão bem a projeção de uma linha 3D na imagem se alinha com os valores esperados. A otimização se concentrará em ajustar a linha e os parâmetros da câmera para o mapeamento mais preciso.
Análise do Erro de Medição de IMU
O erro de medição da IMU é único, pois lida com dados de movimento. À medida que o robô se move, ele coleta dados sobre sua velocidade e posição. Qualquer discrepância entre os valores esperados e medidos leva à otimização dos movimentos do robô. O processo inclui refinar estimativas com base no histórico dos dados da IMU e correções de viés.
Conclusão
A tecnologia SLAM integra vários tipos de erros para manter um alto nível de precisão na localização e mapeamento. Entender esses erros, junto com a otimização deles através dos Jacobianos, forma a base de sistemas SLAM eficazes. Ao dominar esses conceitos, os desenvolvedores podem criar soluções SLAM mais robustas e confiáveis para uma ampla gama de aplicações, melhorando as capacidades de robôs autônomos e outros sistemas que navegam em ambientes desconhecidos.
Título: Notes on Various Errors and Jacobian Derivations for SLAM
Resumo: This paper delves into critical concepts and meticulous calculations pertinent to Simultaneous Localization and Mapping (SLAM), with a focus on error analysis and Jacobian matrices. We introduce various types of errors commonly encountered in SLAM, including reprojection error, photometric error, relative pose error, and line reprojection error, alongside their mathematical formulations. The fundamental role of error as the discrepancy between observed and predicted values in SLAM optimization is examined, emphasizing non-linear least squares methods for optimization. We provide a detailed analysis of: - Reprojection Error: Including Jacobian calculations for camera poses and map points, highlighting both theoretical underpinnings and practical consequences. - Photometric Error: Addressing errors from image intensity variations, essential for direct method-based SLAM. - Relative Pose Error: Discussing its significance in pose graph optimization, especially in loop closure scenarios. The paper also presents extensive derivations of Jacobian matrices for various SLAM components such as camera poses, map points, and motion parameters. We explore the application of Lie theory to optimize rotation representations and transformations, improving computational efficiency. Specific software implementations are referenced, offering practical insights into the real-world application of these theories in SLAM systems. Additionally, advanced topics such as line reprojection errors and IMU measurement errors are explored, discussing their impact on SLAM accuracy and performance. This comprehensive examination aims to enhance understanding and implementation of error analysis and Jacobian derivation in SLAM, contributing to more accurate and efficient state estimation in complex environments.
Autores: Gyubeom Im
Última atualização: 2024-06-10 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2406.06422
Fonte PDF: https://arxiv.org/pdf/2406.06422
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://alida.tistory.com
- https://alida.tistory.com/51
- https://alida.tistory.com/60
- https://docs.google.com/document/d/1icPjUyT3nPvjZ1OVMtWp9afUtuJ4gXLJL-ex7A9FpNs/edit?fbclid=IwAR2VfhZ3js52zkFpZpJ5HZv_qQLPz7WCTBWkwn6IF1MmHa3Ksyhi5TQSAfY
- https://github.com/RainerKuemmerle/g2o/blob/master/g2o/types/sba/edge_project_xyz.cpp#L80
- https://github.com/RainerKuemmerle/g2o/blob/master/g2o/types/sba/edge_project_xyz.cpp#L82
- https://alida.tistory.com/52
- https://github.com/gaoxiang12/slambook/blob/master/ch8/directMethod/direct_sparse.cpp#L111
- https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L430
- https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseTracker.cpp#L320
- https://alida.tistory.com/16
- https://alida.tistory.com/9#org608a5f4-1
- https://alida.tistory.com/9
- https://docs.google.com/document/d/1s3kG2QG8qEIie1ZpDqXBP9TVYwKJJtHv2HHADYwoldw/edit?usp=drivesdk
- https://github.com/RainerKuemmerle/g2o/blob/master/g2o/types/sba/edge_se3_expmap.cpp#L55
- https://alida.tistory.com/12
- https://alida.tistory.com/52#lie-theory-based-optimization
- https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Line_defined_by_an_equation
- https://github.com/PeterFWS/Structure-PLP-SLAM/blob/main/src/PLPSLAM/optimize/g2o/se3/pose_opt_edge_line3d_orthonormal.h#L62
- https://github.com/PeterFWS/Structure-PLP-SLAM/blob/main/src/PLPSLAM/optimize/g2o/se3/pose_opt_edge_line3d_orthonormal.h#L81
- https://alida.tistory.com/64
- https://alida.tistory.com/61
- https://arxiv.org/pdf/1912.11986.pdf
- https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/vins_estimator/src/factor/integration_base.h#L180
- https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/vins_estimator/src/factor/imu_factor.h#L86
- https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/vins_estimator/src/factor/integration_base.h#L90
- https://github.com/NamDinhRobotics/proSLAM/blob/ae0af871e67d9df8dc2a64fa527602e02c5e4072/executables/trajectory_analyzer.cpp#L253
- https://github.com/JakobEngel/dso/blob/master/src/FullSystem/Residuals.cpp#L123
- https://alida.tistory.com/46#6.-code-review
- https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L424