0


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){}voidGrabStereo(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){}voidGrabRGBD(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

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


本文转载自: https://blog.csdn.net/Nico_jion/article/details/128751718
版权归原作者 Nico_J ?? 所有, 如有侵权,请联系我们删除。

“ORB SLAM3 ubuntu18.04 ROS 运行 段错误 (核心已转储) 踩坑及解决”的评论:

还没有评论