Home

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].

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.

TL;DR Installation

If you want to skip ahead and add Caesar to your Julia packages, you can install the metadata registered package 'Caesar'.

Caesar can be installed for latest Julia 0.7/1.0 with:

julia> ] # to enable package manager
(v1.0) pkg> add Caesar

Unit tests can further be performed for the upstream packages as follows – NOTE first time runs are slow since each new function call or package must first be precompiled.

(v1.0) pkg> test IncrementalInference
...
(v1.0) pkg> test RoME
...
(v1.0) pkg> test Caesar
...

(Q4 2018), Temporarily require development (master branch) version of RoMEPlotting.jl (2D) and Arena.jl (3D) as optional visualization packages:

(v1.0) pkg> add RoMEPlotting#master

# separately
(v1.0) pkg> add Arena#master

Caesar Framework

Caesar Core

Caesar is implemented in Julia (and JuliaPro) for a fast, flexible, dynamic and productive robot designer experience. This framework maintains good interoperability with other languages as listed in features below.

Caesar.jl is the "umbrella" framework that depends on and supports various dedicated purpose packages.

Why Julia: The implementation language of choice is Julia, for a wide variety of reasons such as agile development along side modern, high speed, type safe, multi-processor, JIT-dynamic, cross compiling (gcc and clang) and cross-platform technologies. Julia can be thought of as either {C+, Mex (done right), or a Fortran replacement}. The Caesar.jl project is expressly focussed on making this algorithmic code available to C/C++/C#/Python/Java/JS/ applications through a variety of interfaces described below. Please open issues or get in touch for more information about interops.

Caesar Core Packages

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 [2]. 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:

Visualization

Caesar visualization (plotting of results, graphs, and data) is provided by 2D and 3D packages respectively:

Multilanguage Interops: Caesar SDKs and APIs

The Caesar framework is not limited to direct Julia use. The following Github projects provide access to features of Caesar in their language:

Contributions are welcome! If you are developing an extension we would like to help, please feel free to contact us (details below).

Features

The Caesar framework has the following features:

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. For example see ROS integration page here.

Next Steps

For installation steps, examples/tutorials, and concepts please refer to the following pages:

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 = "Caesar.jl Contributors",
  title =  "Caesar.jl",
  year =   2018,
  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.