Ubuntu20.04中ros运行ORBSLAM2_with_pointcloud_map(采用D435相机实时运行)


前言

第一次运行,有些坑,然后告诉一下大家该如何自己解决的思路,毕竟每个人的实际运行环境不一样。
系统:联想Y7000,Ubunru20.04(已经安装ros noetic,推荐小鱼的一键安装ros)直接终端输入:

wget http://fishros.com/install -O fishros && . fishros

显卡驱动已经安装好,采用的GPU1050Ti
显卡安装,建议就用系统自带的安装方式(设置里面有附加驱动,点击一下,等一会就好)
如果不幸没有那就要手动安装了,给大家一个我之前参考的链接:link
自己电脑的显卡切换以及查看:

sudo prime-select nvidia # 切换nvidia显卡
sudo prime-select intel  # 切换intel显卡
sudo prime-select query  # 查看当前使用的显卡

如果大家的和我的一样那么将会自带下列环境(pcl1.10 opencv4.2.0 eigen3.3.7
可以用下列两条命令查看(随便哪一条都可以),以eigen3为例:

apt-show-versions | grep eigen3
或
pkg-config --modversion eigen3

说了一些有的没的,但这些后续学习都得安装,不然图形化太卡了。
目标:使用ros运行的软件包ORBSLAM2_with_pointcloud_map


一、前期准备

源码下载:

git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git
https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git

1.提取orbslam2_modified.zip文件
2.将这个文件夹下两个文件夹都放到上一级目录,进行覆盖和替换,然后就可以删除orbslam2_modified文件夹了
3.然后下载

git clone https://github.com/wylnii/ORBSLAM2_with_pointcloud_map.git

4.替换原包中的ORB_SLAM2_modified文件夹下的所有文件
(注意这次编译的是不带闭环的稠密见图)
5.闭环稠密建图采参考带闭环的稠密建图
下载地址如下

https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git

二、pangolin0.5安装以及opencv3.4.5

pangolin0.5安装

下载源码包进行安装

git clone https://github.com/cheukwaylee/Pangolin-0.5.git

如果下载太慢的,建议执行下列命令:

git clone https://ghproxy.com/https://github.com/cheukwaylee/Pangolin-0.5.git

配置环境

 sudo apt-get install libglew-dev
 
 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
 

然后安装,我用的-j6,电脑配置不好的用-j2吧

cd Pangolin
mkdir build
cd build
cmake ..
make -j6
sudo make install

因为没有指定安装路径,所以默认安装在usr下bin,lib,local,share,include
如果出现编译安装错误,首先给大家的建议是看报错信息,将报错信息粘贴到CSDN上,一般都有解决方案的,然后按要求改就好了。给大家贴一个比较全的报错解决连接pangolin报错解决

opencv3.4.5安装

由于安装ros noetic后系统里面就安装了opencv4,在进行ORBSLAM2_with_pointcloud_map源码编译会出出现很多opencv头文件报错,这是因为opencv4中头文件进行了一些修改,需要你自己一个个去重新找一下修改。
源码包下载:
opencv3.4.5下载
安装依赖

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev 

这里说一下自定义安装到某一个位置的指令-D CMAKE_INSTALL_PREFIX=,后续要用的。
等号后面就是你想要安装的位置,我是在/usr/local/下建立一个文件夹opencv3.4.5,路径就如下图

cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.5  -D CMAKE_BUILD_TYPE="Rlease" -D OPENCV_GENERATE_PKGCONFIG=ON ..
//下面是带有第三方的cv附加库,自己改一下文件位置
sudo cmake -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.5 -D OPENCV_EXTRA_MODULES_PATH=~/ThirdParts/opencv-3.4.5/opencv_contrib-3.4.5/modules opencv-3.4.5/opencv_contrib-3.4.5/modules/ -DOPENCV_ENABLE_NONFREE=True -D OPENCV_GENERATE_PKGCONFIG=ON..

编译安装:

cd opencv3.4.5
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.5  -D CMAKE_BUILD_TYPE="Rlease" -D OPENCV_GENERATE_PKGCONFIG=ON ..
make -j6
sudo make install

相关配置:

# 第一步
sudo gedit /etc/ld.so.conf.d/opencv.conf
输入:
/usr/local/opencv3.4.5/lib

# 第二步
sudo ldconfig 
sudo gedit ~/.bashrc 
在末尾输入:
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opencv3.4.5/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/opencv3.4.5/lib

# 第三步
source ~/.bashrc
sudo updatedb
pkg-config --modversion opencv
出现3.4.5即可
pkg-config --modversion opencv4
出现4.2.0是ros中的版本

在后续改CMakeLists时候:
在find(OpenCV REQUIRED)前输入:set(CMAKE_PREFIX_PATH “/usr/local/opencv3.4.5”)
参考链接在已有OpenCV4的情况下安装OpenCV3

三、D435相机驱动安装

下载realsense SDK,源码链接:

https://gitcode.net/mirrors/intelrealsense/librealsense.git

安装相关依赖:

sudo apt install libudev-dev pkg-config libgtk-3-dev
sudo apt install libusb-1.0-0-dev pkg-config
sudo apt install libglfw3-dev
sudo apt install libssl-dev

安装权限脚本

cd ~/librealsense
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger

编译安装

cd Pangolin
mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make -j6
sudo make install

测试驱动是否安装成功,要插上相机

cd librealsense/build/examples/capture
./rs-capture
会看到画面
然后结束运行,重新开一个终端输入
realsense-viewer
是一个图形化界面
另外一种方案
1.注册密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
2.添加服务器
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
3.安装realsense-viewer的libraries
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
4.安装开发者和debug的包
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
5.验证
realsense-viewer

有报错或者想在ros下运行的可以参考下面链接
参考链接ubuntu20.04 安装RealSenseD435驱动

四、ORBSLAM2_with_pointcloud_map编译执行

为了后期不会出现奇怪的问题,比如你都全部make成功了,能显示图像,但是相机移动就段错误(核心已转储),前期先改一下CMakeLists.txt文件。

编译g2o_with_orbslam2包
j6看自己的电脑性能行不行。
这一步问题不大,有问题参考这个链接,都可以解决的。
高翔分享ORBSLAM2_with_pointcloud_map安装问题总结
还有问题就贴error到CSDN,都有解决方案
然后进行编译

cd g2o_with_orbslam2
mkdir build
cmake ..
make -j6

更改ORB_SLAM2_modified包配置

先打开ORB_SLAM2_modified下的CMakeLists.txt文件,改一些配置

1.将这个-march=native删除,不然后续会出现核心已转储的报错,其实主要是g2o的第三方库里面的需要删除,
但是避免问题,每一个CMakeLists.txt文件里的-march=native我都删除了

2.为了避免pcl的编译问题,在第三行加
set( CMAKE_CXX_STANDARD 14)

3.opencv3.4.5配置,在find_package(OpenCV 3.0 REQUIRED)上一行添加,其实每一个文件中用到opencv都得这样设置
set(CMAKE_PREFIX_PATH "/usr/local/opencv3.4.5")

4.Eigen3 改为对应的版本
find_package(Eigen3 3.3.7 REQUIRED)

5.pcl的版本
find_package( PCL 1.10 REQUIRED )

编译Thirdparty包

不建议直接跑build.sh文件,出现问题不好改
打开build.sh文件,自己逐个编译,有问题也好找
小技巧吧,先make -j6,出现问题后再make,可以很快定位错误处
-----------------------------------------------------
DBoW2里的CMakeLists.txt文件也需要改
这个-march=native删除
在find_package(OpenCV 3.0 REQUIRED)上一行添加
set(CMAKE_PREFIX_PATH "/usr/local/opencv3.4.5")
----------------------------------------------
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j6
---------------------------------------------
g2o里的CMakeLists.txt文件也需要改
这个-march=native删除
--------------------------------------------------
cd Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j6
-------------------------------------------------
下载ORBvoc.txt.tar.gz放置于Vocabulary文件夹下
git clone https://github.com/raulmur/ORB_SLAM2.git
将ORB_SLAM2中的Vocabulary下的ORBvoc.txt.tar.gz放置于Vocabulary文件夹下
然后解压就好
-----------------------------------------------
将其转化为二进制
./tools/bin_vocabulary

编译ORB_SLAM2_modified包

cd ORB_SLAM2_modified/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j6

这里错误比较多,不过也还好

在下列源码中加入#include<unistd.h>
可能漏了一些,大家按照报错信息可以改的,主要还是在源码的修改上,CSDN上给出了解决方案

Examples/Monocular/mono_kitti.cc

Examples/Monocular/mono_tum.cc

Examples/RGB-D/rgbd_tum.cc

Examples/Stereo/stereo_euroc.cc

Examples/Stereo/stereo_kitti.cc

src/LocalMapping.cc

src/LoopClosing.cc

src/System.cc

src/Tracking.cc

src/Viewer.cc

ros下编译ORB_SLAM2_modified包
配置一下电脑环境

gedit ~/.bashrc
# 添加一下命令,如果以前配置过ORB_SLAM2ROS的话,需要将以前的配置注释掉
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/你的目录/ORB_SLAM2_modified/Examples/ROS
保存,关闭
source ~/.bashrc
sudo updatedb
rospack profile
echo ${ROS_PACKAGE_PATH} 
会出现你刚刚加的ros路径

编译:

cd Examples/ROS/ORB_SLAM2
CMakeLists.txt文件,改一些配置,还是和之前一样
1.set( CMAKE_CXX_STANDARD 14)
2.-march=native删除
3.修改对应版本
set(CMAKE_PREFIX_PATH "/usr/local/opencv3.4.5")
find_package(OpenCV 3.0 QUIET)
find_package(Eigen3 3.3.7 REQUIRED)
find_package(PCL 1.10 REQUIRED)
4.这个要改一下,如下
set(LIBS
        ${OpenCV_LIBS}
        ${EIGEN3_LIBS}
        ${Pangolin_LIBRARIES}
        ${PCL_LIBRARIES}
        ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
        ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
        ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
        -lboost_system
        # opencv_core3 
        # opencv_imgproc3
        # opencv_highgui3
        )
-------------------------------------------------------

mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j6
老规矩,出现啥错误就找,然后改,只要不是cmake阶段出错,都能解决
我在这个阶段出现过cmake在manifest.xml文件出现问题的
是python问题,可能是你的python指向的是2.7,而cmake是要版本3以后的
解决方案:软链接
sudo ln -snf /usr/bin/python3 /usr/bin/python
------------------------------------
ln -s A B:是将BA
更改链接指向ln -snf C B:是将BC
在usr/bin文件下查看python的链接情况
ls -al *python*

五、执行

如果上面的你都make通过了,那么恭喜,可以开始跑代码了(可以跑实物,也可以跑数据包)这里我都说一下:
数据包运行
TUM数据集
2.放在自己能找到的目录,建议和Example同级,建立一个data文件夹,解压在里面
这里associations.txt 文件是使用associate.py处理的得到的

 python associate.py 路径/rgb.txt 路径/depth.txt > associations.txt
 Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml data/rgbd_dataset_freiburg1_xyz data/rgbd_dataset_freiburg1_xyz/associations.txt 
这里出现一个报错:
./Examples/RGB-D/rgbd_tum: symbol lookup error:
 ./Examples/RGB-D/rgbd_tum: undefined symbol: 
 _ZN9ORB_SLAM26SystemC1ERKSsS2_NS0_7eSensorEb

我使用c++filt  _ZN9ORB_SLAM26SystemC1ERKSsS2_NS0_7eSensorEb 查看
ORB_SLAM2::System::System
(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&,
 std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, 
 ORB_SLAM2::System::eSensor, bool)
参数输入有问题,mono是4个参数,RGBD5个参数,stereo是6个参数

 RGB-D执行参数顺序:5个,以空格分隔
*	1.可执行文件:rgbd_tum
*	2.离线词典文件:ORBvoc.txt
*	3.参数文件:TUM1.yaml	(下载的数据集freiburg1/2/3分别对应TUM1/2/3.yaml)
*	4.RGB-D文件夹:如rgbd_dataset_freiburg1_desk
*	5.RGBD对齐信息文件:associations.txt

————————————————
 Monocular执行参数顺序:5个,以空格分隔
 1. 1.可执行文件:mono_tum
 2. 2.离线词典文件:ORBvoc.txt
 3. 3.参数文件:TUM1.yaml	(下载的数据集freiburg1/2/3分别对应TUM1/2/3.yaml)
 4. 4.RGB文件夹:如rgbd_dataset_freiburg1_desk

————————————————
 Stereo执行参数顺序:6个,以空格分隔
*	1.可执行文件:stereo_euroc
*	2.离线词典文件:ORBvoc.txt
*	3.参数文件:EuRoC.yaml
*	4.相机0数据文件夹:如 V1_03_difficult/mav0/cam0/data
*	5.相机1数据文件夹:如 V1_03_difficult/mav0/cam1/data
*	6.相机01对齐信息文件:EuRoC_TimeStamps/V103.txt

————————————————
建议使用bin文件下的可执行文件(当然Example子文件里的也可以)
./bin/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml data/rgbd_dataset_freiburg1_xyz data/rgbd_dataset_freiburg1_xyz/associations.txt

D435相机运行

修改ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc文件,
把rgb_topic和depth_topic订阅话题修改为
 "/camera/color/image_raw";
 "/camera/aligned_depth_to_color/image_raw";
----------------------------------------------------
roslaunch realsense2_camera rs_rgbd.launch
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml 

参考:
https://blog.csdn.net/subiluo/article/details/88975979
https://blog.csdn.net/weixin_43828675/article/details/117421064

总结

其实把这个运行出来后,ORB-SLAM2也可以跑出来了,步骤一样的,主要困难点在于过程中的不断报错,需要自己去一个个的解决,我自己也碰到了很多坑,好歹一个个的都解决了,希望这个能帮到大家!

  • 15
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值