FAQ

Frequently Asked Questions

Why Julia

The JuliaLang and (JuliaPro) is an open-source Just-In-Time (JIT) & optionally precompiled, strongly-typed, and high-performance programming language. The algorithmic code is implemented in Julia for many reasons, such as agile development, high level syntax, performance, type safety, parallel computing, dynamic development, cross compilable (with gcc and clang) and foundational cross-platform (LLVM) technologies. See JuliaCon2018 highlights video. Julia can be thought of as either {C+, Mex (done right), or as a modern Fortran replacement}.

Is Caesar.jl limited to Julia? No.

The Caesar.jl project is expressly focused on making this algorithmic code available to C/Fortran/C++/C#/Python/Java/JS. Julia itself offers many additional interops. ZMQ and HTTP/WebSockets are the standardized interfaces of choice, please see details at the multi-language section). Consider opening issues or getting in touch for more information.

Can Julia be Embedded into C/C++

Yes, see the Julia embedding documentation page.

Current Julia version, v1.0.x

Caesar.jl and packages are currently targeting Julia v1.0.x (2019Q1). See progress for Julia v1.1.x here.

Just-In-Time Compiling (i.e. why are first runs slow?)

Julia uses just-in-time compilation (unless already pre-compiled) which takes additional time the first time a new function is called. Additional calls to a function is fast from the second call onwards since the static function is now cached and ready for use.

Static, Shared Object .so Compilation

Packages are already compiled to static objects (.ji files), but can also be compiled to more common .so files. See this AOT vs JIT compiling blog post for a deeper discussion. Also see this Julia Binaries Blog.

Note recent developments announced on discourse.. Also see new brute force sysimg work at Fezzik.jl.

ROS Integration

ROS integration is a priority for this project and will accompany the so-called 'prime time' release of the code. ROS and ZMQ interfaces are closely related.

Note the present focus (2018Q3-2019Q2) is to stabilize the ZMQ interface.

Voice Please add your voice of support or suggestions on ROS integration here.

How does JSON-Schema work?

Caesar.jl intends to follow json-schema.org, see step-by-step guide here.

Solver FAQ (mm-iSAM)

Why Bayes (Juntion) tree?

We want to perform inference on acyclic graphs, as well as exploit the benefits of knowing the full conditional independence structure of the graph–-trees represent the "complete form" when marginalizing each variable one at a time (also known as elimination game, marginalization, or smart factors). In loose terms–-and assume if the system were to be linearlized parametric–-think of the Bayes (Junction) tree as having implicit access to all Schur complements of each variable to all others.

Are cliques in the Bayes (Junction) tree densly connected?

Yes and no. From the chordal Bayes net's perspective (obtained through the elimination game in order to build the clique tree), the nodes of the Bayes tree are indeed fully connected subgraphs (they are called cliques after all!). From the perspective of the subgraph of the original factor graph induced by the clique's variables, cliques need not be fully connected, since we are assuming the factor graph as sparse, and that no new information can be created out of nothing–-hence each clique must be sparse. That said, the potential exists for the inference within a clique to become densly connected (experience full "fill-in"). See the paper on square-root-SAM, where the connection between dense covariance matrix of a Kalman filter (EKF-SLAM) is actually related to the inverse square root (rectangular) matrix which structure equivalent to the clique subgraph adjacency matrix.

Why/Where does non-Gaussian data come from?

Gaussian error models in measurement or data cues will only be Gaussian (normally distributed) if all physics/decisions/systematic-errors/calibration/etc. has a correct algebraic model in every single circumstance. Caesar.jl and mm-iSAM is heavily focussed on state-estimation from a plethora of heterogenous data. Four major categories of non-Gaussian errors have thus far been considered: