当前位置: 首页 > news >正文

记录: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/

相关文章:

记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic

由于相机实时在线运行需要ROS&#xff0c;但Ubuntu22.04只支持ROS2&#xff0c;于是重装Ubuntu20.04。上一篇文章跑通的是官方版本的ORB_SLAM2&#xff0c;不支持点云显示。高翔修改版本支持RGB-D相机的点云显示功能。 高翔修改版本ORB_SLAM2&#xff1a;https://github.com/ga…...

文心问数Sugar Bot :大模型+BI,多轮会话自动生成可视化图表与数据结论

Sugar BI 的文心问数功能是基于大语言模型实现的&#xff0c;支持您使用自然语言&#xff0c;通过多轮会话的方式&#xff0c;获取实时数据的图表展现&#xff0c;也可以自动为您总结与图表相关的业务结论。 文心问数功能邀测中&#xff0c;欢迎CSDN的用户前来报名&#xff1a;…...

21、WEB漏洞-文件上传之后端黑白名单绕过

目录 前言验证/绕过 前言 关于文件上传的漏洞&#xff0c;目前在网上的常见验证是验证三个方面&#xff1a; 后缀名&#xff0c;文件类型&#xff0c;文件头&#xff0c;其中这个文件头是属于文件内容的一个验证 后缀名&#xff1a;黑名单&#xff0c;白名单 文件类型&#xf…...

windows的django项目部署到linux的docker上

编辑dockerfile文件&#xff0c;可以自行寻找相关教程 创建镜像 docker bulid -t imagename:tag .查看镜像 docker images 如果想自己先试一下&#xff0c;那就需要运行容器 docker run -it -d -p 8000:8000 --name volume_name imagename:tag 查看容器 docker ps -a 进…...

【力扣】70. 爬楼梯 <动态规划>

【力扣】70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. …...

数据结构(3)

线性表是多个具有相同特征的数据的有限序列。 前驱元素&#xff1a;A在B前面&#xff0c;称A为B的前驱元素。 后继元素&#xff1a;B在A后面&#xff0c;称B为A的后继元素。 线性表特征&#xff1a; 1.一个元素没有前驱元素&#xff0c;就是头结点&#xff1b; 2.最后一个…...

深入浅出Pytorch函数——torch.nn.init.xavier_uniform_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

优橙内推安徽专场——5G网络优化(中高级)工程师

可加入就业QQ群&#xff1a;801549240 联系老师内推简历投递邮箱&#xff1a;hrictyc.com 内推公司1&#xff1a;浙江省邮电工程建设有限公司 内推公司2&#xff1a;北京宜通华瑞科技有限公司 内推公司3&#xff1a;浙江明讯网络技术有限公司 浙江省邮电工程建设有限公司 …...

2023年计算机设计大赛国三 数据可视化 (源码可分享)

2023年暑假参加了全国大学生计算机设计大赛&#xff0c;并获得了国家三等奖&#xff08;国赛答辩出了点小插曲&#xff09;。在此分享和记录本次比赛的经验。 目录 一、作品简介二、作品效果图三、设计思路四、项目特色 一、作品简介 本项目实现对农产品近期发展、电商销售、灾…...

工业生产全面感知!工业感知云来了

面向工业企业数字化转型需求&#xff0c;天翼物联基于感知云平台创新能力和5G工业物联数采能力&#xff0c;为客户提供工业感知云服务&#xff0c;包括工业泛协议接入、感知云工业超轻数采平台、工业感知数据治理、工业数据看板四大服务&#xff0c;构建工业感知神经系统新型数…...

Lnton羚通关于Optimization在【PyTorch】中的基础知识

OPTIMIZING MODEL PARAMETERS &#xff08;模型参数优化&#xff09; 现在我们有了模型和数据&#xff0c;是时候通过优化数据上的参数来训练了&#xff0c;验证和测试我们的模型。训练一个模型是一个迭代的过程&#xff0c;在每次迭代中&#xff0c;模型会对输出进行猜测&…...

冒泡排序算法

//version 1 void bubblesort(vector<int>& nums){int n=nums.size();for(int i...

无人机航管应答机 ping200XR

产品概述 ping200XR是一个完整的系统&#xff0c;旨在满足航管应答器和自动相关监视广播(ADS-B)的要求&#xff0c;在管制空域操作无人航空系统(UAS)。该系统完全可配置为模式A&#xff0c;模式C&#xff0c;模式S转发器和扩展ADS-B发射机的任何组合。ping200XR包括一个精度超…...

oracle归档日志满了导致启动不起来解决

oracle启动不起来解决 原因&#xff1a;闪回归档区的空间满了 [oraclepre-oracle ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 22 14:48:50 2023Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to: Oracle Database 11g…...

高等数学:线性代数-第二章

文章目录 第2章 矩阵及其运算2.1 线性方程组和矩阵2.2 矩阵的运算2.3 逆矩阵2.4 Cramer法则 第2章 矩阵及其运算 2.1 线性方程组和矩阵 n \bm{n} n 元线性方程组 设有 n 个未知数 m 个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a …...

星戈瑞分析FITC-PEG-Alkyne的荧光特性和光谱特性

​欢迎来到星戈瑞荧光stargraydye&#xff01;小编带您盘点&#xff1a; FITC-PEG-Alkyne的荧光特性和光谱特性是对其荧光性能进行分析的方面。以下是FITC-PEG-Alkyne的一些常见荧光特性和光谱特性&#xff1a; **1. 荧光激发波长&#xff1a;**FITC-PEG-Alkyne的荧光激发波长通…...

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用

VB6写的ActiveX EXE公共对象是外置进程&#xff0c;因此&#xff0c;尽管它是x86 32位的进程&#xff0c;但可以集成到 VB.NET的x64和x32程序中使用。 VS2022的VB.NET程序&#xff0c;调用ActiveX DLL对象我在上篇笔记中写了 VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeB…...

深入了解Unity的Physics类:一份详细的技术指南(七)(下篇)

接着上一篇深入了解Unity的Physics类(上篇)&#xff0c;我们继续把Physics类剩余的属性和方法进行讲解 碰撞检测和忽略: (这些方法和属性涉及查询和处理物体之间的碰撞) Physics.CheckBox: 检查给定位置的盒子是否与任何碰撞器接触或者位于任何碰撞器内部。 Physics.CheckCapsu…...

C++入门:引用是什么

目录 1.引用的概念 2.引用的特征 3.常引用 4.引用使用场景 5.传值&#xff0c;传引用效率比较 6.引用与指针的区别 1.引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用…...

2023年人工智能与自动化控制国际学术会议(AIAC 2023)

2023年人工智能与自动化控制国际学术会议&#xff08;AIAC 2023&#xff09; The 2023 International Conference on Artificial Intelligence and Automation Control 2023年人工智能与自动化控制国际学术会议&#xff08;AIAC 2023&#xff09;将于2023年10月27-29日在中…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...