记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic


  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.rhkb.cn/news/102200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关村第九关——中序遍历与搜索树

1 中序遍历和搜索树原理 二叉搜索树按照中序遍历正好是一个递增序列。其比较规范的定义是&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若它的右子树不为空&#xff0c;则右子树所有节点的值均大于它的根节点的值&…

Linux TCP编程流程

一、TCP编程流程 TCP 提供的是面向连接的、可靠的、字节流服务。TCP的服务器端和客户端编程流程如下&#xff1a; 1.socket()方法 用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。这也是为什么进行网络通信的程序首先要创建一个套接字。创建套接字时…

GB28181视频监控国标平台EasyGBS角色绑定设备通道的功能优化

GB28181视频监控国标平台EasyGBS是基于国标GB28181协议、支持多路设备同时接入的视频监控/视频云服务平台&#xff0c;支持对多平台、多终端分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。国标GB28181平台EasyGBS可提供视频直播监控、云端录像、云存储、检索回放、智能告警…

基于CentOS搭建私有仓库harbor

环境&#xff1a; 操作系统&#xff1a;CentOS Linux 7 (Core) 内核&#xff1a; Linux 3.10.0-1160.el7.x86_64 目录 安装搭建harbor &#xff08;1&#xff09;安装docker编排工具docker compose &#xff08;2&#xff09;下载Harbor 安装包 &#xff08;3&…

OpenCV 中的色彩空间 (C++ / Python)

在本教程中,我们将了解计算机视觉中使用的流行色彩空间,并将其用于基于颜色的分割。我们还将分享 C++ 和 Python 的演示代码。

THUHCSI人机语音交互实验室9篇论文被语音旗舰国际会议INTERSPEECH录用

2023年ISCA国际语音通讯学会年会&#xff08;2023 Annual Conference of the International Speech Communication Association, INTERSPEECH 2023&#xff09;将于2023年8月20日-24日在爱尔兰都柏林召开&#xff0c;清华大学人机语音交互实验室&#xff08;THUHCSI&#xff09…

SpringCloud教程 | 第四篇:断路器(Hystrix)

在微服务架构中&#xff0c;根据业务来拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff08;RPC&#xff09;&#xff0c;在Spring Cloud可以用RestTemplateRibbon和Feign来调用。为了保证其高可用&#xff0c;单个服务通常会集群部署。由于网络原因或者自身…

CentOS7安装部署Doris

文章目录 CentOS7安装部署Doris一、前言1.简介2.环境 二、正文1.Doris基础1&#xff09;架构图2&#xff09;通讯端口 2.部署服务器3.安装基础环境1&#xff09;安装JDK 112&#xff09;安装GCC3&#xff09;设置文件句柄数4&#xff09;关闭交换分区&#xff08;swap&#xff…

Ruoyi安装部署(linux环境、前后端不分离版本)

目录 简介 1 新建目录 2 安装jdk 2.1 jdk下载 2.2 解压并移动文件夹到/data/service目录 2.3 配置环境变量 3 安装maven 3.1 进入官网下载最新的maven 3.2 解压并移动文件夹到/data//service目录 3.3 配置环境变量 3.4 配置本地仓库地址与阿里云镜像 4 安装git 4.…

SQL窗口函数

1、什么是窗口函数 窗口函数可以看作是在分区对记录执行操作的函数&#xff0c;窗口函数功能与group by相似&#xff0c;但不会改变记录行数&#xff0c;因此常用于排名&#xff0c;TopN操作。 2.窗口函数语法形式 窗口函数 over ([partition by 字段名] [order by 字段名]) …

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

湖北黄石三维扫描文物保护修复文物建模3d打印-CASAIM中科广电

三维激光扫描技术在博物馆领域的运用&#xff0c;主要在以下3个方面&#xff1a;文物保护、文物数字化、虚拟博物馆。随着时间的流逝和人类活动的影响&#xff0c;文物不可避免地会受到来自自然或者人为的侵蚀和破坏。由于CASAIM三维激光扫描技术具有不用接触被测量目标、扫描速…

【AIGC】AI工具合集人脸动漫化,老照片修复和视频补帧工具

Paper2GUI: 一款面向普通人的 AI 桌面 APP 工具箱&#xff0c;免安装即开即用&#xff0c;已支持 40AI 模型&#xff0c;内容涵盖 AI 绘画、语音合成、视频补帧、视频超分、目标检测、图片风格化、OCR 识别等领域。支持 Windows、Mac、Linux 系统。 小白兔AI 3.0版起永久免费A…

如何使用NLP库解析Python中的文本

Python是一种强大的面向对象的编程&#xff08;object-oriented programming&#xff0c;OOP&#xff09;语言&#xff0c;在人工智能领域有着广泛的用途。正是鉴于其实用性&#xff0c;以Google为首的大型科技公司&#xff0c;已经对其开发了Tensorflow等代码库&#xff0c;帮…

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么呢&#xff1f; 如今&#xff0c;越来越多的人选择电动滑板作为代步工具或娱乐方式&#xff0c;市场上也涌现出越来越多的电动滑板产品。 &#xff08;图片来源&#xff1a;Backfire Zealot X Belt Drive Electric Skateboard– Backfire Board…

开源TTS+gtx1080+cuda11.7+conda+python3.9吊打百度TTS

一、简介 开源项目&#xff0c;文本提示的生成音频模型 https://github.com/suno-ai/bark Bark是由Suno创建的基于变换器的文本到音频模型。Bark可以生成极为逼真的多语种演讲以及其他音频 - 包括音乐、背景噪音和简单的声音效果。该模型还可以产生非言语沟通&#xff0c;如…

服务器安装centos7踩坑

1、制作启动工具 下载iso https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.20387abbo2RFbn http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.1995f5ad4AhJaW下载 UltraISO https://cn.ultraiso.net/插入u盘启动 到了如图所示页面…

大数据分析案例-基于LightGBM算法构建糖尿病确诊预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

iPhone如何录屏?详细教程大揭秘(最新)

“iphone怎么录屏呀&#xff0c;有人知道吗&#xff1f;用了很久的iphone12了&#xff0c;却不知道录屏功能在哪里&#xff0c;现在需要用来录教程&#xff0c;找也找不到&#xff0c;有人知道iphone录屏在哪里吗&#xff1f;很急&#xff01;” iphone作为一款备受欢迎的智能…

春秋云镜 CVE-2019-16692

春秋云镜 CVE-2019-16692 phpIPAM 1.4 - SQL Injection 靶标介绍 phpIPAM 1.4后台存在SQL Injection。 启动场景 漏洞利用 后台SQL注入&#xff0c;admin/admin888登陆成功。 exp POST /app/admin/routing/edit-bgp-mapping-search.php HTTP/1.1 Host: xxx.com Content-Le…