• Ubuntu18.04配置Cube-SLAM


    Code:https://github.com/shichaoy/cube_slam

    Notes:本文描述笔者再Ubuntu18.04安装Cube-SLAM遇到的相关问题和解决方法。

    配置相关问题或者Object SLAM相关科研问题欢迎通过邮件联系笔者交流:lidong8421bcd@gmail.com(基本保证两个工作日内回复邮件)

    配置过程

    1.环境配置

    ROS环境配置:

    mkdir -p ~/catkin_ws_Cube-SLAM/src
    cd catkin_ws_Cube-SLAM/src/
    catkin_init_workspace
    cd ..
    catkin_make
    source devel/setup.sh
    catkin_make install
    echo "source ~/catkin_ws_Cube-SLAM/devel/setup.bash" >> ~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    代码下载:

    cd src/
    git clone https://github.com/shichaoy/cube_slam.git
    
    • 1
    • 2

    2.代码编译

    编译依赖项:

    cd cube-slam/
    sh install_dependenices.sh
    
    • 1
    • 2

    编译工作空间:

     cd ../..
     catkin_make -j4
    
    • 1
    • 2

    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/src/ 下面文件报错如下:

    error: ‘std::vector’ has not been declared
    error: expected ‘,’ or ‘...’ before ‘<’ token
    error: ‘all_strings’ was not declared in this scope
    
    • 1
    • 2
    • 3

    分析:看github的issue,这个问题是Ubuntu18.04编译经常会出现的问题。

    解决方法:

    • 1 :在功能包的CMAKELIST中添加 set(CMAKE_CXX_STANDARD 14),在几个C++文件中添加:#include error: ‘iota’ is not a member of ‘std’ 报错问题没了

    • 2:在以下几个文件中添加:#include 相关报错问题解决

    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/src/box_proposal_detail.cpp
    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/src/object_3d_util.cpp
    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/src/matrix_utils.cpp
    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/include/detect_3d_cuboid/detect_3d_cuboid.h
    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/include/detect_3d_cuboid/matrix_utils.h
    catkin_ws_Cube-SLAM/src/cube_slam/detect_3d_cuboid/include/detect_3d_cuboid/object_3d_util.h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 3 :orb_object_slam下C++文件报错:error: ‘usleep’ was not declared in this scope,经典ORB-SLAM2报错问题

    解决方法:在相关报错的文件上加入头文件 #include

    #以下文件要添加#include
    catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/src/LocalMapping.cc
    catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/src/LoopClosing.cc
    catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/src/System.cc
    catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/src/Viewer.cc
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述

    完成之后编译成功。

    运行:roslaunch object_slam object_slam_example.launch

    请添加图片描述

    demo可以正常跑。

    3.数据集下载

    这里因为作者使用的数据集有格式要求,暂且使用作者给的两个数据集(作者处理好了相关格式),后续会自己制作数据集测试。 这里作者给了两个数据集,分别对应静态情况动态情况

    (1)Static datasets

    (2)Dynamic datasets

    这里我将两个数据集解压之后放到该路径下:catkin_ws_Cube-SLAM/src/cube_slam/Datasets

    4.设置路径启动代码

    (1)跑Static datasets

    • 这里需要先将mono.launch文件中 中的路径修改为自己数据集的路径,我这里修改为:/home/cvpr/catkin_ws_Cube-SLAM/src/cube_slam/Datasets/seq_07-20220720T061819Z-001/seq_07

    • 然后报错如下:

    Loading ORB Vocabulary. This could take a while...
    terminate called after throwing an instance of 'std::bad_alloc'
      what():  std::bad_alloc
    [ros_mono-3] process has died [pid 1257, exit code -6, cmd /home/cvpr/catkin_ws_Cube-SLAM/devel/lib/orb_object_slam/ros_mono /home/cvpr/catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/Vocabulary/ORBvoc.bin /home/cvpr/catkin_ws_Cube-SLAM/src/cube_slam/orb_object_slam/Examples/Monocular/KITTI04-12_me.yaml /camera/image_raw:=/kitti/left/image_raw __name:=ros_mono __log:=/home/cvpr/.ros/log/48a4443c-07f6-11ed-a895-74ee2aeddddc/ros_mono-3.log].
    log file: /home/cvpr/.ros/log/48a4443c-07f6-11ed-a895-74ee2aeddddc/ros_mono-3*.log
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这里是词袋文件的问题,即mono.launchargs="$(find orb_object_slam)/Vocabulary/ORBvoc.bin 并没有找到这个文件;

    解决方法:这里 cube_slam/orb_object_slam/Vocabulary 提供了将txt词袋转换为二进制的bin词袋的代码。这里我使用这个代码进行词袋转换有点问题,索性就直接下载了一个二进制词袋:https://github.com/nxyzgf/sgg-dbow2/blob/master/ORBvoc.bin

    • 运行时,仍然报错:Gtk-ERROR **: 04:42:33.691: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported;这里这应该是linux系统同时安装了GTK+ 2.x 和 GTK+ 3导致的,参考:https://blog.csdn.net/weixin_39768247/article/details/111855987/,卸载opencv之后又重新装一边,同时将ROS的workspace中的build和devel删除重新编译。

    运行:roslaunch orb_object_slam mono.launch 正常。

    请添加图片描述

    然后跑ROS的bag数据集:rosbag play left_full_gray.bag
    请添加图片描述

    (2)跑Dynamic datasets

    • 先修改mono_dynamic.launch文件:将文件中 改为自己数据集的地址:/home/cvpr/catkin_ws_Cube-SLAM/src/cube_slam/Datasets/0018-20220720T062223Z-001/0018 即可

    运行:

    roslaunch orb_object_slam mono_dynamic.launch 
    rosbag play mono.bag 
    
    • 1
    • 2

    效果如下:
    请添加图片描述

  • 相关阅读:
    go的内存分配机制
    百度飞桨平台使用高级算力的问题
    Java学习进阶—高级编程(建义收藏)
    RxJava 实例
    进制和位运算
    C++11 --------- 知识点补充
    RabbitMQ 几种模式
    期货开户客户出入金是什么时间?
    电脑文件怎么加密?文件加密软件哪个比较好?
    靠做网络安全,工资是同龄人的5倍:赚钱真的不能靠拼命!
  • 原文地址:https://blog.csdn.net/qq_44847636/article/details/125899174