Diretório de artigos
Relatório de aprendizagem Openvslam
O que é Openvslam
conceito
OpenVSLAM (Visual SLAM) é uma biblioteca de localização visual e construção de mapas de código aberto (Visual Simultaneous Localization and Mapping, Visual SLAM). O objetivo é obter posicionamento de câmeras em tempo real e construção de mapas usando câmeras monoculares, câmeras binoculares, câmeras RGB-D ou outros sensores . Visual SLAM é uma tecnologia que permite que máquinas (como robôs, veículos ou drones) detectem informações visuais em um ambiente desconhecido para localizar e construir mapas em tempo real . Permite que os desenvolvedores aproveitem os dados de imagem capturados por uma câmera para posicionar a própria câmera e criar mapas do ambiente . Ele combina tecnologias básicas, como extração de recursos, correspondência de recursos, estimativa de pose e construção de mapas para obter posicionamento de câmera e construção de mapas precisos e em tempo real.
Características
- Suporte multisensor
- desempenho em tempo real
- Código aberto
- Fácil de usar
Instale e execute OpenVSLAM
Clonar código-fonte
git clone https://github.com/lp-research/openvslam
Instale bibliotecas dependentes
- Instale as dependências do sistema Ubuntu
sudo apt update -y
sudo apt upgrade -y --no-install-recommends
# basic dependencies
sudo apt install -y build-essential pkg-config cmake git wget curl unzip
# g2o dependencies
sudo apt install -y libatlas-base-dev libsuitesparse-dev
# OpenCV dependencies
sudo apt install -y libgtk-3-dev
sudo apt install -y ffmpeg
sudo apt install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
# eigen dependencies
sudo apt install -y gfortran
# other dependencies
sudo apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev
# (if you plan on using PangolinViewer)
# Pangolin dependencies
sudo apt install -y libglew-dev
- Instale a biblioteca de matrizes Eigen
cd /Desktop/study/dir
wget -q http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
tar xf 3.3.4.tar.bz2
rm -rf 3.3.4.tar.bz2
cd eigen-eigen-5a0156e40feb
mkdir -p build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
make -j4
sudo make install
- Instale a biblioteca OpenCV
cd /Desktop/study/dir
wget -q https://github.com/opencv/opencv/archive/3.4.0.zip
unzip -q 3.4.0.zip
rm -rf 3.4.0.zip
cd opencv-3.4.0
mkdir -p build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_CXX11=ON \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_JASPER=OFF \
-DBUILD_OPENEXR=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_TESTS=OFF \
-DWITH_EIGEN=ON \
-DWITH_FFMPEG=ON \
-DWITH_OPENMP=ON \
..
make -j4
sudo make install
- Instale o DBoW2
cd /Desktop/study/dir
git clone https://github.com/shinsumicco/DBoW2.git
cd DBoW2
mkdir build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
make -j4
sudo make install
- Instalar g2o
cd /Desktop/study/dir
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
git checkout 9b41a4ea5ade8e1250b9c1b279f3a9c098811b5a
mkdir build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_CXX_FLAGS=-std=c++11 \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_UNITTESTS=OFF \
-DBUILD_WITH_MARCH_NATIVE=ON \
-DG2O_USE_CHOLMOD=OFF \
-DG2O_USE_CSPARSE=ON \
-DG2O_USE_OPENGL=OFF \
-DG2O_USE_OPENMP=ON \
..
make -j4
sudo make install
- Instale a biblioteca Pangolin
cd /Desktop/study/dir
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout ad8b5f83222291c51b4800d5a5873b0e90a0cf81
mkdir build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
make -j4
sudo make install
- Compilar código fonte
cd /Desktop/study/openvslam
mkdir build && cd build
cmake \
-DBUILD_WITH_MARCH_NATIVE=ON \
-DUSE_PANGOLIN_VIEWER=ON \
-DUSE_SOCKET_PUBLISHER=OFF \
-DUSE_STACK_TRACE_LOGGER=ON \
-DBOW_FRAMEWORK=DBoW2 \
-DBUILD_TESTS=ON \
..
make -j4
Teste (o ambiente foi instalado com sucesso)
correr
Resumo de execuções com falha
O grande sucesso é a saída depois que alterei o código. Talvez a memória esteja cheia. Depois de ouvir o conselho do professor, aluguei um servidor. E depois de consultar as informações, descobri que pode ser instalado com um clique usando Docker.
Execute com sucesso
$ docker pull celinachild/openvslam:latest
$ docker run --gpus all -it --ipc=host --net=host --privileged -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw -e NVIDIA_DRIVER_CAPABILITIES=all celinachild/openvslam
# for mapping
$ ./run_video_slam -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_1/video.mp4 -c ./aist_living_lab_1/config.yaml --no-sleep --map-db map.msg
# for localization
$ ./run_video_localization -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_2/video.mp4 -c ./aist_living_lab_2/config.yaml --no-sleep --map-db map.msg
projeto de sistema
O design geral do sistema OpenVSLAM pode ser resumido nos seguintes aspectos principais:
- Modelo de câmera e entrada de sensor : OpenVSLAM suporta muitos tipos diferentes de modelos de câmera e entrada de sensor, incluindo câmeras monoculares, binoculares, RGB-D, etc.
- Extração e rastreamento de recursos : OpenVSLAM usa recursos visuais para localização e mapeamento. O módulo de extração e rastreamento de recursos é responsável por detectar pontos-chave na imagem e rastrear esses pontos de recursos entre quadros consecutivos.
- Odometria visual : Este módulo é responsável por calcular a estimativa de movimento da câmera entre quadros consecutivos para determinar a posição e atitude da câmera.
- Detecção de loopback : OpenVSLAM inclui um módulo de detecção de loopback para identificar quadros semelhantes obtidos em diferentes pontos no tempo e corrigir possíveis desvios.
- Mapeamento : O módulo de mapeamento converte pontos característicos e estimativas de movimento em mapas para representar a estrutura tridimensional do ambiente.
- Otimização : O módulo de otimização é usado para otimização global do mapa para melhorar a precisão do posicionamento e a consistência do mapa.
- Visualização e saída : OpenVSLAM também inclui ferramentas de visualização e módulos de saída para facilitar aos usuários a visualização de posicionamento e resultados de mapas.
Módulos e interfaces de função
O código do OpenVSLAM é basicamente dividido em vários módulos de acordo com o design do sistema acima, e cada módulo contém múltiplas funções e classes. Aqui estão alguns dos principais módulos e suas funções:
- Módulo FeatureExtractor : responsável pela extração de pontos característicos.
- Módulo inicializador : realiza operações de inicialização, como inicializar a odometria visual.
- Módulo de rastreamento : realiza rastreamento e posicionamento da câmera.
- Módulo LoopDetector : usado para detectar loopbacks.
- Módulo Mapa : gerencia a estrutura do mapa, incluindo quadros-chave e pontos do mapa.
- Módulo otimizador : realiza otimização global do mapa.
- Módulo do sistema : O núcleo do sistema, coordenando a operação de cada módulo.
Processo de chamada
O processo de chamada do OpenVSLAM geralmente envolve as seguintes etapas:
- Inicialize o sistema OpenVSLAM e selecione o tipo e configuração da câmera.
- Fornece entrada de sensor, como sequências de imagens ou fluxos de dados de câmeras.
- Execute extração e rastreamento de recursos e calcule a odometria visual.
- Durante a operação, o módulo de detecção de loopback pode ser acionado para detectar loopbacks.
- A otimização global do mapa é realizada regularmente para melhorar a consistência do mapa e a precisão do posicionamento.
- Resultados de posicionamento de saída e dados de mapa para visualização ou aplicação posterior.
fluxograma
Referências
lp-research/openvslam: OpenVSLAM Fork para LP-Research (github.com)
zm0612/openvslam-comments: Comente o código da versão do openvslam (github.com)
https://hub.docker.com/r/celinachild/openvslam
https://arxiv.org/abs/1910.01122 (artigo: OpenVSLAM: uma estrutura visual SLAM versátil)