Ubuntu18.04使用INDEMIND相机实时运行ORB_SLAM3

      主页里有ubuntu20.04使用INDEMIND实时运行ORB_SLAM3,除非你是有别东西必须要用20.04,否则非常不建议使用20.04来跑这个东西!

       写在前面:本文旨在用最少的废话写INDEMIND运行ORB_SLAM3,但是篇幅依旧很长,因为他的坑太多了!请读者一定要认真看完每一行,我只写重点,尽量帮读者避坑。
       不使用ORB_SLAM3官方源码!使用INDEMIND公司修改过的ORB_SLAM3代码(该公司对ORB_SLAM3代码做了修改,但是不触及算法部分,只是修改了比如接收相机/imu话题、标定参数、Cmakelist等)链接:https://github.com/INDEMIND/ORB-SLAM3-Course
强烈建议使用INDEMIND公司修改过的ORB_SLAM3代码,理由如下
①官方源代码需要手动修改一部分代码
②INDEMIND给出的ORB_SLAM3文件包中附带了sophus库,并在cmakelist指向了路径,自己搞很麻烦(sophus库需用模板类,自己弄的时候很麻烦)
③ORB_SLAM3代码需要加入相机/imu的接收代码,以捕获相机/imu的话题,以及标定参数、设置opencv版本等等等很多设置都其公司都给改好了,省去很多操作,自己来改的非常容易失败

目录

一、相机SDK安装

1、安装依赖

2、安装opencv3.4.3

3、安装protobuf和MNN

4、创建ROS工作空间

5、编译SDK

二、编译ORB_SALM3

1、安装Eigen库

2、安装boost1.77

3、安装pangolin0.6(必须这个版本)

4、Cv_bridge(这一步可先跳过,后面出错再来看,否则会搞坏环境)

5、创建工作空间

三、运行

1、启动相机

2、启动ORB_SLAM3


环境与依赖:
Ubuntu18.04(使用的计算机为工控机)、Opencv3.4.3(唯一解)pangolin0.6(唯一解)、Boost、Eigen、protobuf、MNN、相机接在USB3.0
Opencv3.4.3是刚需,唯一解,这是官方给出的解释

关于jetson:官方表示仅支持xavier nx。我们用NANO测试过不行(按理说架构一样是可以的,但是不会操作,问客服,不理人


一、相机SDK安装

1、安装依赖

sudo apt-get install build-essential cmake git

2、安装opencv3.4.3

Opencv依赖

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Opencv安装

git clone https://github.com/opencv/opencv.git
cd opencv/
git checkout tags/3.4.3

mkdir build
cd build/
cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
\
-DWITH_CUDA=OFF \
\
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
..

make -j4
sudo make install

git checkout tags/3.4.3的作用是将下载下来的最新版本回滚到3.4.3,
当然也可以去官网直接下载3.4.3

3、安装protobuf和MNN

sudo apt-get install autoconf automake libtool
sudo apt-get install libcanberra-gtk-module

MNN依赖与protobuf,所以要先安装protobuf再安装MNN
Protobuf一般自带了,用指令看一下自己有没,没有的话百度一下怎么下载

protoc --version # 若安装成功,将显示protoc版本

Protobuf解决后安装MNN

git clone https://github.com/alibaba/MNN.git
cd MNN
./schema/generate.sh
mkdir build
cd build
cmake .. make -j4
sudo make install

4、创建ROS工作空间

如果你是个大佬,会自行创建工作空间和设置路径环境,可以自己创建

如果你是个小白,INDEMIND官网给了3条指令帮助快速创建ros工作空间, 不会创建工作空间的小伙伴可以使用这个节省时间,亲测好用

wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh

注释掉脚本中的版本检测(第34行到41行)

这个相机官方本来只打算给ubuntu16.04用,所以ubuntu18.04和ubuntu20.04直接用这个脚本过不去脚本中的版本检测

chmod 755 ./ros_install.sh

bash ./ros_install.sh catkin_ws melodic

第一条下载一个脚本,该脚本里面是一行一行指令,会代替你创建一个ros工作空间                     第二条给予这个脚本运行权限
第三条注意将catkin_ws换成你没有的文件夹,如果你有catkin_ws,这里要写catkin_ws1,如果有catkin_ws1,
这里要写catkin_ws2,以此类推。
melodic为你ros版本

5、编译SDK

下载代码https://github.com/INDEMIND/ORB-SLAM3-Course                                                        下载zip,按照READ ME中的指令下载
下载出来两个文件夹,一个相机SDK,一个ORB_SLAM3
进入你刚刚创建的catkin_ws的src文件夹,将SDK文件夹放到src文件夹中

!!!重点!!!

按照上图教程替换.so文件。这是个大坑,SDK仅支持opencv3.2.0和3.4.3,但是ros版本的SDK唯一支持3.4.3,所以编译ros版本的SDK时,如果你的opencv版本不对,会缺少某些文件

也别想着通过改个文件名,改成libopencv_calib3d3.so.3.3,我试过,只能帮你骗过系统编译成功,但是启动的时候就启动不了了

cd /home/xx/catkin_ws/src/IMSEE-SDK #<IMSEE-SDK>为你的具体路径
make init
make demo
make ros

启动节点

sudo su #开启权限模式
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch

通过rviz预览

sudo su #开启权限模式
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper display.launch

二、编译ORB_SALM3

1、安装Eigen库

sudo apt-get install libeigen3-dev

2、安装boost1.77

强烈建议就用1.77,用别的版本可能会出错
http://www.boost.org/users/download/
去官网找历史版本boost_1_77_0.tar.gz

tar -xvf boost_1_77_0.tar.gz
cd ./boost_1_77_0
./bootstrap.sh
sudo ./b2 install

3、安装pangolin0.6(必须这个版本)

先安装依赖项

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

再安装pangolin0.6
不要用指令下载,会下载0.6之上的版本
GitHub - stevenlovegrove/Pangolin at v0.6
从github下载0.6版本的,解压

cd Pangolin-0.6   #此处为你pangolin具体路径
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

验证是否装好

cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

如果装好会出现一个魔方

4、Cv_bridge(这一步可先跳过,后面出错再来看,否则会搞坏环境)

!!!重点又来了!!!
Melodic自带的Cv_bridge,和使用sudo apt-get install ros-melodic-cv_bridge安装的cv_bridge默认指向了opencv3.2.0,但我们前面说过应该用opencv3.4.3。所以按理来说make时会出错,即使make成功,在rosrun的时候也会出现  段错误(核心已转储)的错误,但是我在18.04实操中并没出错,而在20.04中出了很多错,所以这一步在18.04中可能不是必须的,后面如果出现了

解决方法
卸载ros自带的指向3.2.0的Cv_bridge,自行安装Cv_bridge并指向3.4.3
卸载自带的

sudo apt-get remove ros-melodic-cv-bridge
sudo su #要手动卸载安装在系统里的文件,需要超级用户模式
sudo rm -r /opt/ros/melodic/share/cv-bridge


安装自己的

创建一个ros工作空间,放到src中


https://github.com/ros-perception/vision_opencv
左上角的选择版本里找到melodic的版本,进入cv_bridge文件夹

修改cv_bridge中的cmakelists.txt

 

 把你编译的opencv3.4.3的路径放到这里,把find——package改成3.4.3

在cv_bridge文件夹下打开终端

mkdir build
cd build
cmake ..
make
sudo make install

将在/usr/local/share/中的cv_bridge文件夹复制到/opt/ros/melodic/share/中

sudo cp -r /usr/local/share/cv_bridge /opt/ros/melodic/share

到/opt/ros/melodic/share/cv_bridge中看一下是不是指向了opencv3.4.3

5、创建工作空间

wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh
chmod 755 ./ros_install.sh
bash ./ros_install.sh catkin_ws1 melodic
把下载的ORB-SLAM3-Course中ORB_SLAM3代码拷贝到catkin_ws1文件夹的src中
编译普通版本ORB_SLAM3
cd /home/xx/catkin_ws1/src/ORB_SLAM3#此处为你自己的具体路径

chmod +x build.sh
./build.sh

编译ROS版本ORB_SLAM3
将节点添加ROS环境,加入ROS节点非常重要,否则编译的时候就找不到所需要的ros_wrapper包

gedit ~/.bashrc
source /home/xx/catkin_ws/src/IMSEE-SDK/ros/devel/setup.bash#这里为你具体路径
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws7/src/ORB_SLAM3/Examples/ROS

 这里为你的具体路径。export这一句必须放到最后一行!

source ~/.bashrc
cd /home/xx/catkin_ws1/src/ORB_SLAM3 #这里为你具体路径
chmod +x build_ros.sh
./build_ros.sh

这里99%要出五花八门的问题,每个人的问题不一样,找error,error后面有什么问题就解决什么问题


三、运行

1、启动相机

roscore
cd IMSEE-SDK/  #此处为你具体路径
sudo su #开启权限模式
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch

 

2、启动ORB_SLAM3

cd /home/xx/catkin_ws1/src/ORB_SLAM3 #此处为你具体路径
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Indemind_stereo_imu_fisheye.yaml 0

 

后记:室内效果良好,室外没试验过。我在ubuntu20.04下试验过室外效果极差,超过1.5m直接提取不到点。但是这个应该是ORB_SLAM3算法的问题,实际这个算法是完全可以跑室外的,不知道我为什么跑不了室外,希望有懂的大佬可以告诉我一下这是怎么回事,不胜感激!

坑很多,我也只写了一部分问题的解决方法,中间很多错误我都忘了是什么了,有遇到不会的可以在评论区留言或者私信,我会尽力解答

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值