关于在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即可编译成功!!!
附上一张运行成功的截图:

在这里插入图片描述

总结

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

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Ubuntu 18.04上安装ORB_SLAM3,您可以按照以下步骤操作: 1. 安装必要的依赖项: ``` sudo apt-get install build-essential cmake git libgtk2.-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libeigen3-dev libboost-all-dev libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libatlas-base-dev liblapack-dev libblas-dev ``` 2. 克隆ORB_SLAM3存储库: ``` git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` 3. 进入ORB_SLAM3目录并创建build目录: ``` cd ORB_SLAM3 mkdir build cd build ``` 4. 运行cmake: ``` cmake .. ``` 5. 编译ORB_SLAM3: ``` make -j4 ``` 6. 运行ORB_SLAM3: ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /path/to/dataset/sequence/ ``` 其,/path/to/dataset/sequence/是您要运行ORB_SLAM3的数据集的路径。 希望这可以帮助您安装ORB_SLAM3。 ### 回答2: Orb_slam3是一款基于Ubuntu操作系统的开源物体三维建模软件,它可以准确地模拟出物体的运动轨迹、形态等,并对其进行快速的重建。下面是Ubuntu18.04安装Orb_slam3的方法。 1. 下载安装Orb_slam3所需要的依赖库: 首先要安装git库,输入以下命令`sudo apt-get install git`。 然后安装依赖关系`sudo apt-get install build-essential cmake g++ git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libv4l-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libopencv-dev libtbb-dev libeigen3-dev libblas-dev liblapack-dev libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libzmq3-dev`。 2. 下载ORB_SLAM3源代码: 安装完依赖库后,请输入以下命令。 ```` cd /home git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ```` 3. 生成ORB_SLAM3的可执行程序: 编译安装ORB-SLAM程序,运行以下命令。 ```` cd ORB_SLAM3 chmod +x build.sh ./build.sh ```` 4. 使用ORB_SLAM3进行物体三维重建: 使用ORB_SLAM3准确地模拟出物体的运动轨迹、形态,然后进行三维重建。进入ORB_SLAM3目录,运行以下命令。 ```` rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true ```` 5. 建议:升级显卡驱动 安装了ORB_SLAM3后,建议升级显卡驱动以便更好的使用ORB_SLAM3软件。 以上就是Ubuntu18.04安装ORB_SLAM3的全部步骤,友好的交互界面使得练手极为方便,让使用者轻松地看到所需的信息,这也是它被越来越多的用户所信赖的原因。 ### 回答3: Ubuntu 18.04是一种开源的操作系统,ORB_SLAM3是一种全新的视觉SLAM库,它可以实现精准的视觉定位和建图,能够广泛应用于机器人、自动驾驶、虚拟现实等领域。以下是安装ORB_SLAM3的步骤: 1.安装依赖项 首先,必须安装ORB_SLAM3所需的一些依赖项,如Eigen,Boost,OpenCV和Pangolin等。可以在终端窗口运行以下命令进行安装: sudo apt-get install libeigen3-dev sudo apt-get install libboost-all-dev sudo apt-get install libopencv-dev sudo apt-get install libopencv-dev sudo apt-get install libglew-dev sudo apt-get install libsuitesparse-dev 2.克隆ORB_SLAM3库 使用git工具从GitHub上克隆ORB_SLAM3库。运行以下命令: git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 3.构建ORB_SLAM3库 进入ORB_SLAM3目录并构建ORB_SLAM3库。运行以下命令: cd ORB_SLAM3 chmod +x build.sh ./build.sh 4.下载数据集 如果要测试ORB_SLAM3的性能,需要下载一些数据集。运行以下命令,以下载KITTI数据集: ./tools/kitti_downloader.sh 5.测试ORB_SLAM3 最后,可以使用ORB_SLAM3库来测试视觉SLAM的性能。运行以下命令: ./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml path_to_dataset_folder/dataset 在执行此命令,必须将“path_to_dataset_folder”替换为数据集所在的路径。此外,应该将“Examples/Monocular/KITTI00-02.yaml”替换为数据集文件包含的文件。这将运行ORB_SLAM3并显示视觉定位和建图的结果。 总之,使用这些步骤可以在Ubuntu 18.04上成功安装ORB_SLAM3,并进行视觉定位和建图的测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值