ToB企服应用市场:ToB评测及商务社交产业平台
标题:
关于在ubuntu18.04中运行ORB_SLAM3时遇到的报错:段错误(核心已转储)的解
[打印本页]
作者:
用多少眼泪才能让你相信
时间:
2024-8-20 14:33
标题:
关于在ubuntu18.04中运行ORB_SLAM3时遇到的报错:段错误(核心已转储)的解
提示:文章写完后,目录可以主动生成,如何生成可参考右边的帮助文档
一、段错误(核心已转储)
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行,修改为:
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行,修改为:
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());
}
}
复制代码
修改的位置如下:
再次实验./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)问题形貌
报错的页面信息如下所示:
2)解决
1.在ROS/ORB_SLAM3/src/AR目录下,修改ViewerAR.cc文件
添加Converter.h头文件:
#include "../../../include/Converter.h"
复制代码
添加的位置如图:
大概405行,修改为:
vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));
复制代码
修改位置如图所示:
大概在530行,修改为:
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头文件:
#include "../../../include/Converter.h"
复制代码
添加位置如下:
大概在151行,修改为:
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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4