Fast Incremental Bundle Adjustment with Covariance Recovery

1. SLAM++ (v2.3)

2. 版本特性

  1. SLAM++ 是增量非线性最小二乘的极简实现,包含在稀疏块矩阵上快速实现线性代数。 它旨在用于 3D 重建或机器人技术。
  2. SLAM++ 2.2 候选版本 4
    这是一个维护版本,添加了一些功能,例如强大的成本函数、几何形状和对 AVX 系列指令集的支持以及对 ARM 和 NEON 的更好支持。 我们的基准测试显示捆绑调整问题的运行时间减少了 40%(在 x86_64 CPU 上)。
  3. SLAM++ 2.1
    具有数据关联示例的 SLAM++ 紧凑姿势 SLAM - 实现了一种算法,该算法保持 SLAM 的紧凑表示。 这是基于计算两个度量:由不确定性加权的姿势之间的相对距离和每个边缘的互信息。 该算法还提供了一种用于回环检测的方案。 这在我们最新的论文中有所描述。 下图说明了完整解决方案和紧凑解决方案之间的差异。 我们表明我们可以在不牺牲太多精度的情况下提高速度。

3. SLAM++增量求解器的优化

SLAM++ 是增量非线性最小二乘求解器的有效实现。 它是用 C++ 编写的,由于它利用块结构来解决问题并提供非常快速的解决方案来在迭代非线性求解器中操作块矩阵,因此速度非常快。 它目前依赖于 Eigen 和 CSparse 或 CHOLMOD,但我们正在努力使其更加独立。


Highly Efficient Compact Pose SLAM with SLAM++

BA 参数化 ACRA - 测试来自运动估计的结构的几个参数化。 实现了三种类型的点参数化:欧几里得坐标、反深度和反距离。 点也可以用世界坐标或相对于参考相机来表示。 实现了几种相机顶点类型:SE(3)、带有校准参数的 SE(3) 和集成了比例参数的 Sim(3)。 这直接影响增量求解的收敛性; 在下图中,这很容易看出(橙色顶点的更新幅度较高,绿色和蓝色顶点的更新幅度较低)。


上图显示了标准图 SLAM 数据集的时间比较(我们的实现为红色)。 它目前支持 2D 和 3D 数据集。 这些是增量时间(更新和解决每个新变量),因为这是我们的实现带来优势的地方。

4. 具体优化特性

  • blazing-fast marginal covariance recovery. (极快的边际协方差恢复。)
  • added native support for hypergraphs (the current version supports hypergraphs, but does not contain any hypergraph edge implementations)添加了对超图的原生支持(当前版本支持超图,但不包含任何超图边缘实现)
  • improved Lambda solver for faster bundle adjustment( 改进的 Lambda 求解器,用于更快的捆绑调整)
  • some ability to remove edges and vertices from the system(从系统中删除边和顶点的一些能力)
  • constant vertices
  • robust cost functions
  • support for GPU acceleration
  • we are developing a computer-vision frontend (which is OpenCV compatible but OpenCV-free, and will come with a plenty of cool demos)(我们正在开发一个计算机视觉前端(它与 OpenCV 兼容,但不含 OpenCV,并且会附带大量很酷的演示))

5. Commandline reference

To get full commandline reference, simply use the --help switch:
General use:
./SLAM_plus_plus -i --no-detailed-timing

To run the pose-only datasets more quickly:
./SLAM_plus_plus -i --pose-only --no-detailed-timing

To run incrementally:
./SLAM_plus_plus -lsp -i --no-detailed-timing

This generates initial.txt and initial.tga, a description and image of the
system before the final optimization, and solution.txt and solution.tga, a
description and image of the final optimized system (unless --no-bitmaps
is specified).

–help|-h displays this help screen
–verbose|-v displays verbose output while running (may slow down,
especially in windows and if running incrementally)
–silent|-s suppresses displaying verbose output
–no-show|-ns doesn’t show output image (windows only)
–no-commandline doesn’t echo command line
–no-flags doesn’t show compiler flags
–no-detailed-timing doesn’t show detailed timing breakup (use this, you’ll
get confused)
–no-bitmaps doesn’t write bitmaps initial.tga and solution.tga (neither
the text files)
–pose-only|-po enables optimisation for pose-only slam (will warn and ignore
on datasets with landmarks (only the first 1000 lines checked
in case there are landmarks later, it would segfault))
–use-old-code|-uogc uses the old CSparse code (no block matrices in it)
–a-slam|-A uses A-SLAM (default)
–lambda|-,\ uses lambda-SLAM (preferred batch solver)
–l-slam|-L uses L-SLAM
–fast-l-slam|-fL uses the new fast L-SLAM solver (preferred incremental solver)
–infile|-i specifies input file ; it can cope with
many file types and conventions
–parse-lines-limit|-pll sets limit of lines read from the input file
(handy for testing), note this does not set limit of vertices
nor edges!
–linear-solve-period|-lsp sets period for incrementally running linear
solver (default 0: disabled)
–nonlinear-solve-period|-nsp sets period for incrementally running
non-linear solver (default 0: disabled)
–max-nonlinear-solve-iters|-mnsi sets maximal number of nonlinear
solver iterations (default 10)
–nonlinear-solve-error-thresh|-nset sets nonlinear solve error threshold
(default 20)
–max-final-nonlinear-solve-iters|-mfnsi sets maximal number of final
optimization iterations (default 5)
–final-nonlinear-solve-error-thresh|-fnset sets final nonlinear solve
error threshold (default .01)
–run-matrix-benchmarks|-rmb runs block
matrix benchmarks (benchmark-name is name of a folder with
UFLSMC benchmark, benchmark-type is one of alloc, factor, all)
–run-matrix-unit-tests|-rmut runs block matrix unit tests

6. example

6.1 victoria-park




arning: the 'LANDMARK' token is ambiguous: interpreted as XY landmark (rather than RB)
warning: XY landmark edge occured: covariance conversion to RB not performed (chi2 will be incorrect)
warning: the 'LANDMARK' token is ambiguous: interpreted as XY landmark (rather than RB)
warning: XY landmark edge occured: covariance conversion to RB not performed (chi2 will be incorrect)

done. it took 00:00:00.72327 (0.723271 sec)
solver took 142 iterations
solver spent 0.054465 seconds in parallelizable section (disparity 0.040233 seconds)
out of which:
	   ,\: 0.035888
	  rhs: 0.018577
solver spent 0.628573 seconds in serial section
out of which:
	 chol: 0.615195
	 norm: 0.000574
	v-upd: 0.012805
denormalized chi2 error: 114.53

7. Reterence

  • V Ila, L Polok, M Solony and K Istenic, “Fast Incremental Bundle Adjustment with Covariance Recovery”, proceedings of the International Conference on 3D Vision (3DV). Qingdao, China, 2017.
  • V Ila, L Polok, M Šolony and P Svoboda, “SLAM++. A Highly Efficient and Temporally Scalable Incremental SLAM Framework”, International Journal of Robotics Research, 2017.
  • L Polok, V Ila and P. Smrž, “3D Reconstruction Quality Analysis and Its Acceleration on GPU Clusters,” in proceedings of European Signal Processing Conference 2016. Budapest, 2016.
  • L Polok, V Lui, V Ila, T Drummond, R Mahony, “The Effect of Different Parameterisations in Incremental Structure from Motion,” proceedings of the Australian Conference on Robotics and Automation, Australia, 2015.
  • L. Polok and P. Smrz, “Increasing Double Precision Throughput on NVIDIA Maxwell GPUs,” proceedings of the 24th High Performance Computing Symposium, Pasadena / Los Angeles, USA, 2016.
  • S. Pabst, H. Kim, L. Polok, V. Ila, T. Waine, A. Hilton, J. Clifford and P. Smrz, “Jigsaw - Multi-Modal Big Data Management in Digital Film Production,” SIGGRAPH (poster), Los Angeles, 2015.
  • L. Polok, S. Pabst, J. Clifford, “A GPU-Accelerated Bundle Adjustment Solver,” GPU Technology Conference, 2015, San Diego, USA, 2015.
  • M. Solony, E. Imre, V. Ila, L. Polok, H. Kim and P. Zemcik, “Fast and Accurate Refinement Method for 3D Reconstruction from Stereo Spherical Images,” proceedings of the 10th International Conference on Computer Vision Theory and Applications. Berlin: Institute of Electrical and Electronics Engineers, Germany, 2015.
  • V. Ila, L. Polok, M. Solony, P. Zemcik, P. Smrz, “Fast covariance recovery in incremental nonlinear least square solvers,” proceedings of IEEE International Conference on Robotics and Automation (ICRA), Seatle, USA, 2015.
  • L. Polok, V. Ila, P. Smrz, “Fast Sparse Matrix Multiplication on GPU,” 23rd High Performance Computing Symposia, Alexandria, USA, 2015
  • L. Polok, V. Ila, P. Smrz, “Fast Radix Sort for Sparse Linear Algebra on GPU,” 22nd High Performance Computing Symposia, Tampa, USA, 2014
  • L. Polok, V. Ila, M. Solony, P. Smrz and P. Zemcik, “Incremental Block Cholesky Factorization for Nonlinear Least Squares in Robotics,” in Proceedings of Robotics: Science and Systems 2013, MIT Press, 2013
  • L. Polok, M. Solony, V. Ila, P. Smrz and P. Zemcik, “Incremental Cholesky Factorization for Least Squares Problems in Robotics,” in Proceedings of The 2013 IFAC Intelligent Autonomous Vehicles Symposium, IFAC, 2013.
  • L. Polok, M. Solony, V. Ila, P. Zemcik, and P. Smrz, “Efficient implementation for block matrix operations for nonlinear least squares problems in robotic applications,” in Proceedings of the IEEE International Conference on Robotics and Automation, IEEE, 2013.
  • L. Polok, V. Ila and P. Smrz, “Cache Efficient Implementation for Block Matrix Operations,” in Proceedings of the 21st High Performance Computing Symposia (HPC’13), SCS, 2013.