Ubuntu20.04使用INDEMIND实时运行ORB_SLAM3

      主页里有ubuntu18.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、创建工作空间

6、编译ORB_slam3

三、运行

1、启动相机

2、启动ORB_SLAM3


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

官方没有给出关于noetic的解释,原因是我问客服,客服直接说不支持ubutun20.04(其实他在敷衍我),搞搞还是能行的。
不管是18.04还是20.04,只要你在x86_64的架构上做,都是用上面的解决方法
关于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安装

!!!重点!!!

不同与我在ubuntu18.04时使用的情况一样,我在20.04上出了巨大的问题,原因在我的电脑上有好几个版本opencv,opencv的版本冲突和cv_bridge指向的问题。最后气的我卸载了所有的opencv,只安装了opencv3.4.3

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

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行)

chmod 755 ./ros_install.sh
bash ./ros_install.sh catkin_ws noetic

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

noetic为你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版本不对,会缺少某些文件
cd /home/xx/catkin_ws/src/IMSEE-SDK #<IMSEE-SDK>为你的具体路径

make init
make demo
make ros

二、编译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之上的版本
http://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

!!!重点又来了!!!
noetic自带的Cv_bridge和使用sudo apt-get install ros-noetic-install-cv_bridgean安装的cv_bridge都默认指向了opencv4.2.0,但我们前面说过应该用opencv3.4.3。
我之前在ubuntu18.04上安装的时候没有设置过Cv_bridge,但是依旧编译通过,可能ubuntu18.04的cv_birdge指向的opencv3.2.0与3.4.3同属于opencv3。但是ubuntu20.04的cv_birdge指向的4.2.0会导致编译失败

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

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

安装自己的

创建ros工作空间,下载到src文件夹中,将cv_bridge在ros工作空间中编译
gitHub - ros-perception/vision_opencv
左上角的选择版本里找到noetic的版本,进入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/noetic/share/中,否则找不到cv_beidge

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

到/opt/ros/noetic/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 noetic

6、编译ORB_slam3

把下载的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 #打开环境配置界面
#在最后两行加入,export必须放到最后一行!!不然路径会被覆盖
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
source ~/.bashrc #使环境有效

中间这两行路径为你的具体路径

编译ros下的ORB_SLAM3

cd /home/xx/catkin_ws1/src/ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh

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

三、运行

roscore

1、启动相机

cd /home/xx/catkin_ws/src/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算法的问题,实际这个算法是完全可以跑室外的,不知道我为什么跑不了室外,希望有懂的大佬可以告诉我一下这是怎么回事,不胜感激!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值