Open Source Robotics

Uma coleção selecionada de projetos, ferramentas e software de robótica de código aberto de alta qualidade.

Bundle Adjustment

  • Também chamado: BA
  • Categoria: State estimation & navigation › Localisation
  • Tags: slam, nonlinear-optimization, computer-vision, 3d-reconstruction, state-estimation

Refinamento conjunto por mínimos quadrados não lineares das poses das câmeras e das posições 3D dos pontos de referência, e às vezes dos parâmetros da câmera, que minimiza o erro de reprojeção de todas as características observadas.

Definição

O bundle adjustment (BA) refina uma reconstrução 3D ajustando em conjunto as poses das câmeras e as posições dos pontos 3D, de modo que os pontos, projetados em cada imagem, caiam o mais perto possível de onde as características foram de fato observadas. A grandeza minimizada é a soma dos quadrados dos erros de reprojeção, as distâncias em pixels entre as posições previstas e medidas das características, geralmente ponderadas pela incerteza de medição e envolvidas em uma perda robusta como Huber ou Cauchy para limitar a influência de correspondências erradas. O nome se refere aos feixes (bundles) de raios de luz que ligam cada ponto 3D aos centros das câmeras que o observam; a otimização ajusta esses feixes até que eles concordem. A técnica vem da fotogrametria, e um tratamento moderno muito citado é a revisão de Triggs, McLauchlan, Hartley e Fitzgibbon (2000).

O problema é não linear por causa das rotações e da projeção perspectiva, por isso é resolvido iterativamente, em geral com Levenberg-Marquardt. Sua estrutura o torna tratável em grande escala: cada resíduo envolve apenas uma câmera e um ponto, então o sistema é esparso, e os pontos podem ser eliminados com o complemento de Schur, deixando um sistema muito menor apenas nas variáveis das câmeras. A solução só é definida a menos de uma liberdade de gauge, uma rotação e uma translação globais e, para uma única câmera sem outros sensores, uma escala global, por isso algumas variáveis são fixadas ou um prior é acrescentado. Os parâmetros intrínsecos e a distorção da câmera podem ser refinados ao mesmo tempo quando não estão bem calibrados.

Na robótica, o BA é o núcleo do structure from motion e do SLAM visual baseado em quadros-chave. O BA global otimiza o mapa inteiro e é executado offline ou após fechamentos de laço; o BA local ou de janela deslizante otimiza apenas os quadros-chave mais recentes e os pontos de referência que eles veem, mantendo os estados mais antigos fixos ou marginalizados, para que possa rodar em tempo real. Sistemas visuais-inerciais o estendem com fatores de pré-integração da IMU, e fatores de outros sensores podem ser acrescentados ao mesmo grafo de fatores. O BA difere da otimização de grafo de poses porque mantém os pontos de referência como variáveis e usa as medições brutas das imagens; um grafo de poses mantém apenas poses e restrições relativas, o que é mais rápido e menor, mas descarta informação.

Por que importa

O bundle adjustment é o que transforma trilhas ruidosas de características em trajetórias de câmera e mapas 3D precisos. A maioria dos pipelines de odometria visual, SLAM visual e fotogrametria depende dele, e a escolha entre BA global, local e de janela deslizante determina em grande parte o equilíbrio entre precisão e desempenho em tempo real nesses sistemas.

Principais aplicações

  • Structure from motion e fotogrametria
  • Back-ends de SLAM visual e visual-inercial baseados em quadros-chave
  • Odometria visual de janela deslizante em drones, veículos e robôs subaquáticos
  • Refinamento da calibração multicâmera e câmera-LiDAR
  • Reconstrução 3D para inspeção, mapeamento e gêmeos digitais

Na prática

Em um sistema SLAM visual-inercial em um robô subaquático ou aéreo, um novo quadro-chave é criado toda vez que a câmera se move o suficiente. Um otimizador de janela deslizante então refina as poses dos quadros-chave mais recentes, suas velocidades e os vieses da IMU, e todos os pontos de referência vistos nesses quadros-chave, usando fatores de reprojeção das características rastreadas mais fatores de IMU pré-integrados entre quadros-chave. Os quadros-chave mais antigos são marginalizados em um prior para que a janela mantenha um tamanho fixo. Uma perda de Huber limita o efeito de correspondências erradas causadas por objetos em movimento ou reflexos. Quando um fechamento de laço é detectado, uma otimização de grafo de poses ou um BA global completo corrige a deriva ao longo de toda a trajetória, geralmente em uma thread em segundo plano.

Equívocos comuns

  • Bundle adjustment é o mesmo que otimização de grafo de poses — o BA também otimiza as posições dos pontos de referência em relação às medições das imagens, enquanto um grafo de poses mantém apenas poses e restrições relativas
  • O BA conserta uma inicialização ruim — ele é um otimizador local e precisa de uma estimativa inicial razoável de poses e pontos para convergir para a resposta certa
  • O BA monocular recupera a escala real — sem outro sensor ou uma dimensão conhecida, a escala não é observável e pode derivar
  • O BA serve apenas para reconstrução offline — as variantes local e de janela deslizante rodam em tempo real em muitos sistemas SLAM

Quem deve saber

  • Engenheiros de SLAM visual e odometria visual
  • Engenheiros de visão computacional e fotogrametria
  • Engenheiros de estimação de estado que fundem câmeras com outros sensores
  • Estudantes de robótica que estudam mapeamento e localização

Tecnologias relacionadas

  • Structure from Motion
  • Algoritmo de Levenberg-Marquardt (Levenberg-Marquardt Algorithm)
  • Ceres Solver
  • g2o
  • GTSAM
  • COLMAP

Termos relacionados

  • Pose Graph Optimization
  • Factor Graph
  • Keyframe
  • SLAM
  • Visual-Inertial Odometry
  • Camera Intrinsics

Projetos relacionados

  • LingBot-Map: Streaming 3D reconstruction from one camera: pose and depth for every frame, live
  • oomwoo: Open-source DIY robot vacuum: 3D-printed, ROS2 + 2D LiDAR, fully local.
  • Cartographer: Google's real-time 2D and 3D SLAM system for multi-platform robotics
  • OpenDroneMap: Open-source photogrammetry toolkit that turns drone images into maps and 3D models
  • FAST-LIVO2: Fast, direct LiDAR-inertial-visual odometry from HKU-MARS, published in IEEE T-RO
  • DimOS: Python robotics runtime with agents, SLAM and teleop, no ROS required

Vídeos

  • Bundle Adjustment - 5 Minutes with Cyrill: Cyrill Stachniss
  • The Basics about Bundle Adjustment (Cyrill Stachniss): Cyrill Stachniss

Este site requer JavaScript. Por favor, habilite o JavaScript para explorar nossos projetos de robótica.