All Projects → izhengfan → ba_demo_ceres

izhengfan / ba_demo_ceres

Licence: BSD-3-Clause license
Bundle adjustment demo using Ceres Solver, with customized cost function and local parameterization on SE(3)

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to ba demo ceres

rgbd ptam
Python implementation of RGBD-PTAM algorithm
Stars: ✭ 65 (-56.67%)
Mutual labels:  slam, bundle-adjustment
G2o
g2o: A General Framework for Graph Optimization
Stars: ✭ 2,082 (+1288%)
Mutual labels:  slam, graph-optimization
PoseGraph-Ceres
An offline tool for pose-graph-optimization.
Stars: ✭ 57 (-62%)
Mutual labels:  slam, ceres-solver
Iros2020 Paper List
IROS2020 paperlist by paopaorobot
Stars: ✭ 247 (+64.67%)
Mutual labels:  slam
so dso place recognition
A Fast and Robust Place Recognition Approach for Stereo Visual Odometry using LiDAR Descriptors
Stars: ✭ 52 (-65.33%)
Mutual labels:  slam
r3live
A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package
Stars: ✭ 1,355 (+803.33%)
Mutual labels:  slam
Robotics-Resources
List of commonly used robotics libraries and packages
Stars: ✭ 71 (-52.67%)
Mutual labels:  slam
Iscloam
Intensity Scan Context based full SLAM implementation for autonomous driving. ICRA 2020
Stars: ✭ 232 (+54.67%)
Mutual labels:  slam
awesome-mobile-robotics
Useful links of different content related to AI, Computer Vision, and Robotics.
Stars: ✭ 243 (+62%)
Mutual labels:  slam
SLAM-application
LeGO-LOAM, LIO-SAM, LVI-SAM, FAST-LIO2, Faster-LIO, VoxelMap, R3LIVE application and comparison on Gazebo and real-world datasets. Installation and config files are provided.
Stars: ✭ 258 (+72%)
Mutual labels:  slam
omnimapper
A Modular Multimodal Mapping Framework
Stars: ✭ 86 (-42.67%)
Mutual labels:  slam
tx2 fcnn node
ROS node for real-time FCNN depth reconstruction
Stars: ✭ 102 (-32%)
Mutual labels:  slam
li slam ros2
ROS2 package of tightly-coupled lidar inertial ndt/gicp slam
Stars: ✭ 160 (+6.67%)
Mutual labels:  slam
DSP-SLAM
[3DV 2021] DSP-SLAM: Object Oriented SLAM with Deep Shape Priors
Stars: ✭ 377 (+151.33%)
Mutual labels:  slam
Deep Learning Interview Book
深度学习面试宝典(含数学、机器学习、深度学习、计算机视觉、自然语言处理和SLAM等方向)
Stars: ✭ 3,677 (+2351.33%)
Mutual labels:  slam
simple-sfm
A readable implementation of structure-from-motion
Stars: ✭ 19 (-87.33%)
Mutual labels:  slam
Minisam
A general and flexible factor graph non-linear least square optimization framework
Stars: ✭ 246 (+64%)
Mutual labels:  slam
Awesome-Self-Driving
an awesome list of self-driving algorithms, software, tools
Stars: ✭ 74 (-50.67%)
Mutual labels:  slam
JuliaAutonomy
Julia sample codes for Autonomy, Robotics and Self-Driving Algorithms.
Stars: ✭ 21 (-86%)
Mutual labels:  slam
awesome-ros-mobile-robot
😎 A curated list of awesome mobile robots study resources based on ROS (including SLAM, odometry and navigation, manipulation)
Stars: ✭ 284 (+89.33%)
Mutual labels:  slam

ba_demo_ceres

Bundle adjustment demo using Ceres Solver

Also read a blog post.

Dependencies

  • Ceres Solver

Introduction

This project implements a simple bundle adjustment problem using Cere Solver to solve it.

The constraints are defined with customized cost functions and self-defined Jacobians.

Two versions of on-manifold local parameterization of SE3 poses (both of which using 6-dof Lie algebra for updating) are used, including

  • quaternion + translation vector (7d), and
  • rotation vector + translation vector (6d)

Please check parametersse3.hpp parametersse3.cpp for the local parameterization implementation.

Jacobians

For convenience in expression, we denote the Jacobian matrix of the error function w.r.t. the Lie group by J_err_grp, the Jacobian matrix of the Lie group w.r.t. the local Lie algebra increment by J_grp_alg, and the Jacobian matrix of the error function w.r.t. the local Lie algebra increment by J_err_alg.

In many on-manifold graph optimization problems, only J_err_alg are required. However, in Ceres Solver, one can only seperately assign J_err_grp and J_grp_alg, but cannot directly define J_err_alg. This may be redundant and cost extra computational resources:

  • One has to derive the explicit Jacobians equations of both J_err_grp and J_grp_alg.
  • The solver may spend extra time in computing J_err_grp and J_grp_alg, and multiplying J_err_grp and J_grp_alg to get J_err_alg.

Therefore, for convenience, we use a not-that-elegant but effective trick. Let's say that the error function term is of dimension m, the Lie group N, and the Lie algebra n. We define the leading m*n block in J_err_grp to be the actual J_err_alg, with other elements to be zero; and define the leading n*n block in J_grp_alg to be identity matrix, with other elements to be zero. Thus, we are free of deriving the two extra Jacobians, and the computational burden of the solver is reduced -- although Ceres still has to multiply the two Jacobians, the overall computational process gets simpler.

Other tips

One advice for self-defined Jacobians: do not access jacobians[0] and jacobians[1] in the meantime, which may cause seg-fault.

License

BSD New

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].