Skip to content

Commit

Permalink
[RST-1476] Added API docs for the Variable class (#36)
Browse files Browse the repository at this point in the history
* Added API docs for the Variable class
  • Loading branch information
svwilliams authored Jan 28, 2019
1 parent fab0547 commit 417f9fd
Show file tree
Hide file tree
Showing 5 changed files with 388 additions and 3 deletions.
18 changes: 15 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
# fuse

The fuse stack provides a general architecture for performing sensor fusion live on a robot. Some possible applications
include state estimation, localization, mapping, and calibration.

## Overview

fuse is a ROS framework for performing sensor fusion using nonlinear least squares optimization techniques. In
particular, fuse provides:

* a plugin-based system for modeling sensor measurements
* a similar plugin-based system for motion models
* a plugin-based system for publishing optimized state values
Expand All @@ -14,8 +17,8 @@ particular, fuse provides:

(unpresented) ROSCon 2018 Lightning Talk [slides](doc/fuse_lightning_talk.pdf)


Data flows through the system approximately like this:

* A sensor model receives raw sensor data. The sensor model generates a constraint and sends it to the optimizer.
* The optimizer receives the new sensor constraint. A request is sent to each configured motion model to generate
a constraint between the previous state and the new state involved in the sensor constraint.
Expand All @@ -36,6 +39,7 @@ publishing of data to the ROS topic.
![fuse sequence diagram](doc/fuse_sequence_diagram.png)

## Example

Let's consider a simple robotics example to illustrate this. Assume we have a typical indoor differential-drive robot.
This robot has wheel encoders and a horizontal laser.

Expand Down Expand Up @@ -145,17 +149,25 @@ plot how the wheel diameter changes over the length of the race.
Now our system estimates the wheel diameters at each time step as well as the robot's pose.

## The Math

Internally `fuse` uses Google's [Ceres Solver](http://ceres-solver.org) to perform the nonlinear least squares
optimization, which produces the optimal state variable values. I direct any interested parties to the Ceres Solver
["Non-linear Least Squares"](http://ceres-solver.org/nnls_tutorial.html) tutorial for an excellent primer on the core
concepts and involved math.

## Summary

The purpose of `fuse` is to provide a framework for performing sensor fusion tasks, allowing common components to be
reused between systems, while also allowing components to be customized for different use cases. The goal is to allow
end users to concentrate on modelling the robot, sensor, system, etc. and spend less time wiring the different
sensor models together into runable code. And since all of the models are implemented as plugins, separate plugin
libraries can be shared or kept private at the discretion of their authors.

## API
Class API details coming soon...
## API Concepts

* [Variables](doc/Variables.md)
* Constraints -- coming soon
* Sensor Models -- coming soon
* Motion Models -- coming soon
* Publishers -- coming soon
* Optimizers -- coming soon
Loading

0 comments on commit 417f9fd

Please sign in to comment.