关于在ubuntu18.04中运行ORB_SLAM3时遇到的报错:段错误(核心已转储)的解 ...

打印 上一主题 下一主题

主题 550|帖子 550|积分 1650

提示:文章写完后,目录可以主动生成,如何生成可参考右边的帮助文档
  
  

一、段错误(核心已转储)

1. 已放弃(核心已转储)

(1) 问题形貌

使用rosrunORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
指令,在运行ROS版本的ORB时,出现的Opencv相关的报错:

(2)缘故原由分析

在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt和ORB_SLAM3/CMakeLists.txt中,使用的是opencv4版本,而在ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt中,要求使用的是OpenCV3的版本,所以末了导致segmentation fault(段错误)。
二、解决方法

1. 解决方法一

修改opencv版本,改成同一的opencv3版本
注意:以下是在v0.4-beta版本的ORB_SLAM源码中举行
(1) 修改CMakeLists.txt文件的代码
在ORB_SLAM3/CMakeLists.txt修改为:

在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改为:

在ROS/ORB_SLAM3/CMakeLists.txt中稳定,如下

(2) 再次编译ORB_SLAM3
颠末上述的修改之后,再次运行./build.sh编译代码时出现报错:no match for ‘operator’,具体的报错的信息如下所示:

解决
1)修改LocalMapping.cc文件
在src/ORB_SLAM3/src目录下的LocalMapping.cc文件,大概在628行,修改为:
  1. x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));
复制代码
修改位置如下图所示:

2)再次运行./build.sh
报错页面信息如下

解决:
修改src/ORB_SLAM3/src/CameraModels目录下的KannalaBrandt8.cpp文件,大概在534行,修改为:
  1. namespace cv
  2. {
  3. template<typename _Tp, int m, int n> static inline
  4. Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
  5. {
  6. return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
  7. }
  8. }
复制代码
修改的位置如下:

再次实验./build.sh,./build_ros.sh,即可编译完成。
末了,再次运行ORBSLAM:
  1. rosrunORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
复制代码
即可解决段错误的问题
2. 解决方法二

更换ROB_SLAM3版本:ORB_SLAM3-master的安装(这版本的ROS文件在Examples_old中),具体的环境设置和在v0.4的版本的源码一样:
(1) 运行./build_ros.sh出现报错
1)问题形貌
报错的页面信息如下所示:


2)解决
1.在ROS/ORB_SLAM3/src/AR目录下,修改ViewerAR.cc文件
添加Converter.h头文件:
  1. #include "../../../include/Converter.h"
复制代码
添加的位置如图:

大概405行,修改为:
  1. vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));
复制代码
修改位置如图所示:

大概在530行,修改为:
  1. cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());
复制代码
修改位置如图所示:

(2) 再次运行./build_ros.sh出现报错
1)问题形貌
报错的页面信息如下所示:

2)解决
1.在ROS/ORB_SLAM3/src/AR目录下,修改ros_mono_ar.cc文件
添加Converter.h头文件:
  1. #include "../../../include/Converter.h"
复制代码
添加位置如下:

大概在151行,修改为:
  1. cv::Mat Tcw=ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()).matrix());
复制代码
修改的位置如下:

修改上述文件后,删除build文件,再次运行./build_ros.sh,不出意外,这次就会编译乐成。
(3) 运行ROS的例程或实时运行单目相机
1)问题形貌
rosrun官方数据集和自己摄像头出现还是报错:段错误(核心已转储),具体的报错的信息如下:

2)解决
全部修改成/ROS/ORB_SLAM3/CMakeLists.txt中要求的opencv3版本。
1. 修改CMakeLists.txt文件的代码
在ORB_SLAM3/CMakeLists.txt修改为:

在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改为:

在ROS/ORB_SLAM3/CMakeLists.txt中稳定

修改之后,再次编译./build_ros.sh即可编译乐成!!!
附上一张运行乐成的截图:

总结

到此为止,以上全部段错误(核心已转储)的问题已经完全解决。就可以实时运行单目相机举行测试了,完结撒花!!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表