Os1
1
OrbSlam2 documentado y modificado
|
ORB-SLAM2 es la versión 2 de ORB-SLAM, publicada al año siguiente del original por los mismos autores. Se trata de una prueba de concepto, una aplicación que demuestra el funcionamiento de ORB-SLAM. La aplicación tiene una interfaz de usuario mínima y opcional. ORB-SLAM2 está pensado para ser usado como parte de un proyecto mayor, conectado por ROS.
Para poder compilar este código con Eclipse CDT, se requiere tener instalado OpenCV 2.4.3 o superior, incluyendo 3.1, Pangolin, Blas, Lapack, Eigen3. Consultar https://github.com/raulmur/ORB_SLAM2 2.Prerequisites. En Eclipse se deben cargar estas librerías (Properties for os1, Settings, g++ Linker Libraries):
Carpeta de Eigen en Properties for os1, c/c++ General Settings, Path and Symbols, Includes: /usr/local/include/eigen3
Carpeta de Eigen en Properties for os1, c/c++ General Settings, Path and Symbols, Symbols, G++:
Como es habitual, la ejecución inicia por main, que:
entra en el bucle principal while(true) que ejecutará el proceso entero por cada cuadro de la cámara
Este bucle principal es un algoritmo largo, separado en métodos por prolijidad, la mayoría de los cuales se invocan desde un único lugar. La secuencia de invocaciones es:
ORB-SLAM2 tiene un archivo .h y otro .cc para cada clase, todas declaradas en el espacio de nombres ORB-SLAM2. Adopta los siguientes sufijos para nombrar las propiedades miembros de clases, explicitando su tipo:
Ejemplos:
Hay varios tipos de clase:
Cada clase se define en su propio archivo .h homónimo, excepto ORBExtractor.h define también ExtractorNode. El único archivo include/ *.h que no define una clase es ORBVocabulary.h, que contiene un simple typedef.
La carpeta Thirparty contiene versiones podadas de DBoW2 y g2o con estilos propios.
A partir de cada imagen de la cámara se crea un objeto Frame efímero.
Usualmente perduran el cuadro actual y el anterior solamente, habiendo sólo dos instancias de esta clase simultáneamente en el sistema.
El objeto Frame tiene los puntos singulares detectados, su versión antidistorsionada, sus descriptores y los puntos del mapa asociados.
La clase proporciona los métodos para su construcción a partir de la imagen.
Hay sólo tres instancias de esta clase:
Mientras las instancias mCurrentFrame y mLastFrame perduran, su contenido no lo hace, sino que rota. Cada nueva imagen se vuelca sobre mCurrentFrame, reemplazando a la anterior.
Los KeyFrame se crean a partir de un Frame cuando el sistema entiende que éste aporta información al mapa.
Un KeyFrame es de larga vida, es la manera en que un Frame se convierte en parte del mapa.
Cuando se crea un KeyFrame, copia la información principal del Frame actual, y computa más datos, como por ejemplo los BoW de cada descriptor.
Los keyframes se registran en Map::mspKeyFrames.
La documentación de KeyFrame explica la notación de matrices de pose utilizadas en KeyFrame y en Frame.
Punto 3D del mapa del mundo. No sólo tiene las coordenadas del punto, sino también la lista de KeyFrames que lo observan, la lista de descriptores asociados al punto (un descriptor por cada KeyFrame que lo observa), entre otros.
Los mapPoints se registran en Map::mspMapPoints.
Mapa del mundo. Tiene una lista de MapPoints, una lista de KeyFrames, y métodos para la administración del mapa.
ORB-SLAM tiene cuatro hilos paralelos, cada uno con su propio bucle.