ORB SLAM3 ubuntu18.04 ROS 运行 段错误 (核心已转储) 踩坑及解决

问题猜测及解决:opencv版本兼容性
项目版本:ORB SLAM3 V1.0版本
CPU:13600K (大小核架构不知是否会影响)
电脑环境:ubuntu18.04 ROS运行
相机:D435 i
opencv版本:3.2 and 4.6
前提:编译无报错,即通过以下指令

./build.sh 
./build_ros.sh

简单来说用opencv3.2
所以项目中两个CMakeLists.txt中find_package(OpenCV 3.2 QUIET),opencv设置为3.2即可运行
注意是两个CMakeLists.txt,一个在ORB_SALM3-master下,一个在ORB_SLAM3-master/Examples_old/ROS/ORB_SLAM3

find_package(OpenCV 3.2 QUIET)

以下是踩坑过程


项目中调用opencv 4.6
即两个CMakeLists.txt中find_package(OpenCV 4.6 QUIET)
在运行以下指令,启动realsense-ros包的D435 i节点,并运行ORB slam3中的双目模式居然正常运行!!(图就不附上了)

roslaunch realsense2_camera rs_camera.launch  //D435i 启动ROS节点
rosrun ORB_SLAM3 Stereo /home/nico/ORBvoc.txt /home/nico/d435i.yaml flase  //后续文件地址需修改

第一个段错误 (核心已转储)


但是运行其它ORB—SLAM3其它模式全部出现 段错误 (核心已转储)
在进去查看项目代码并调试发现:
运行代码后会声明命名空间在 src/System.cc文件中,并卡在这一行终端便出现 段错误 (核心已转储)
这一行的功能是调用opencv的函数对相机内参文件的读取。

    cv::FileStorage fsSettings(strSettingsFile.c_str(), cv::FileStorage::READ);

但是问题来了 为什么同样是声明命名空间,但是只有双目模式可以正常运行而其它不可以
随后检查主函数文件即ros_stereo.cc和ros_rgbd.cc(仅对比stereo 和 rgbd)
发现大体一致,但是有以下不同
ros_stereo.cc是这样定义的

class ImageGrabber
{
public:
    ImageGrabber(ORB_SLAM3::System* pSLAM):mpSLAM(pSLAM){}

    void GrabStereo(const sensor_msgs::ImageConstPtr& msgLeft,const sensor_msgs::ImageConstPtr& msgRight);

    ORB_SLAM3::System* mpSLAM;
    bool do_rectify;
    cv::Mat M1l,M2l,M1r,M2r;
};

而ros_rgbd.cc是这样定义的

class ImageGrabber
{
public:
    ImageGrabber(ORB_SLAM3::System* pSLAM):mpSLAM(pSLAM){}

    void GrabRGBD(const sensor_msgs::ImageConstPtr& msgRGB,const sensor_msgs::ImageConstPtr& msgD);

    ORB_SLAM3::System* mpSLAM;
};

对比显然是缺少

    bool do_rectify;
    cv::Mat M1l,M2l,M1r,M2r;

加上后居然可以解决第一个段错误 (核心已转储)(很扯但是事实上本人运行是这样的)(实际上加上 cv::Mat M1;也是可以的)
显然是opencv 版本兼容问题


但是随后遇到第二个段错误 (核心已转储)


显示了一下画面便退出了。终端显示

Loading ORB Vocabulary. This could take a while...
Vocabulary loaded!

Initialization of Atlas from scratch 
Creation of new map with id: 0
Creation of new map with last KF id: 0
Seq. Name: 

Camera Parameters: 
- Camera: Pinhole
- Image scale: 1
- fx: 535.4
- fy: 539.2
- cx: 320.1
- cy: 247.6
- k1: 0
- k2: 0
- p1: 0
- p2: 0
- fps: 30
- color order: RGB (ignored if grayscale)

ORB Extractor Parameters: 
- Number of Features: 1000
- Scale Levels: 8
- Scale Factor: 1.2
- Initial Fast Threshold: 20
- Minimum Fast Threshold: 7
There are 1 cameras in the atlas
Camera 0 is pinhole
Starting the Viewer
段错误 (核心已转储)

同样思考问题 为什么只有双目模式可以正常运行而其它不可以
随后参考建议opencv版本是3.2
所以项目中两个CMakeLists.txt中find_package(OpenCV 3.2 QUIET),opencv设置为3.2即可运行
注意是两个CMakeLists.txt,一个在ORB_SALM3-master下,一个在ORB_SLAM3-master/Examples_old/ROS/ORB_SLAM3

find_package(OpenCV 3.2 QUIET)

运行以下命令

roslaunch realsense2_camera rs_camera.launch
rosrun ORB_SLAM3 RGBD /home/nico/ORBvoc.txt /home/nico/d435i.yaml

运行正常
上图
ORB SLAM3 ubuntu18.04 ROS 运行 段错误 (核心已转储) 踩坑及解决_第1张图片

你可能感兴趣的:(视觉SLAM,opencv,计算机视觉,人工智能,slam)