BEAMRobotics / beam_slam

Tightly coupled lidar-visual-inertial slam using the fuse framework
81 stars 4 forks source link
computer-vision lidar odometry robotics ros slam vision

beamslam_logo

beam_slam

ROS Ubuntu

beam_slam is a SLAM package developed by the SRI lab at UCLA, built upon fuse. While there are many SLAM algorithms available for various applications, beam_slam is particularly designed with infrastructure inspection in mind. Beam SLAM provides the ability for the user to run LIO, VIO or LVIO as high rate odometry processes, which all feed into a global mapper which runs a full pose graph optimization including loop closures and submap refinements.

Dependencies:

Most dependencies are included as submodules under the "dependencies" folder, however some additional dependencies are listed:

If you want to run IMU tests, you will also need:

Compiling:

To compile everything required to run beam_slam launch files use the following command:

catkin build -j4 -DCMAKE_BUILD_TYPE=Release libbeam bs_optimizers bs_publishers bs_models calibration_publisher graph_rviz_plugin


Running SLAM:

  1. Create an extrinsics file for your robot, example here.
  2. Create a calibration launch file for these extrinsics, example here.
  3. Create a calibration parameter file, example here.
  4. Create a yaml config for your desired SLAM setup, example here. A detailed explanation of each sensor models parameters are found in the README under bs_models.
  5. Create a launch file to run the fuse optimizer of your choice, example here, make sure to keep the name as local_mapper as message names depend on this naming convention

Additionally, rviz configurations are included here for each specific modality (vio, lio, lvio)


Project Overview

Folder Purpose
beam_slam_launch Contains all config files (yaml, json), calibration files, launch files and rviz configurations.
bs_common Contains code that may be used in multiple places or multiple sensor models.
bs_constraints Custom implementations of fuse constraints that are used within beam_slam.
bs_models Contains custom implementations of fuse sensor models and motion models, this is where the bulk of the processing takes place, these convert sensor measurements into constraints for the graph optimization.
bs_optimizers Contains a custom implementation of the fuse fized_lag_smoother, with the additional option for "pseudo marginalization" allowing for real time, full visual-inertial bundle adjustment.
bs_publishers Contains implementations of publishers, mostly to publish the current graph as a path.
bs_tools Contains any offline tools such as: map refinement.
bs_variables Custom implementations of fuse variables.

Known issues:

When compiling fuse, if you get the following error:

/usr/bin/ld: /usr/local/lib/libceres.a(local_parameterization.cc.o): undefined reference to symbol 'omp_get_max_threads@@OMP_1.0'
//usr/lib/x86_64-linux-gnu/libgomp.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [/userhome/catkin_ws/devel/.private/fuse_optimizers/lib/fuse_optimizers/fixed_lag_smoother_node] Error 1

Then apply the patch FuseOpenMP.patch by:

cd dependencies/fuse; git apply ../../FuseOpenMP.patch;