首页 > 系统相关 >VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

时间:2024-05-26 19:59:03浏览次数:32  
标签:usb 记录 虚拟机 修改 SLAM3 报错 单目 txt ORB

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

文章目录

  • 前言
  • 一、ORB_SLAM3源码编译
  • 二、ORB_SLAM3实时单目相机测试
    • 1. 查看摄像头的话题
    • 2. 运行测试
  • 三. 运行测试可能的报错
    • 1. 报错一
      • (1) 问题描述
      • (2) 原因分析
      • (3) 解决
    • 2. 报错二
      • (1) 问题描述
      • (2) 解决


前言

本次教程运行ORB_SLAM3,所需的环境如下:
Ubuntu18.04、ros版本:melodic
Opencv4.5.2、Pangolin0.6、
Boost库1.77.0版本、Eigen3.3.4

注意:以下的教程和所遇到的问题解决,使用的是v0.4-beta版本的ORB_SLAM源码,不同的版本遇到的问题和解决的方法不太一样!!!!!

一、ORB_SLAM3源码编译

所有的环境配置,安装的具体教程和踩坑记录,具体可以参考这篇博客:

这里就不赘述了

二、ORB_SLAM3实时单目相机测试

以usb单目摄像头为例,有安装过相应的驱动的,可直接进入下一步,若是没有,具体的驱动的安装,和相应的配置,具体参考这篇博客:VMware虚拟机中ubuntu使用记录(5)—— 如何在ubuntu中安装USB相机ros驱动并获取usb摄像头数据

1. 查看摄像头的话题

打开终端1:

  roscore

在相机驱动的工作空间目录下,打开终端2:

 source devel/setup.bash                //生效过环境,可跳过此步
 roslaunch usb_cam usb_cam-test.launch      //usb_cam为自己的驱动文件的名字

运行2终端的同时,Ctrl+Alt+T打开终端3:

   rostopic list

列出所有的ROS话题,其中/usb cam/image_raw为我单目摄像头的话题数据,如下图所示:

在这里插入图片描述

2. 运行测试

(1) 修改ros_mono.cc文件
由于本次测试的时单目,故只需在/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目录下找到:ros_mono.cc文件,打开找到并修改成我们自己摄像头的订阅话题(usb_cam/imahe_raw),后面的参数“1”不用修改,如下图所示:

在这里插入图片描述

(2) 编译源码
回到src/ORB_SLAM3主目录再次运行:

chmod +x build_ros.sh
./build_ros.sh

(3) ORB_SLAM3运行相机
1)启动ROS,打开终端1:

roscore

2)开启相机
在自己创建工作空间(我的是catkin_ws/)目录下,打开终端2:

 source devel/setup.bash                    //生效过环境,可跳过此步
 roslaunch usb_cam usb_cam-test.launch      //改成自己的相机启动文件

3)运行ORB_SLAM3
在src/ORB_SLAM3目录下的终端输入:

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/My_camera.yam

指令的参数说明:

rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

1.Mono
代表的是运行单目的意思,本次测试使用的是单目摄像头

2. PATH_TO_VOCABULARY
ORBvoc.txt特征词典文件路径,我的路径是:

/home/chen/catkin_ws/src/ORB_SLAM3/Vocabulary/ORBvoc.txt 

3. PATH_TO_SETTINGS_FILE
即相机设置文件,官方提供的是Asus.yaml,可以另复制命名一个文件My_camera.yaml,将里面的相机参数修改成自己标定过的参数。

(4)最后运行成功的截图:

在这里插入图片描述

三. 运行测试可能的报错

1. 报错一

(1) 问题描述

rosrunORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
时出现如下:段错误(核心已转储),报错的页面如下图所示:

在这里插入图片描述

(2) 原因分析

在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt和ORB_SLAM3/CMakeLists.txt中,使用的是opencv4版本,而在ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists.txt中,要求使用的是OpenCV3的版本,所以最后导致segmentation fault(段错误)。

(3) 解决

以下是在v0.4-beta版本的ORB_SLAM源码上进行的修改解决:修改opencv版本的最低要求,改成统一的opencv3版本
1)修改CMakeLists.txt文件的代码
在ORB_SLAM3/CMakeLists.txt修改为:

在这里插入图片描述

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

在这里插入图片描述

在ROS/ORB_SLAM3/CMakeLists.txt中不变

在这里插入图片描述

修改完成后再次编译源码:

./build.sh

2. 报错二

(1) 问题描述

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

在这里插入图片描述

(2) 解决

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,不出意外就能编译成功!!!!!!

编译成功后,就可以使用自己相机配置文件实时运行ORB_SLAM3

标签:usb,记录,虚拟机,修改,SLAM3,报错,单目,txt,ORB
From: https://blog.csdn.net/2401_82458959/article/details/138426292

相关文章

  • What You See Is What You Get 所见即所得 20240525~0526 心得记录
    #参访《成都味之道生物科技有限公司》#矿泉水250毫升,不浪费Worth:在生活中寻找和理解真正有价值的事物,关注内在价值和意义。Zest:以热情和积极的态度面对生活,享受生活中的每一个瞬间。Discover:不断探索和发现新的事物,不断学习和成长,丰富人生体验。看见工厂里面横幅里面一句话"......
  • 记录一次Redisson使用synchronized和分布式锁不生效的原因
    最近在开发的过程中,遇到了一个并发场景,用户进行方案复制的时候,当快速点击两次操作的时候,出现了复制方案重名的情况,实际上是复制方案的方案名称,是由后端根据数据库已有的方案名称和当前要复制的方案名称进行逻辑处理,保证方案名称不能重复,比如:要复制的方案名称为“我的方案”,......
  • rockchip rk3568 板 LubanCat2 移植 openEuler操作系统记录 (1)
    用惯了fedora体系linux系统的用户,在使用Ubuntu,debian的时候会发现一些命令使用起来不太习惯,而目前嵌入式开发在网上能够搜索到的资料大都是基于ubuntu的。前段时间刚好做过类似的系统移植。所以决定把自己适配LubanCat的点点滴滴记录下来。这次记录分享的内容是向LubanCat-2移植......
  • C# 混淆加密大师1.1.0更新, 新增资源文件加密, 防虚拟机, 异步混淆等新功能
    C#混淆加密大师是一款强大的工具,专为保护C#开发的dll和exe文件而设计,适用于各种应用程序,包括Winform、WPF、Unity游戏以及控制台程序。它支持从.NetFramework2.0到.NetFramework4.x,以及.NETCore2.0直至最新的.NET8版本。C#混淆加密大师不仅提供代码加密混淆功能,还能对EXE文......
  • Java虚拟机揭秘-底层驱动力,性能保障!
    Java虚拟机作为Java技术体系的核心组成部分,其重要性不言而喻。它不仅为Java提供了跨平台的能力,更是Java程序运行的基石。本文将为您深入解析Java虚拟机的工作原理、作用和应用场景,并通过生动的实例让您彻底理解这一关键技术。一、Java虚拟机详细介绍1、什么是Java虚拟......
  • 记录下去年8月到现在的一些变化
    去年8月,我被裁员了,虽说领到N+1但始终觉得这是我职业生涯的耻辱,也许做人不应该这么狭隘,但没办法,纯属个人感觉,因为当初加入这家公司也是被猎头挖过去的,可能自我感觉良好吧。 在家闲了两个月,除了面试就是带娃,还好老婆有工作,全家才不至于没有经济来源,面试也是奇葩,有一天搞定三面直......
  • 解决移植Metasploitable3到VM虚拟机无网络的问题
    第一步导入后不要开机,先在虚拟机设置里面将原有的两个网络适配器移除。第二步接着在选项里面,在客户机操作系统里面,选择MicrosoftWindwos(W),版本选择WindowsServer2008R2x64第三步先打开虚拟机,然后再添加一个网络适配器(没有打开添加不知道行不行,你们可以试试)......
  • 学习redis问题记录
    2024年5月25日倒腾了很长时间突然发现的问题ide提示改为toList()我顺便就改过去了但是实际业务中redis序列化会产生无法反序列化的问题造成缓存挂壁业务直接Gcollect(Collectors.toList())不能缩写为.toList()序列化会炸问题解析:这个问题其实跟代码本身没有直接......
  • LPT200 使用记录
    1.LPT200是串口转wifi的模组,支持STA模式和AP模式(重要需要搞懂)。AT指令参考《HF-LPT200用户手册V1.6(20150720).pdf》注意:所有指令后面带回车换行2.先说AP模式,相当于模组作为一个路由器,电脑连上模组的wifi信号,模组上电默认是AP模式,模组通过USB连上电脑供电后,模组会有wifi......
  • 打算在博客园记录一下我的下棋生活
    如题。我确实对下棋更感兴趣一些,或者说对简单计算/思考更熟悉一些。这段时间在lichess.org上下了一些棋,意识到自己的技术体系有很多漏洞。写博客一直是我用来记录各种知识或者经历的一个手段,于是我打算写一些博客记录一下。这个九步杀是我最近输的棋中最乐的一个。我在互联网......