Análise do código fonte ORB-SLAM2 (monocular) - processo de inicialização
1. Introdução ao ORB-SLAM2
Recursos do ORB-SLAM2:
Estrutura geral do ORB-SLAM2:
(1) Entrada:
Existem três modos para escolher: modo monocular, modo binocular e modo RGB-D.
(2) Rastreamento:
Após a inicialização ser bem-sucedida, ele primeiro selecionará o rastreamento do quadro-chave de referência e, na maioria das vezes, será o rastreamento do modelo de velocidade constante. Quando o rastreamento for perdido, o rastreamento de realocação será iniciado. Após o rastreamento acima , a pose inicial pode ser estimada e, em seguida, a pose é otimizada ainda mais pelo rastreamento do mapa local. Ao mesmo tempo, julgará se o quadro atual precisa ser criado como um quadro chave de acordo com as condições.
(3) Mapeamento local :
os quadros-chave de entrada vêm dos quadros-chave recém-criados no rastreamento. Para aumentar o número de pontos do mapa local, a correspondência de recursos entre os quadros-chave no mapa local será realizada novamente para gerar novos (
4) pontos do mapa: o
BA local otimizará a pose do quadro-chave e os pontos do mapa na visualização comum no ao mesmo tempo e, após a otimização, também removerá pontos de mapa imprecisos e quadros-chave redundantes.
(5) Fechamento do loop
Use o conjunto de palavras para consultar o conjunto de dados para detectar se o loop está fechado e calcule a pose Sim3 entre o quadro-chave atual e o quadro-chave candidato ao loop fechado. A escala é considerada apenas no modo monocular, e a escala é fixada em 1 no modo binocular ou RGBD. Em seguida, execute fusão de loop fechado e otimização de mapa de essência para tornar todas as poses de quadro-chave mais precisas.
(6) Global BA
otimiza todos os quadros-chave e seus pontos de mapa.
(7) Reconhecimento de localização
É necessário importar o dicionário treinado offline, que é construído pelo modelo visual de bolsa de palavras. Os novos quadros de imagem de entrada precisam ser convertidos em vetores de saco de palavras online primeiro, que são usados principalmente na correspondência de recursos, realocação e fechamento de loop.
(8) Mapa
O mapa é composto principalmente de pontos do mapa e quadros-chave. Os quadros-chave formam uma exibição comum de acordo com o número de pontos de exibição comuns e formam uma árvore abrangente de acordo com o relacionamento pai-filho.
2. Inicialização do sistema SLAM
Baixe o código-fonte do ORB-SLAM2 da Internet e abra a demonstração da câmera monocular.
(1) Entre na função principal:
carregue o arquivo de vídeo, que é usado para executar todo o processo ORB-SLAM2
(2) Construtor do sistema Slam:
(3) Carregar dicionário ORB
Carregue o dicionário ORB para nosso uso subsequente de correspondência de saco de palavras
(4) para inicializar o encadeamento de rastreamento
(5) Inicialize o mapeamento local e execute o thread de mapeamento local
(6) Inicialize a detecção de loopback e execute o thread de detecção de loopback
(7) Inicialize o renderizador **
3. Acompanhe a inicialização do thread
Vamos entrar e dar uma olhada nas operações específicas da inicialização do thread de rastreamento
(1) Leia os parâmetros internos da câmera no arquivo de configuração
(2) Obtenha os parâmetros da pirâmide de imagem e pontos de recurso
(3) Inicialize o extrator de ponto de recurso ORB
Veja como o extrator de recursos ORB é inicializado
1) Inicialize o tamanho da imagem de cada camada
Calcule a taxa de zoom de cada camada da imagem da pirâmide para a imagem original através do número de camadas da pirâmide e do fator de escala que inserimos
2) Inicializar o número de pontos de características extraídos de cada camada da imagem da pirâmide.Calcule
o número de pontos de características extraídos de cada camada da imagem da pirâmide através do número total de pontos de características a serem extraídos. Quanto maior o tamanho da imagem, mais pontos de recursos são extraídos e vice-versa
3) Inicialize os parâmetros relevantes do centróide de escala de cinza do ponto de recurso ORB. O
ponto-chave FAST original não possui informações de direção; portanto, quando a imagem é girada, o breve descritor também muda, tornando o ponto de recurso não robusto à rotação , então usamos gray O método do centróide é usado para obter a orientação dos pontos de recurso, de modo a obter a invariância de rotação.
Como calcular o centróide em tons de cinza?
Calcular centróide em tons de cinza dentro de um círculo
Por que usar um círculo para calcular o centróide em tons de cinza em vez de outras formas, como um quadrado?
No ORBSLAM, as coordenadas são primeiro giradas e depois os pontos são extraídos da imagem. Não é que a imagem é tirada primeiro e depois girada, o que fará com que as partes verdes e amarelas sejam pixels diferentes quando os pontos forem coletados abaixo.
ORB-SLAM2 inicializa os parâmetros relacionados ao centróide, conforme mostrado no código a seguir
Precisamos calcular o centróide da escala de cinza dos pontos característicos. De acordo com a fórmula, precisamos obter os valores da escala de cinza de todos os pixels do círculo para calcular o centróide da escala de cinza. Portanto, devemos primeiro determinar o limite do círculo e determinar quais pixels estão envolvidos no cálculo dentro do círculo e quais não estão envolvidos no cálculo. Aqui, primeiro calculamos o limite do quarto de círculo, depois por simetria e, finalmente, formamos um círculo. Finalmente, obtemos as informações do parâmetro de limite umax do círculo.
4. Inicialização do mapeamento local
5. Inicialização da detecção de loopback
Defina o número de quadros de loopback que precisam ser detectados continuamente na detecção de loopback para contar o loopback.