Skip to main content

apex_solver/
lib.rs

1//! # Apex Solver
2//!
3//! A comprehensive Rust library for nonlinear least squares optimization, specifically designed
4//! for computer vision applications such as bundle adjustment, graph-based pose optimization, and SLAM.
5//!
6//! ## Features
7//!
8//! - **Multiple Optimization Algorithms**: Gauss-Newton, Levenberg-Marquardt, and Dog Leg solvers
9//! - **Flexible Linear Algebra Backend**: Support for both Sparse Cholesky and Sparse QR decomposition
10//! - **Configurable Solver System**: Easy-to-use configuration system for algorithm and backend selection
11//! - **High Performance**: Built on the faer linear algebra library for optimal performance
12//! - **Comprehensive Testing**: Extensive test suite ensuring correctness and reliability
13//!
14//!
15//! ## Solver Types
16//!
17//! - **Gauss-Newton**: Fast convergence for well-conditioned problems
18//! - **Levenberg-Marquardt**: Robust algorithm with adaptive damping
19//! - **Dog Leg**: Trust region method combining Gauss-Newton and steepest descent
20//!
21//! ## Linear Algebra Backends
22//!
23//! - **Sparse Cholesky**: Efficient for positive definite systems
24//! - **Sparse QR**: More robust for rank-deficient or ill-conditioned systems
25
26// Re-export workspace crates
27pub use apex_camera_models;
28pub use apex_io;
29pub use apex_manifolds;
30
31// Create module aliases for backward compatibility
32pub mod manifold {
33    pub use apex_manifolds::*;
34}
35
36pub mod camera_models {
37    pub use apex_camera_models::*;
38}
39
40// Re-export commonly used types from workspace crates
41pub use apex_camera_models::{
42    CameraModel, CameraModelError, DoubleSphereCamera, EucmCamera, FovCamera, KannalaBrandtCamera,
43    PinholeCamera, RadTanCamera, UcmCamera,
44};
45
46// Re-export optimization configuration types from factors module
47pub use apex_io::{BalLoader, G2oLoader, Graph, ToroLoader};
48pub use apex_manifolds::{
49    Interpolatable, LieGroup, ManifoldType, Tangent, rn::Rn, se2::SE2, se3::SE3, so2::SO2, so3::SO3,
50};
51pub use factors::{
52    BundleAdjustment, LandmarksAndIntrinsics, OnlyIntrinsics, OnlyLandmarks, OnlyPose,
53    OptimizeParams, PoseAndIntrinsics, SelfCalibration,
54};
55
56// Local modules
57pub mod core;
58pub mod error;
59pub mod factors;
60pub mod linalg;
61pub mod linearizer;
62pub mod logger;
63pub mod observers;
64pub mod optimizer;
65pub mod prelude;
66
67// Re-export core types
68pub use core::variable::Variable;
69pub use error::{ApexSolverError, ApexSolverResult, ErrorLogging};
70
71// Re-export factor types
72pub use core::noise::{InformationRepair, NoiseModel, RepairStrategy, RepairSummary};
73pub use factors::Factor;
74pub use factors::pose::{BetweenFactor, EuclideanPriorFactor, PriorFactor};
75pub use factors::visual::ProjectionFactor;
76
77// Re-export linear algebra types
78pub use linalg::{
79    Damping, DenseCholeskySolver, DenseMode, DenseQRSolver, ExplicitDenseSchur,
80    ExplicitSparseSchur, ImplicitSparseSchur, JacobianMode, LinearSolver, LinearSolverType,
81    LinearizationMode, SparseCholeskySolver, SparseMode, SparseQRSolver,
82};
83
84// Re-export logger
85pub use logger::{init_logger, init_logger_with_directives, init_logger_with_level};
86
87// Re-export optimizer types
88pub use optimizer::{
89    DogLeg, GaussNewton, LevenbergMarquardt, OptObserver, OptObserverVec, Optimizer, OptimizerType,
90    levenberg_marquardt::{DampingUpdate, LevenbergMarquardtConfig},
91};
92
93#[cfg(feature = "visualization")]
94pub use observers::{RerunObserver, VisualizationConfig};