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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

问题猜测及解决opencv版本兼容性
项目版本ORB SLAM3 V1.0版本
CPU13600K (大小核架构不知是否会影响)
电脑环境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

运行正常
上图
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Ubuntu

“ORB SLAM3 ubuntu18.04 ROS 运行 段错误 (核心已转储) 踩坑及解决” 的相关文章