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.
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:
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
Additionally, rviz configurations are included here for each specific modality (vio, lio, lvio)
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. |
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;