Introduction
Caesar is a modern robotic framework for localization and mapping, reducing the barrier of entry for Simultaneous Localization and Mapping (SLAM). Caesar attempts to address a number of issues that arise in normal SLAM solutions - solving under-defined systems, inference with non-Gaussian measurement distributions, simplifying factor creation, and centralizing factor-graph persistence with databases. Caesar started as part of the thesis "Multi-modal and Inertial Sensor Solutions for Navigation-type Factor Graphs" [1.2].
Focus Area
This project focuses on the open development and progression to a public, stable, growing and usable inference library suited to data-fusion aspects of device navigation.
The Caesar Framework
Caesar
Caesar.jl is the "umbrella" framework for other dedicated algorithmic/supporting packages that are implemented in Julia (and JuliaPro).
RoME.jl/IncrementalInference.jl/ApproxManifoldProducts.jl
Critically, this package can operate in the conventional SLAM manner, using local memory (dictionaries), or alternatively distribute around a persisted FactorGraph
through a graph database using CloudGraphs.jl, as discussed in literature here [1.3]. A variety of plotting, 3D visualization, serialization, LCM middleware, and analysis tools come standard. Please see internal packages, Robot Motion Estimate RoME.jl and back-end solver IncrementalInference.jl.
Details about the accompanying packages:
- IncrementalInference.jl supplies the algebraic logic for factor graph inference with Bayes tree and depends on several packages itself.
- RoME.jl introduces nodes and factors that are useful to robotic navigation.
Visualization (Arena.jl/RoMEPlotting.jl)
Caesar visualization (plotting of results, graphs, and data) is provided by 2D and 3D packages respectively:
- RoMEPlotting.jl are a set of scripts that provide MATLAB style plotting of factor graph beliefs, mostly supporting 2D visualization with some support for projections of 3D;
- Arena.jl package, which is a collection of 3D visualization tools.
Multilanguage Interops: Caesar SDKs and APIs
The Caesar framework is not limited to direct Julia use. See the multi-language page for details.
Also see Frequently Asked Questions for more.
A Few Highlights
Work In Progress: (must be updated, 2019Q1)
The Caesar framework has the following features:
- Factor-graph representation of pose and sensor data
- Localization using Multi-modal iSAM
- Multi-core inference supporting
Pose2, Pose3, Point2, Point3, Multi-modal (multi-hypothesis), IMU preintegration, KDE density, intensity map, partial constraints, null hypothesis, etc
- Multi-core inference supporting
- Multi-modal and non-parametric representation of constraints
- Gaussian distributions are but one of the many representations of measurement error
- Simple, extensible framework for creation of new factor types
- Multi-hypothesis representation in the factor-graph
- Local in-memory solving on the device as well as database-driven centralized solving
- Fixed-lag, continuous operation as well as off-line batch solving
Origins in Fundamental Research
See related works on the literature page.
Future Directions
Many future directions are in the works โ including fundamental research, implementation quality/performance, and system integration. Please see/open issues for specific requests or adding comments to an ongoing discussion.
Next Steps
For installation steps, examples/tutorials, and concepts please refer to the following pages:
- Getting Started
- Local Dependencies
- Install "Just the ZMQ/ROS Runtime Solver" (Linux)
- The "I Know Julia" Installation (TL;DR)
- The "I want a Development Environment from Scratch" Install
- Setup Juno IDE Environment
- Julia Packages
- Install Visualization Utils (e.g. Arena.jl)
- RoMEPlotting.jl for 2D plots
- Contributing, Issues, or Comments
- Caesar Concepts
- Getting Started with Caesar
- Examples
- Basics
- Continuous Scalar
- Hexagonal 2D
- Fixed-Lag Solving - Hexagonal2D Revisited
- A Under-Constrained Solution (unforced multimodality)
- Uncertain Data Associations, a Multi-Modal Solution (forced multi-hypothesis)
- Adding Factors - Simple Factor Design
- Adding Factors - DynPose Factor
- Application Examples and Demos
- Probabilistic Data Association (Uncertain loop closures)
- More Examples
- Function Reference
Future
This package is a work in progress. Please file issues here as needed to help resolve problems for everyone! We are tracking improvements and new endeavors in the Issues section of this repository.
In the future, Caesar will likely interact more closely with repos such as:
JuliaRobotics Code of Conduct
The Caesar repository is part of the JuliaRobotics organization and adheres to the JuliaRobotics code-of-conduct.
Contributors
We are grateful for many, many contributions within the Julia package ecosystem โ see the REQUIRE
files of Caesar, Arena, RoME, RoMEPlotting, KernelDensityEstimate, IncrementalInference, NLsolve, DrakeVisualizer, Graphs, CloudGraphs
and others for a far reaching list of contributions.
Consider citing our work:
@misc{caesarjl,
author = "Contributors",
title = "Caesar.jl",
year = 2019,
url = "https://github.com/JuliaRobotics/Caesar.jl"
}
Administration of the Caesar/RoME/IncrementalInference/Arena packages is currently conducted by Dehann Fourie who can be contacted for more details.