草庐IT

工程(十)——github代码ubuntu20.04在ROS环境运行单目和RGBD相机ORB-SLAM3稠密

桦树无泪 2023-04-12 原文

加稠密建图:git@github.com:huashu996/ORB_SLAM3_Dense_YOLO.git

纯净版:git@github.com:huashu996/ORB_SLAM3.git

一. 坑的前言

orb-slam3的整个环境配置还是比较麻烦的,先将一些坑写在前面,供大家参考和避开这些坑。

1.1 主要配置

orb-slam3的配置要求还是很重要的,主要需要安装以下的第三方库和功能包

ubuntu 20.04

ROS noetic

Pangolin 0.6

Eigen 3

Opencv 4.2

usb_cam

1.2 Opencv的坑

其中opencv版本有比较严格的要求,建议先安装ROS中的cv_bridge和libopencv-dev,再安装和libopencv版本号一样的opencv库,这样可以避免opencv的版本冲突问题。

经过博主的多次实验,由于noekit的自带libopencv版本是4.2.0,如果安装opencv3会出现版本冲突使编译不通过。如果安装opencv4但不是4.2.0依然会产生冲突,但编译能够通过,但运行时会出现核心已转储的问题。所以直接安装和libopencv一样的版本。

1.3 Pangolin的坑

Pangolin不要直接选择最新的版本,而是安装0.6的版本,不然同样会出现编译问题。

1.4 核心已转储的坑

不少人在环境配置好和编译成功后,到最后一步运行时出现了核心已转储的问题。博主所遇到的核心已转储问题可以分为两种,一种是运行时闪一下viewer然后直接显示核心已转储,如下图所示。这种情况涉及到的因素主要为opencv的冲突问题以及pangolin的版本,需要重新安装一下。

另一种是运行一段时间出现核心已转储,如下所示,会出现New Map created的字样。这种问题处理比较简单,修改一下CMakelist文件。

New Map created with 118 points
段错误(核心已转储)

二、环境配置

博主默认大家已经安装好ubuntu,替换好镜像源,安装好ROS等一些最基本的操作,网上的资料也很多。下面直接从配置环境的难点去讲述。

2.1 Opencv库

orb-slam3所用到的opencv主要有两个地方,一个是ROS的cv-bridge数据格式转换,另一个是C++的库。根据1.2的叙述按如下顺序进行安装。

  1. cv_bridge

sudo apt-get install libopencv-dev
sudo apt-get install ros-noekit-cv-bridge
  1. opencv

安装过程看到libopencv版本是4.2.0,所以我们就去opencv官网找4.2.0的包,下载下来。

https://opencv.org/releases/

  • 安装opencv的依赖

sudo apt-get install build-essential cmake git 
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev
sudo apt-get install libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy python3-dev python3-numpy
sudo apt-get install libtbb2 libtbb-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
  • 将opencv解压到主目录下

mkdir build && cd build 
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#电脑性能差可去掉-j4,性能很好可增加数字(线程)
make -j4
sudo make install
  • opencv在make过程出现ippicv的下载问题

到官方网址下载对应的ippicv

https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv

#1.将ippicv放入opencv源码中新建立的ippicv文件夹
cd opencv-4.2.0
mkdir ippicv
#2.修改opencv的cmake ippicv下载源
    gedit ~opencv-4.2.0/3rdparty/ippicv/ippicv.cmake
   # 将47行的
     "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"
   # 改为步骤1中手动下载的文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式):
     "/home/cxl/opencv-4.2.0/ippicv/"

重新make opencv即可

  • 添加环境路径

配置OpenCV变量,编辑文件 /etc/ld.so.conf.d/opencv.conf(如果没有就会自动创建):

sudo gedit /etc/ld.so.conf.d/opencv.conf

然后添加 OpenCV4 的 lib 路径:

/usr/local/opencv4/lib

保存退出,执行:

sudo ldconfig

编辑 ~/.bashrc 文件:

sudo gedit ~/.bashrc

最后添加:

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opencv4/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./usr/local/opencv4/lib

保存退出

source ~/.bashrc
  • 验证opencv是否安装

pkg-config --modversion opencv

2.2 Pangolin库

安装Pangolin 0.6(官网下载地址,不要下载最新master版,编译的时候可能有错误)

  1. 安装依赖项

sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev
  1. 编译安装

cd Pangolin 
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install
  1. 验证

cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin
#成功会弹出如下窗口

2.3 Eigen库

直接命令安装即可

sudo apt-get install libeigen3-dev

三.orb-slam3编译运行

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

3.1 编译前修改

(1)解压源文件修改CMakeLists.txt中的opencv路径:

注意需要改两个CMakeLists.txt

ORB_SLAM3/CMakeLists.txt

ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

set(CMAKE_PREFIX_PATH "/usr/local/opencv4.2.0") 
find_package(OpenCV 4.2.0 REQUIRED)

(2)CMakeLists.txt最上方添加:

注意需要改两个CMakeLists.txt

ORB_SLAM3/CMakeLists.txt

ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")改为
 set(CMAKE_CXX_STANDARD 14)

(3)去掉-march=native,避免运行一段时间后核心已转储的问题

注意需要改4个CMakeLists.txt

ORB_SLAM3/CMakeLists.txt

ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

ORB_SLAM3/Thirdparty/DBoW2 /CMakeLists.txt

ORB_SLAM3/Thirdparty/g2o/CMakeLists.txt

# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")

(4)将find_package(Eigen3 3.1.0 REQUIRED)修改为:

find_package(Eigen3 REQUIRED)

(5)安装python2.7:

sudoaptinstall libpython2.7-dev

(6)添加ROS环境:

在编译ros版本时候需要初始化ROS

sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/cxl/workspace/ORB_SLAM3/Examples/ROS
#保存退出
source ~/.bashrc

3.2 编译

经过上述修改后,再进行编译,大概率会通过

cd ORB_SLAM3
chmod +x build.sh
./build.sh

一定先编译build.sh通过后再编译ros版本

cd ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh

3.3 运行

3.3.1 单目

  1. 安装usb_cam

sudo apt-get install ros-noetic-camera-calibration
#启动摄像头
roslaunch usb_cam usb_cam-test.launch

或者源码安装usb_cam

cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
ctakin_make
source ./devel/setup.bash
roslaunch usb_cam usb_cam-test.launch
  1. 相机标定

#启动摄像头
roslaunch usb_cam usb_cam-test.launch
#新开一个终端,开始标定
rosrun camera_calibration cameracalibrator.py --size 10x7 --square 0.0085 image:=/usb_cam/image_raw camera:=/usb_cam --k-coefficients=4

cameracalibrator.py 标定程序需要以下几个输入参数:

–size为棋盘格的规格(内部角点行列个数),

–square为棋盘格的大小(棋盘格的边长,单位是m),

image:=指定了图像的TOPIC,

–k-coefficients为畸变模型参数个数,

camera:=/usb_cam摄像头

–no-service-check禁用

set_camera_info检查服务

都变成绿色位置了就按下CALIBRATE按钮,等一段时间就可以完成标定。完成后点击SAVE保存标定使用的图像以及标定结果,会显示保存地址,可以打开查看,然后再COMMIT退出程序,标定完成。找到标定结果文件后,按照其数据修改Examples_Old/ROS/ORB_SLAM3目录下Asus.yaml。

  1. 运行orb_slam3

在运行程序之前,需要将ORB_SLAM3/Examples_Old/ROS/ORB_SLAM3/src/ros_mono.cc和ORB_SLAM3/Examples_Old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc的接收话题名称更改

    ros::NodeHandle nodeHandler;
    ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
    ros::spin();

之后再运行代码

source /home/cxl/workspace/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build/devel/setup.bash
roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml

3.3.2 RGBD

  1. 配置RealSense D435驱动

#Install ROS Kinetic, on Ubuntu 16.04, ROS Melodic on Ubuntu 18.04 or ROS Noetic on Ubuntu 20.04.
sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
sudo apt-get install ros-noetic-rgbd-launch
#无点云
roslaunch realsense2_camera rs_camera.launch
#有点云生成
roslaunch realsense2_camera demo_pointcloud.launch
# 生成对齐的深度图像
roslaunch realsense2_camera rs_rgbd.launch align_depth:=true
#其他使用说明见官方文档
https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy
#可以进入/opt/ros/noetic/share/realsense2_camera对源码进行修改
  1. 运行orb_slam3

在运行程序之前,需要将ORB_SLAM3/Examples_Old/ROS/ORB_SLAM3/src/ros_rgbd.cc的接收话题名称修改

ros::NodeHandle nh;
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_rect_color", 100);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 100);
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::Image> sync_pol;
message_filters::Synchronizer<sync_pol> sync(sync_pol(10), rgb_sub,depth_sub);
sync.registerCallback(boost::bind(&ImageGrabber::GrabRGBD,&igb,_1,_2));

之后编译运行代码

roslaunch realsense2_camera rs_rgbd.launch align_depth:=true
#一定加上align_depth:=true这样深度图和可见光才能对齐
rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/RealSense_D435i.yaml
  1. RGBD稠密建图

编译

#加入ROS环境
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/cxl/workspace/ORB_SLAM3_Dense_YOLO/Examples/ROS/YOLO_ORB_SLAM3_with_pointcloud_map
source ~/.bashrc
#编译
chmod +x build.sh
chmod +x build_ros.sh
./build.sh
./build_ros.sh

运行

roslaunch realsense2_camera rs_rgbd.launch align_depth:=true
roslaunch YOLO_ORB_SLAM3_with_pointcloud_map camera_topic_remap.launch
rosrun ORB_SLAM3_Dense_YOLO RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/RealSense_D435i.yaml

有关工程(十)——github代码ubuntu20.04在ROS环境运行单目和RGBD相机ORB-SLAM3稠密的更多相关文章

  1. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  2. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  6. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  7. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  8. ruby - vagrant 从 github 安装插件 - 2

    我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com

  9. ruby - 在 Ubuntu 14.04 中使用 Curl 安装 RVM 时出错 - 2

    我试图在Ubuntu14.04中使用Curl安装RVM。我运行了以下命令:\curl-sSLhttps://get.rvm.io|bash-sstable出现如下错误:curl:(7)Failedtoconnecttoget.rvm.ioport80:Networkisunreachable非常感谢解决此问题的任何帮助。谢谢 最佳答案 在执行curl之前尝试这个:echoipv4>>~/.curlrc 关于ruby-在Ubuntu14.04中使用Curl安装RVM时出错,我们在Stack

  10. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

随机推荐