Análise do código fonte ORB-SLAM2 (monocular) - processo de inicialização

Análise do código fonte ORB-SLAM2 (monocular) - processo de inicialização

1. Introdução ao ORB-SLAM2

Recursos do ORB-SLAM2:
insira a descrição da imagem aqui

Estrutura geral do ORB-SLAM2:
insira a descrição da imagem aqui

(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:
insira a descrição da imagem aqui
carregue o arquivo de vídeo, que é usado para executar todo o processo ORB-SLAM2
(2) Construtor do sistema Slam:
insira a descrição da imagem aqui

(3) Carregar dicionário ORB
insira a descrição da imagem aqui

Carregue o dicionário ORB para nosso uso subsequente de correspondência de saco de palavras
(4) para inicializar o encadeamento de rastreamento
insira a descrição da imagem aqui

(5) Inicialize o mapeamento local e execute o thread de mapeamento local
insira a descrição da imagem aqui

(6) Inicialize a detecção de loopback e execute o thread de detecção de loopback
insira a descrição da imagem aqui

(7) Inicialize o renderizador **
insira a descrição da imagem aqui

3. Acompanhe a inicialização do thread

insira a descrição da imagem aqui

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
insira a descrição da imagem aqui

(2) Obtenha os parâmetros da pirâmide de imagem e pontos de recurso
insira a descrição da imagem aqui

(3) Inicialize o extrator de ponto de recurso ORB
insira a descrição da imagem aqui

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
insira a descrição da imagem aqui

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
insira a descrição da imagem aqui

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?
insira a descrição da imagem aqui

Calcular centróide em tons de cinza dentro de um círculo
insira a descrição da imagem aqui

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.
insira a descrição da imagem aqui

ORB-SLAM2 inicializa os parâmetros relacionados ao centróide, conforme mostrado no código a seguir
insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

insira a descrição da imagem aqui

5. Inicialização da detecção de loopback

insira a descrição da imagem aqui
insira a descrição da imagem aqui

Defina o número de quadros de loopback que precisam ser detectados continuamente na detecção de loopback para contar o loopback.

Acho que você gosta

Origin blog.csdn.net/weixin_43391596/article/details/129692085
Recomendado
Clasificación