主页里有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版本等等等很多设置都其公司都给改好了,省去很多操作,自己来改的非常容易失败
目录
环境与依赖:
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算法的问题,实际这个算法是完全可以跑室外的,不知道我为什么跑不了室外,希望有懂的大佬可以告诉我一下这是怎么回事,不胜感激!
坑很多,我也只写了一部分问题的解决方法,中间很多错误我都忘了是什么了,有遇到不会的可以在评论区留言或者私信,我会尽力解答