Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation steam

Repository Summary

Description The Simultaneous Trajectory Estimation and Mapping (STEAM) Engine.
Checkout URI https://github.com/utiasasrl/steam.git
VCS Type git
VCS Version master
Last Updated 2025-10-23
Dev Status UNKNOWN
Released UNRELEASED
Tags cpp robotics state-estimation
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
steam 1.1.0

README

steam

STEAM (Simultaneous Trajectory Estimation and Mapping) Engine is an optimization library aimed at solving batch nonlinear optimization problems involving both SO(3)/SE(3), SO(2)/SE(2), and continuous-time components. This is accomplished by using an iterative Gauss-Newton-style estimator in combination with techniques developed and used by ASRL. With respect to SO(2)/SO(3) and SE(2)/SE(3) components, we make use of the constraint sensitive perturbation schemes discussed in Barfoot and Furgale [1]. STEAM Engine is by no means intended to be the fastest car on the track; the intent is simply to be fast enough for the types of problems we wish to solve, while being both readable and easy to use by people with a basic background in robotic state estimation.

[1] Barfoot, T. D. and Furgale, P. T., “Associating Uncertainty with Three-Dimensional Poses for use in Estimation Problems,” IEEE Transactions on Robotics, 2014.

Installation

Dependencies

  • Compiler with C++17 support and OpenMP
  • CMake (>=3.16)
  • Eigen (>=3.3.7)
  • lgmath (>=1.1.0)
  • (Optional) ROS2 Foxy or later (colcon+ament_cmake)

Install c++ compiler, cmake, OpenMP, and yaml support

sudo apt -q -y install build-essential cmake libomp-dev libyaml-cpp-dev

Install Eigen (>=3.3.7)

# using APT
sudo apt -q -y install libeigen3-dev

# OR from source
WORKSPACE=~/workspace  # choose your own workspace directory
mkdir -p ${WORKSPACE}/eigen && cd $_
git clone https://gitlab.com/libeigen/eigen.git . && git checkout 3.3.7
mkdir build && cd $_
cmake .. && make install # default install location is /usr/local/

  • Note: if installed from source to a custom location then make sure cmake can find it.

Install lgmath

Follow the instructions here.

Build and install steam using cmake

WORKSPACE=~/workspace  # choose your own workspace directory
# clone
mkdir -p ${WORKSPACE}/steam && cd $_
git clone https://github.com/utiasASRL/steam.git .
# build and install
mkdir -p build && cd $_
cmake .. # optionally include -DBUILD_TESTING=ON to build tests
cmake --build .
cmake --install . # (optional) install, default location is /usr/local/

Preprocessor macros

  • STEAM_DEFAULT_NUM_OPENMP_THREADS=<num. threads>: Default to 4. Define number of threads to be used by OpenMP in STEAM.
  • STEAM_USE_OBJECT_POOL: Default to undefined. If defined then STEAM will use an object pool to improve performance but is no longer thread safe.

Note: steamConfig.cmake will be generated in both build/ and <install prefix>/lib/cmake/steam/ to be included in other projects.

Build examples

samples/CMakeLists.txt shows an example of how to add steam to your projects.

To build and run these samples:

cd ${WORKSPACE}/steam  ## $WORKSPACE defined above
mkdir -p build_samples && cd $_
cmake ../samples
cmake --build .  # Executables will be generated in build_samples

Build and install steam using ROS2(colcon+ament_cmake)

CMake will automatically determine if you are building as part of a colcon build command.

WORKSPACE=~/workspace  # choose your own workspace directory

mkdir -p ${WORKSPACE}/steam && cd $_
git clone https://github.com/utiasASRL/steam.git .

source <your ROS2 worspace that includes steam>
colcon build

Same preprocessor macro mentioned above also apply.

License

Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation
Repo symbol

steam repository

cpp robotics state-estimation