用多少眼泪才能让你相信 发表于 2024-8-20 14:33:24

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

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


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

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

(1) 问题形貌

使用rosrunORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
指令,在运行ROS版本的ORB时,出现的Opencv相关的报错:
https://img-blog.csdnimg.cn/direct/5f70895ece0b4c52af6f4a7a067b3c2d.png
(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修改为:
https://img-blog.csdnimg.cn/direct/8bb70d03e3c64867bf621adab4830299.png
在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改为:
https://img-blog.csdnimg.cn/direct/c82127ed329b44d69b1a927ba0062a7b.png
在ROS/ORB_SLAM3/CMakeLists.txt中稳定,如下
https://img-blog.csdnimg.cn/direct/5ff52586e5c04941b0c528ee96a79119.png
(2) 再次编译ORB_SLAM3
颠末上述的修改之后,再次运行./build.sh编译代码时出现报错:no match for ‘operator’,具体的报错的信息如下所示:
https://img-blog.csdnimg.cn/direct/7eb2fd74c0d54ffa8b00e5829aae6f20.png
解决
1)修改LocalMapping.cc文件
在src/ORB_SLAM3/src目录下的LocalMapping.cc文件,大概在628行,修改为:
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));
修改位置如下图所示:
https://img-blog.csdnimg.cn/direct/9881590c07104632a6fc967687e8c07c.png
2)再次运行./build.sh
报错页面信息如下:
https://img-blog.csdnimg.cn/direct/7113e6b8d4c2483185adb9c9c807daa6.png
解决:
修改src/ORB_SLAM3/src/CameraModels目录下的KannalaBrandt8.cpp文件,大概在534行,修改为:
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}
修改的位置如下:
https://img-blog.csdnimg.cn/direct/4e42760fae584ff88c08c4e3c517b6e7.png
再次实验./build.sh,./build_ros.sh,即可编译完成。
末了,再次运行ORBSLAM:
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)问题形貌
报错的页面信息如下所示:
https://img-blog.csdnimg.cn/direct/797e19fe8a8d47ad9c90678fb9739138.png
https://img-blog.csdnimg.cn/direct/38c5118dd42642c69cc8088cef4623a6.png
2)解决
1.在ROS/ORB_SLAM3/src/AR目录下,修改ViewerAR.cc文件
添加Converter.h头文件:
#include "../../../include/Converter.h"

添加的位置如图:
https://img-blog.csdnimg.cn/direct/0aec123d34f845cba16d59373e04fabb.png
大概405行,修改为:
vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));
修改位置如图所示:
https://img-blog.csdnimg.cn/direct/ec01153f686243e4bf891fbcedd86b24.png
大概在530行,修改为:
cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());
修改位置如图所示:
https://img-blog.csdnimg.cn/direct/7190db446a4147cfb45a8e78f469bc51.png
(2) 再次运行./build_ros.sh出现报错
1)问题形貌
报错的页面信息如下所示:
https://img-blog.csdnimg.cn/direct/1fdd14414ecc4d9ca801c0787f8dc0e6.png
2)解决
1.在ROS/ORB_SLAM3/src/AR目录下,修改ros_mono_ar.cc文件
添加Converter.h头文件:
#include "../../../include/Converter.h"

添加位置如下:
https://img-blog.csdnimg.cn/direct/fc29848f62784a91bfcd71341f189fd5.png
大概在151行,修改为:
cv::Mat Tcw=ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()).matrix());
修改的位置如下:
https://img-blog.csdnimg.cn/direct/5973cc6add204e0095aac2047a3383b6.png
修改上述文件后,删除build文件,再次运行./build_ros.sh,不出意外,这次就会编译乐成。
(3) 运行ROS的例程或实时运行单目相机
1)问题形貌
rosrun官方数据集和自己摄像头出现还是报错:段错误(核心已转储),具体的报错的信息如下:
https://img-blog.csdnimg.cn/direct/4b94c403497c4fc2922e80a11bb2f35d.png
2)解决
全部修改成/ROS/ORB_SLAM3/CMakeLists.txt中要求的opencv3版本。
1. 修改CMakeLists.txt文件的代码
在ORB_SLAM3/CMakeLists.txt修改为:
https://img-blog.csdnimg.cn/direct/8bb70d03e3c64867bf621adab4830299.png
在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改为:
https://img-blog.csdnimg.cn/direct/c82127ed329b44d69b1a927ba0062a7b.png
在ROS/ORB_SLAM3/CMakeLists.txt中稳定
https://img-blog.csdnimg.cn/direct/5ff52586e5c04941b0c528ee96a79119.png
修改之后,再次编译./build_ros.sh即可编译乐成!!!
附上一张运行乐成的截图:
https://img-blog.csdnimg.cn/direct/f10818397b734fd89701fe0a7f0819b7.png
总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 关于在ubuntu18.04中运行ORB_SLAM3时遇到的报错:段错误(核心已转储)的解