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