ubuntu22.04+ORB_SLAM2运行报错:New map created with 530 points double free or corruption (out) Aborted

ORB_SLAM2官方开源:https://github.com/raulmur/ORB_SLAM2

一、编译

我的环境:

  • Ubuntu22.04LTS
  • Opencv4.6编译
  • Pangolin0.5编译,一定要用0.5版本
  • eigen3.4.0,没有编译,用apt-get装的,在/usr/include/eigen3中可以找到

编译的时候也是一堆问题,大概主要是以下几个报错:

问题一:FATAL_ERROR "OpenCV > 2.4.3 not found.

  1. 问题一解决:修改cmakelist.txt,将opencv3.0改为4.6.0,两个地方,一个是orbslam2文件夹,另一个是DBoW2文件夹,根据编译报错提示修改。
 find_package(OpenCV 4.6.0 QUIET)
 if(NOT OpenCV_FOUND)
    find_package(OpenCV 2.4.3 QUIET)
    if(NOT OpenCV_FOUND)
       message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
    endif()
 endif()

问题二:‘usleep’ was not declared in this scope

  1. 问题二解决:在以下文件中添加头文件#include<unistd.h>
/src/LocalMapping.cc 
/src/System.cc 
/src/LoopClosing.cc
/src/Tracking.cc 
/src/Viewer.cc 
/Examples/Monocular/mono_tum.cc
/Examples/Monocular/mono_kitti.cc 
/Examples/Monocular/mono_euroc.cc
/Examples/RGB-D/rgbd_tum.cc 
/Examples/Stereo/stereo_kitti.cc
/Examples/Stereo/stereo_euroc.cc

问题三:std::map must have the same value_type as its allocator

  1. 问题三解决:修改ORB_SLAM2/include/LoopClosing.h::50中的语句
# 原语句
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
    Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
    
# 修改成如下
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
    Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;

问题四:CV_LOAD_IMAGE_UNCHANGED未定义

  1. 问题四解决:在VS code中打开ORB_SLAM2文件夹作为工作空间,搜索CV_LOAD_IMAGE_UNCHANGED,将其全部换为cv::IMREAD_UNCHANGED即可。
# 下面三个文件中每个有一处CV_LOAD_IMAGE_UNCHANGED
/Examples/Monocular/mono_euroc.cc
/Examples/Monocular/mono_kitti.cc
/Examples/Monocular/mono_tum.cc
# 下面三个文件中每个有两处CV_LOAD_IMAGE_UNCHANGED
/Examples/RGB-D/rgbd_tum.cc
/Examples/Stereo/stereo_euroc.cc
/Examples/Stereo/stereo_kitti.cc

然后编译就可以通过了,但是有很多eigen的warning,我的eigen版本是3.4.0,据网友说3.2的版本可以消除warning,但由于是warning也可以通过编译,就没折腾了。
编译成功的终端结果

二、运行

EuRoC双目数据集

1.下载数据集:ASL格式的EuRoC数据集
2.运行命令:

./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/juling/Documents/data/MH_01_easy/mav0/cam0/data /home/juling/Documents/data/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt
  • 这里我运行的是双目。
  • 链接中有好几个数据集,我下载的是MH_01_easy,那么除了命令中数据集的路径要更改以外,对应的时间戳txt文件也要修改。
  • /Examples/Stereo/EuRoC_TimeStamps中有所有的txt。

最关键的问题来了,运行时出现了double free or corruption (out) Aborted (core dumped)的报错。
在这里插入图片描述
解决:查看build.sh脚本,发现它编译了DBoW2、编译了g2o、以及ORB_SLAM2三个文件,将它们CMakeLists.txt中包含-march=native的命令都找出来,删除-march=native重新编译即可。

# 原语句
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")
# 修改语句
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")

Map Viewer运行结果如下:
运行结果

Kitti双目运行

  1. 下载:odometry data set (grayscale, 22 GB)包含了21个Sequence数据,测试只用1个即可,下面是网友提供的kitti00数据。
  1. 运行命令
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml /home/juling/Documents/data/kitti00/dataset/sequences/00/

Map Viewer运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值