ROS环境下BLAM的安装和使用

环境:
Ubuntu 16.04
ROS-kinetic
Velodyne 16激光雷达

  1. 安装依赖
    #Boost >= 1.43
    sudo apt-get install libboost-all-dev
    #CMake >= 2.6
    sudo apt-get install cmake
    
    git clone https://bitbucket.org/gtborg/gtsam.git
    cd gtsam
    mkdir build
    cd build
    cmake ..
    sudo make install
  2. 安装blam
    mkdir ~/blam_ws 
    cd ~/blam_ws
    git clone https://github.com/erik-nelson/blam
    cd blam 
    ./update
  3. 测试
    加载环境

    source ~/blam_ws/blam/internal/devel/setup.bash

    在线模式:
    使用/velodyne_points话题,消息类型为sensor_msgs::PointCloud2

    roslaunch blam_example test_online.launch

    如是其他多线雷达,修改test_online.launch文件订阅的话题

    <remap from="~pcld" to="/rslidar_points"/>

    离线模式:
    先执行rosbag文件,如

    rosbag play velodyne.bag

    再执行

    roslaunch blam_example test_offline.launch

    启动rviz,查看建图效果

    rosrun rviz rviz -d blam_example/rviz/lidar_slam.rviz
  4. 常见问题
    问题1:./update: 行 9: wstool: 未找到命令
    原因1:wstool未安装
    解决1:安装 Python-wstool包

    sudo apt-get install python-wstool

    问题2:fatal error: ros/ros.h: 没有那个文件或目录
    原因2:
    解决2:
    进入geometry_utils目录

    cd blam/internal/src/geometry_utils

    修改package.xml增加

    <build_depend>roscpp</build_depend>
    <run_depend>roscpp</run_depend>

    修改CMakeList.xml增加

    find_package(catkin REQUIRED COMPONENTS roscpp)
    include_directories(include ${catkin_INCLUDE_DIRS})

    问题3:error: static assertion failed: Error: GTSAM was built against a different version of Eigen
    原因3:手动安装过Eigen库,GTSAM包中已经存在Eigen,系统中存在两个版本的Eigen,
    解决3:gtsam使用系统Eigen库编译,修改gtsam/CMakeLists.txt 添加

    set(GTSAM_USE_SYSTEM_EIGEN ON)

    参考4:https://github.com/erik-nelson/blam/issues/48

    问题4:[blam/blam_slam-1] process has died [pid 30804, exit code -11
    原因4:问题3关联
    解决4:重新编译GTSAM
    参考4:https://github.com/erik-nelson/blam/issues/42

    问题5:GTSAM切换V3.2.3版本重新编译,出现[gtsam/CMakeFiles/gtsam.dir/linear/VectorValues.cpp.o] Error 4
    原因5:TBB版本太旧,要求4.4或以上版本,但是我的版本已经是4.4了!不明所以,最终放弃使用这个版本。
    解决5:修改编译选项不使用TBB或者升级TBB
    我选择disable flag TBB,修改CMakeLIst.txt文件,跟参考文章不一样,我只修改了这一处就好了。

    option(GTSAM_WITH_TBB   "Use Intel Threaded Building Blocks (TBB) if available"    OFF)

    参考5:https://github.com/borglab/gtsam/issues/19
    https://blog.csdn.net/qq_35590091/article/details/97789438

  5. 参考
    3D-SLAM入门教程-多线雷达(velodyne 16)BLAM 三维建图
    github:https://github.com/erik-nelson/blam