记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic

news2024/12/23 9:16:12

  1. 由于相机实时在线运行需要ROS,但Ubuntu22.04只支持ROS2,于是重装Ubuntu20.04。
  2. 上一篇文章跑通的是官方版本的ORB_SLAM2,不支持点云显示。高翔修改版本支持RGB-D相机的点云显示功能。

高翔修改版本ORB_SLAM2:https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map

环境:ubunntu20.04、opencv3.4.12编译、pangolin0.5编译、PCL1.10、eigen3.3.7、ROS noetic

  • 查看PCL版本:dpkg -l | grep libpcl
  • 查看eigen版本:pkg-config --modversion eigen3

备注:我先编译的OpenCV3.4.12,再装的ROS noetic,后面一直用的OpenCV3.4.12编译和运行,普通编译和运行问题比较少。但在ROS编译和运行时遇到了很多问题,主要是ROS noetic自带OpenCV4.2.0会和编译的OpenCV3.4.12出现版本冲突,基于ROS编译时由于会使用到cv_bridge,默认调用OpenCV4.2.0,网上也有一些方案修改cv_bridge,但十分麻烦,后来发现直接用OpenCV4编译源代码,只需要修改个别报错,相对简单。因此,可以在配置环境的时候,优先装ROS noetic,自带OpenCV4.2,就可以不用装OpenCV3.4.12了,把报错改一改即可,不用考虑版本冲突带来的奇奇怪怪的报错。


普通编译(以下使用OpenCV3.4.12编译)

  1. 只需要其中的子文件夹 ORB_SLAM2_modified、需要原始ORB SLAM2官方版本中的Vocabulary文件夹
  2. 删除三个build文件夹
ORB_SLAM2_modified/build
ORB_SLAM2_modified/Thirdparty/DBoW2/build 
ORB_SLAM2_modified/Thirdparty/g2o/build 
  1. 编译
chmod +x build.sh
./build.sh

出现一堆pcl相关的报错
在CmakeLists.txt中增加set(CMAKE_CXX_STANDARD 14)
重新编译,就只有eigen3相关的警告了

普通运行

高翔修改的点云版本好像只支持RGBD的点云显示,使用双目运行时,出现当前帧和map Viewer都可以显示、PCL窗口(按R键标准可视化)全黑的情况。而且终端输出显示Global map的Size一直为0。

./bin/stereo_euroc Vocabulary/ORBvoc.bin Examples/Stereo/EuRoC.yaml /home/juling/Documents/data/MH_01_easy/mav0/cam0/data /home/juling/Documents/data/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt

双目运行终端
于是跑了一下RGBD的例子,看一下点云是否有输出,排除一下情况。

./bin/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml /home/juling/Documents/data/rgbd_dataset_freiburg1_xyz Examples/RGB-D/associations/fr1_xyz.txt

可以实时显示点云。保存为pcd文件,用pcl_viewer打开。
黑白点云
修改如下代码,恢复彩色点云图。
在这里插入图片描述

稠密程度:TUM1.yaml中的PointCloudMapping.Resolution参数可改变点云稠密程度。
下图左边是0.00001,右边是0.01的情况。

彩色点云

ROS编译

安装ROS Noetic:http://wiki.ros.org/noetic/Installation/Ubuntu

# 配置环境变量
sudo gedit ~/.bashrc
添加source /opt/ros/noetic/setup.bash
source ~/.bashrc

使用ROS编译前,在bashrc中添加环境变量,然后在终端echo一下,看输出是否正确。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/juling/Documents/projects/ORBSLAM2_with_pointcloud_map-master/ORB_SLAM2_modified
echo $ROS_PACKAGE_PATH

备注: 如果添加的ORB_SLAM的ROS路径在setup.bash路径的前面, echo路径的时候,发现路径没有更改。所以将export的路径放在最后一行即可。

错误一:ModuleNotFoundError: No module named ‘rospkg’

pip install rospkg  

错误二:Unable to find either executable ‘empy’ or Python module ‘em’… try installing the package ‘python3-empy’

pip install python3-empy

错误三:一堆PCL相关报错POINT_CLOUD_REGISTER_POINT_STRUCT

CmakeList.txt中添加set(CMAKE_CXX_STANDARD 14)

错误四:fatal error: pcl/common/transforms.h: No such file or directory 25 | #include <pcl/common/transforms.h>

# CmakeLists.txt中增加PCL库相关
find_package(PCL REQUIRED ) #修改后的

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
${PCL_LIBRARIES} #修改后的

错误五:undefined reference to symbol,error adding symbols: DSO missing from command line
在ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/CMakeLists.txt文件中添加-lboost_system没有解决问题
应该是OpenCV3与ROS自带OpenCV4冲突的问题
github issues:https://github.com/raulmur/ORB_SLAM2/issues/990
参考解决:https://blog.csdn.net/YLYwj/article/details/131766994


sudo apt install mlocate
locate libopencv_imgproc.so
locate libopencv_core.so

可以看到相关文件的路径,一般在/usr/lib/x86_64-linux-gnu/文件夹下搜索,即可找到libopencv_imgproc.so.4.2.0和libopencv_core.so.4.2.0文件,复制到ORB_SLAM2_modified/lib文件夹中,然后ORB_SLAM2/Examples/ROS/ORB_SLAM2路径下的CmakeLists.txt中添加两行。

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
${PCL_LIBRARIES} ####### 5
#-lboost_system ####### 6
${PROJECT_SOURCE_DIR}/../../../lib/libopencv_imgproc.so.4.2.0  ####### 7
${PROJECT_SOURCE_DIR}/../../../lib/libopencv_core.so.4.2.0	####### 8

重新编译以后,编译通过。但有版本冲突的警告。

ROS运行

roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true

运行报segmentation fault (core dumped) 错误。
修改Example/ROS下的CmakeLists.txt,删除-march=native重新编译,没有解决问题。

有没有可能是点云版本的只支持RGBD的ROS功能包,用RGBD试一下,排除一下问题。
https://vision.in.tum.de/data/datasets/rgbd-dataset/download

roscore
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play --pause /home/juling/Documents/data/rgbd_dataset_freiburg1_room.bag

rosrun仍然报核心已转储的错误。应该是OpenCV版本冲突的问题,因为基于OpenCV3编译成功以后,有警告。


删除所有build的文件夹,修改所有CmakeLists.txt中的OpenCV版本为4.2.0,重新进行普通编译(因为ROS编译需要用到DBoW2和g2o),再进行ROS编译。

find_package(OpenCV 4.2 QUIET)

错误:error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope

修改所有的CV_LOAD_IMAGE_UNCHANGED为cv::IMREAD_UNCHANGED即可

此时编译通过,且没有版本冲突的警告。


再次运行RGBD的例子。此时,报了一个pcl no data的错误。并且出现bag运行,map Viewer以及点云窗口都无显示的情况。
在这里插入图片描述

注意:TUM 数据官网中提到 “factor = 5000 # for the 16-bit PNG files,OR: factor = 1 # for the 32-bit float images in the ROS bag files”。这个问题就是5000是普通模式下的,此处是ROS模式。将TUM1.yaml复制出来,重命名为TUM1_ROS.yaml,并将深度校正系数DepthMapFactor改为1.0。即可解决这个问题。另外,注意前面提到的bashrc中的ROS_PACKAGE_PATH。


运行成功。

在这里插入图片描述
参考:
https://blog.csdn.net/Evanzxh/article/details/120993982
https://www.jianshu.com/p/5e7b8358893f
https://blog.csdn.net/crp997576280/article/details/104220926/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/911114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中css修改滚动条样式

vue中css修改滚动条样式 效果图&#xff1a; 代码(在app.vue中全局增加下面样式即可)&#xff1a; &::-webkit-scrollbar {width: 8px;height: 8px;border-radius: 3px;}/*定义滚动条轨道 内阴影圆角*/&::-webkit-scrollbar-track {//-webkit-box-shadow: inset 0 0 …

服务器的介绍

1.服务器概述 1.1 服务器的基本概念 服务器是计算机的一种&#xff0c;是网络中为客户端计算机提供各种服务的高性能计算机&#xff1b; 服务器在网络操作系统的控制下&#xff0c;将与其相连的硬盘、磁带、 打印机及昂贵的专用通讯设备提供给网络上的客户站点共享&#xf…

HTML动态爱心特效代码【一】(附源码)

前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直接使用。 效果演示 文案修改 var loverNam…

2023七夕小程序

又是一年七夕节 往年七夕小程序 2020 https://blog.csdn.net/chen_227/article/details/107062998 2022 视频 QiXi2022 代码 https://gitee.com/chen227/qixi2022-qt-qml 2023 效果 代码 https://gitee.com/chen227/qixi2023-qt-qml

ICC2工具如何避免对mux选择信号端口进行检查

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f;拾陆楼知识星球入口 time.clock_gating_user_seeting_only这个option设置成false&#xff0c;导致对选择器的S端进行了时序分析&#xff0c;进而可能出现违例。 设置成true即可。

cuda面试准备(一),架构调试

1 cuda架构 硬件方面 SP (streaming Process) ,SM (streaming multiprocessor) 是硬件(GPUhardware) 概念。而thread,block,grid,warp是软件上的(CUDA) 概念 SP:最基本的处理单元,streaming processor,也称为CUDA core,最后具体的指令和任务都是在SP上处理的。GPU进行并行…

QT中按钮的基类QAbstractButton

QT中按钮的基类QAbstractButton 关于控件类的学习方法继承关系信号槽函数标题和图标按钮的 Check 属性 关于控件类的学习方法 控件类很多&#xff0c;API更多&#xff0c;但是不需要记忆知道控件对应的类名&#xff0c;通过帮助文档随用随查优先看帮助文档中控件对应的信号和槽…

速通蓝桥杯嵌入式省一教程:(八)ADC测量模拟电压

ADC(Analog to Digital Converter)&#xff0c;模拟数字转换器&#xff0c;是电子工程师必须掌握的一个内容。由于单片机、计算机等是由0和1组成的&#xff0c;因此其无法直接测量或使用连续的模拟信号&#xff0c;需要用ADC将模拟信号转换为离散的数字信号。ADC的具体原理在此…

AM62x GPMC并口如何实现“小数据-低时延,大数据-高带宽”—ARM+FPGA低成本通信方案

GPMC并口简介 GPMC(General Purpose Memory Controller)是TI处理器特有的通用存储器控制器接口&#xff0c;支持8/16bit数据位宽&#xff0c;支持128MB访问空间&#xff0c;最高时钟速率133MHz。GPMC是AM62x、AM64x、AM437x、AM335x、AM57x等处理器专用于与外部存储器设备的接口…

SpringCloud之Stream3.0广播消息

SpringCloud之Stream消息驱动RocketMQ讲解_rocketmq stream_爱吃牛肉的大老虎的博客-CSDN博客3.0使用的函数式消费&#xff0c;如果使用广播消费&#xff0c;就是配置2个group&#xff0c;destination和生产者保持一致即可 spring.cloud.stream:bindings:testData-in-0:destin…

【3Ds Max】可编辑多边形“边”层级的简单使用

目录 简介 示例 1. 编辑边 &#xff08;1&#xff09;插入顶点 &#xff08;2&#xff09;移除 &#xff08;3&#xff09;分割 &#xff08;4&#xff09;挤出 &#xff08;5&#xff09;切角 &#xff08;6&#xff09;焊接 &#xff08;7&#xff09;桥 &…

一阶线性微分方程

形如&#xff1a; y ′ p ( x ) y q ( x ) (1.first) y p(x)y q(x) \tag{1.first} y′p(x)yq(x)(1.first) 的方程叫做一阶线性微分方程。 同济版教材的求解方法是常数变异法&#xff0c;初次接触感觉主编的脑回路异常清奇&#xff0c;自己怎么也get不到核心要义。一直到现…

隧道HTTP具备的条件

作为一名专业的爬虫代理供应商&#xff0c;我们都知道使用代理是保证爬虫的高效性和稳定性的重要手段之一。而隧道代理则是近年来备受推崇的一种代理形式&#xff0c;它通过将请求通过隧道传输&#xff0c;可以有效地隐藏爬虫的真实IP地址&#xff0c;提高爬虫的反爬能力。 在…

【中危】 Apache NiFi 连接 URL 验证绕过漏洞 (CVE-2023-40037)

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具。 在受影响版本中&#xff0c;由于多个Processors和Controller Services在配置JDBC和JNDI JMS连接时对URL参数过滤不完全。使用startsWith方法过滤用户输入URL&#xff0c;导致过滤可以被绕过。攻击者可以通过构造特…

【面试】项目经理面试题

文章目录 一、项目管理面试中通常会问到的问题1.项目管理软件工具知识2.做项目计划的技能3.人员管理技能4.沟通技巧5.方法论知识 二、问面试官的问题三. 面试系列推荐 一、项目管理面试中通常会问到的问题 1.项目管理软件工具知识 问题 1: 工期和工作量之间的差异是什么? 答案…

仓库管理的重点在哪?仓库管理能有哪些软件?

对于做实体生意的中小商户来说&#xff0c;仓库管理工作是重中之重的&#xff0c;仓库管理的好坏&#xff0c;直接影响着门店销售和财务状况。 但对于很多中小商户来说&#xff0c;没有足够的人力和精力去高效地做好仓库管理工作&#xff0c;而借助仓库管理软件或进销存软件来…

带你了解—在外远程群晖NAS-群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

为什么伦敦金的止损不灵了?

由于止损会给我们带来资金账户上的损失&#xff0c;所以我们已经很怕面对止损&#xff0c;但是很矛盾的是&#xff0c;我们在市场中又必须要面对止损&#xff0c;因为如果脱离了止损&#xff0c;对我们的交易危害将会很大&#xff0c;所以我们必须正视止损&#xff0c;并且用正…

基于微信小程序的校园失物招领平台的研究与实现(2.0版本,附源码,教程)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 基于微信小程序的校园失物招领小程序 本课题的研究目的就是设计一款基于微信小程序的失物招领系统…

推荐两款在线免费的可视化网页编辑器:Layoutit!和RXStudio

2023年8月22日&#xff0c;周二上午 今天看Boost库的html文档时&#xff0c;突然也想自己写一个这样的html文档&#xff0c;但又不想手敲代码&#xff0c; 于是在网上找到了很多可视化的网页编辑器&#xff0c;最后我觉得这两款编辑器比较好用。 目录 Layout! 官网使用体验使…