Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/light-curve/ceres-solver-rs
Rust bindings for Ceres Solver
https://github.com/light-curve/ceres-solver-rs
Last synced: 3 days ago
JSON representation
Rust bindings for Ceres Solver
- Host: GitHub
- URL: https://github.com/light-curve/ceres-solver-rs
- Owner: light-curve
- License: apache-2.0
- Created: 2023-01-18T22:14:28.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-07T22:45:12.000Z (3 months ago)
- Last Synced: 2025-01-02T00:16:06.037Z (18 days ago)
- Language: Rust
- Size: 125 KB
- Stars: 18
- Watchers: 1
- Forks: 4
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-rust-list - light-curve/ceres-solver-rs - curve/ceres-solver-rs?style=social"/> : Rust bindings for [Ceres Solver](http://ceres-solver.org/). (Scientific Computation)
- awesome-rust-list - light-curve/ceres-solver-rs - curve/ceres-solver-rs?style=social"/> : Rust bindings for [Ceres Solver](http://ceres-solver.org/). (Scientific Computation)
README
# `ceres-solver-rs`
## Rust bindings for [Ceres Solver](http://ceres-solver.org)[![Test](https://github.com/light-curve/ceres-solver-rs/actions/workflows/test.yml/badge.svg)](https://github.com/light-curve/ceres-solver-rs/actions/workflows/test.yml)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/light-curve/ceres-solver-rs/master.svg)](https://results.pre-commit.ci/latest/github/light-curve/ceres-solver-rs/master)
![docs.rs](https://img.shields.io/docsrs/ceres-solver)
![Crates.io](https://img.shields.io/crates/v/ceres-solver)```shell
cargo add ceres-solver --features=source
```Ceres Solver is a C++ library for large optimization problems.
It can be used to solve Non-linear Least Squares problems with constraints and general optimization problems.
Here we provide a Rust binding for this library.The earliest Ceres Solver version tested is 2.0, but the bindings may work with older versions
This project consists of three crates:
- `ceres-solver` is a safe Rust bindings
- `ceres-solver-sys` is an unsafe Rust bindings written with the usage of [`cxx`](https://lib.rs/crates/cxx)
- `ceres-solver-src` is an optional no-code crate to build and distribute a minimal static Ceres Solver libraryTo build Ceres Solver statically and link it to your project, use `source` Cargo feature, which would add `ceres-solver-src` dependency into your project.
Another Cargo feature is `v2_1`, which should be used when linked with Ceres Solver 2.1 or newer.### Status of the binding support
Current implementation of the binding is not complete.
The following list shows the status of the binding support:- Non-linear Least squares
- [x] `Problem` - basic class for NLLS, supports adding residual blocks, setting boundary conditions, marking parameter blocks to be constant/variable, and solving the problem
- [x] `CostFunction` - user provides both residual and Jacobian
- [ ] `SizedCostFunction` - same but with the residual vector shape is known at compile time
- [ ] `AutoDiffCostFunction` - user provides residual and Jacobian is computed by automatic differentiation
- [ ] `DynamicAutoDiffCostFunction` - same but with the residual vector shape is unknown at compile time
- [ ] `NumericDiffCostFunction` - user provides residual and Jacobian is computed by numerical differentiation
- [ ] `CostFunctionToFunctor` and `DynamicCostFunctionToFunctor` - adapter to use `CostFunction` as a mix of all other cost functions
- [ ] `ConditionedCostFunction` - adapter to use `CostFunction` with different conditioning
- [ ] `GradientChecker` - helper class to check the correctness of the Jacobian
- [ ] `NormalPrior` - changes a cost function to use a covariance matrix instead of a simple scalar product
- [x] `LossFunction` - a function applied to the squared norm of the residual vector, both custom and Ceres stack loss functions are supported
- [ ] `Manifold`, `AutoDiffManifold`
- [ ] `EvaluationCallback`
- Solver - `Solver` class itself is not implemented, but the following nested classes are supported:
- `Solver::Options`
- [x] Minimizer options
- [x] Line search options
- [x] Trust region options
- [x] Linear solver options
- [x] Preconditioner options
- [x] Sparse and dense linear algebra library selection
- [x] Setting of the number of threads
- [ ] Bundle adjustment options
- [x] Logging options
- [x] Validation of the options
- [ ] Callbacks
- `Solver::Summary`
- [x] Brief and full reports
- [x] Cost function evaluation statistics
- [ ] Time statistics
- [ ] Jets
- [ ] Covariance estimation
- [ ] General unconstrained minimizationPlease don't hesitate to create an issue to request prioritization of any functionality that may have been prioritized.