视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3

系列文章目录

参考我的opencv配置博客
参考我的orbslam3配置博客


文章目录

  • 系列文章目录
  • 前言
  • 一、电脑EdgeSlam安装配置
      • 1.错误1
      • 2.错误2
      • 3.错误3
      • 4.错误4
  • 二、jetson nano安装ORB SLAM3
    • 1、jetson nano问题
      • 问题1
      • 问题2
    • 2、jetson nano的自带opencv问题
      • 1.卸载opencv3.3.0
      • 2.安装opencv4.4.0
    • 3、ros问题
      • 问题1
    • 4、orbslam3问题
      • 1.问题1
      • 2.问题2
    • 5、zed问题
      • 问题1
      • 问题2
  • 三、jetson nano EdgeSlam安装测试
    • 1、测试
      • 1.在移动设备上
      • 2.在边缘设备上
      • 3.IP和端口号通信
  • 结论


前言

众所周知,视觉 SLAM 在内存和处理时间方面是资源密集型的。此外,一些操作随着时间的推移变得越来越复杂,这使得在移动设备上连续运行变得具有挑战性。边缘计算为移动设备提供额外的计算和内存资源,以允许卸载某些任务,而不会出现卸载到云时出现的大延迟。 Edge-SLAM是一种使用边缘计算资源来卸载部分 Visual-SLAM 的系统。使用 ORB-SLAM3 作为原型 Visual-SLAM 系统,并将其修改为边缘和移动设备之间的分离架构。将跟踪计算保留在移动设备上,并将其余计算(即局部映射和闭环)移动到边缘,可以允许 Visual-SLAM 系统在资源有限的情况下长期运行,而不会影响操作的准确性。它还使移动设备上的计算和内存成本保持不变,这将允许部署其他使用 Visual-SLAM 的终端应用程序。

Edge-SLAM 是一种边缘辅助视觉同步定位和建图。Edge-SLAM 将 Visual-SLAM 适配到边缘计算架构中,以实现 Visual-SLAM 在移动设备上的长时间运行。这是通过将计算密集型模块卸载到边缘来实现的。因此,Edge-SLAM 减少了移动设备上的资源使用并保持不变。Edge-SLAM 是在ORB-SLAM2之上实现的。

EdgeSlam源码
EdgeSlam论文

视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第1张图片


一、电脑EdgeSlam安装配置

安装EdgeSlam前先安装好ORB-SLAM3

1.错误1

执行build.sh最后的

cmake .. -DCMAKE_BUILD_TYPE=Release

出现:
Found package configuration file:
/usr/local/lib/cmake/Pangolin/PangolinConfig.cmake
but it set Pangolin_FOUND to FALSE so package “Pangolin” is considered to
be NOT FOUND. Reason given by package:
Pangolin could not be found because dependency Eigen3 could not be found.

/usr/bin/ld: 找不到 -lEigen3::Eigen
视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第2张图片
解决办法:
不重新安装Pangolin及Eigen的临时办法,修改CMakeLists.txt如下:
在find_package(Eigen3 REQUIRED)后加NO_MUDULE,

find_package(Eigen3 REQUIRED NO_MODULE)

在这里插入图片描述

2.错误2

 [rosbuild] rospack found package "Edge_SLAM" at "", but the current
  directory is "/home/llw/Guide_blind/edgeslam/Examples/ROS/Edge_SLAM".  You
  should double-check your ROS_PACKAGE_PATH to ensure that packages are found
  in the correct precedence order.

解决:
首先在~/.bashrc上设置了路径(注意这个path是我的路径,读者需要自己修改):

sudo vim ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/llw/Guide_blind/edgeslam/Examples/ROS
source ~/.bashrc

在ROS的安装路径下更改路径:

cd /opt/ros/melodic/
sudo vim setup.bash 
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/llw/Guide_blind/edgeslam/Examples/ROS
source setup.bash

查看路径是否添加成功:

echo $ROS_PACKAGE_PATH

3.错误3

CMake Warning (dev) at /opt/ros/melodic/share/ros/core/rosbuild/public.cmake:507 (add_executable):
  Policy CMP0028 is not set: Double colon in target name means ALIAS or
  IMPORTED target.  Run "cmake --help-policy CMP0028" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  Target "Mono" links to target "Eigen3::Eigen" but the target was not found.
  Perhaps a find_package() call is missing for an IMPORTED target, or an
  ALIAS target is missing?
Call Stack (most recent call first):
  CMakeLists.txt:126 (rosbuild_add_executable)
This warning is for project developers.  Use -Wno-dev to suppress it.

解决办法:
Eigen检测不到,同样是修改CMakeLists.txt如下:
在find_package(Eigen3 REQUIRED)后加NO_MUDULE,

find_package(Eigen3 REQUIRED NO_MODULE)

在这里插入图片描述

4.错误4

OpenCV Error: Unknown error code -49 (Input file is empty) in cvOpenFileStorage, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 4422
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp:4422: error: (-49) Input file is empty in function cvOpenFileStorage

解决:
主要问题是配置文件中没有添加“%YAML:1.0”
视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第3张图片

二、jetson nano安装ORB SLAM3

1、jetson nano问题

问题1

鉴于nano自己的算力问题,有时导致编译卡死,可以选择关闭图形界面

关闭图形界面

sudo systemctl set-default multi-user.target 
sudo reboot

开启图形界面

sudo systemctl set-default graphical.target 
sudo reboot

问题2

apt-get锁

E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) 
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
1.方法一:
用这个命令查看一下apt-get的相关进程:
ps -e | grep apt

显示:
11669 ? 00:00:02 aptd
25379 ? 00:00:00 update-apt-xapi

然后执行:
sudo kill 11669
sudo kill 25379
2.方法二:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
3.方法三
sudo rm /var/lib/dpkg/lock-frontend

2、jetson nano的自带opencv问题

1.卸载opencv3.3.0

sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update

查看linux下是否有opencv以及安装版本:

pkg-config opencv --modversion
pkg-config opencv4 --modversion

2.安装opencv4.4.0

参考我的博客

  1. 把opencv的依赖安装好
  2. 下载并处理好4.4Sources版本、opencv_contrib、boostdesc和vgg文件
  3. cmake-gui及以下部分不用管了,回来看这篇博客

查看cmake版本,有就行没有就下载:

cmake -version

配置与编译opencv:

1、创建build文件夹
mkdir build
cd build

2、cmake设置配置opencv
cmake \

-DCMAKE_BUILD_TYPE=Release \
-DBUILD_PNG=OFF \
-DBUILD_TIFF=OFF \
-DBUILD_TBB=OFF \
-DBUILD_JPEG=OFF \
-DBUILD_JASPER=OFF \
-DBUILD_ZLIB=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_java=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENMP=OFF \
-DWITH_FFMPEG=ON \
-DWITH_GSTREAMER=OFF \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_CUDA=ON \
-DWITH_GTK=ON \
-DWITH_VTK=OFF \
-DWITH_TBB=ON \
-DWITH_1394=OFF \
-DWITH_OPENEXR=OFF \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 \
-DCUDA_ARCH_BIN=5.3 \
-DCUDA_ARCH_PTX="" \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_ENABLE_NONFREE=ON \
-DINSTALL_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules \
..

设置错误:

CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib‘

错误解决:路径不对

-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules \

设置配置完成并检查无误后开始编译,-j1是害怕死机,j1-j4都可以,越大越快但越容易挂,j1比较稳但是我编译了一个晚上:

sudo make -j1

漫长编译结束,进行安装

sudo make install

3、ros问题

建议解决自带的opencv问题,再安装ROS,最后安装ORBSLAM3,安装参考这篇博客

里面有一个脚本命令直接安装,非常小白,不过需要注意脚本安装时的选项选择。

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

脚本安装完后,直接跳到这篇博客的6.rosdep init 初始化步骤直到画海龟。

问题1

工作空间编译问题,执行catkin_make时报错:catkin_make libusb_cam.so 未定义的引用

解决:
似乎是版本更新导致的问题,下载了usb_cam 0.3.6版本 ,并在 catkin 工作区中重建执行它。

4、orbslam3问题

直接用的是ORB-SLAM3 1.0版本,参考我的博客。
安装完成后测试单目与双目效果,看看有没有成功。

1.问题1

Couldn’t query v4l fps! error 25, Inappropriate ioctl for device

解决:

video编号是否正确对应

2.问题2

运行./build_ros.sh时出现报错:

error: no matching function for call to ‘std::vector<cv::Mat>::push_back(Eigen::Vector3f)

解决:
打开ViewerAR.cc文件第405行

删除或注释
vPoints.push_back(pMP->GetWorldPos())

改为:

vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));

5、zed问题

问题1

 CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):   Could not find a package configuration file provided by "zed_interfaces"   

解决:
只需要安装一个zed_interfaces,放在catkin_make下就可以了。

git clone https://github.com/stereolabs/zed-ros-interfaces

问题2

double free or corruption (out)
Aborted (core dumped)

解决:
经过多次测试回调,发现似乎是opencv的版本原因,这是github的orb讨论区的建议

因为jetson nano安装的是官方提供的镜像,自带opencv3.3.0,这个与ros自带的opencv3.2.0发生冲突,所以选择卸载opencv3.3.0,卸载步骤已经放在前面了。

视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第4张图片

成功通过ZED2调用ORB-SLAM3双目IMU
视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第5张图片

三、jetson nano EdgeSlam安装测试

安装步骤基本和章节一的一样,就不在写了。

1、测试

1.在移动设备上

打开一个新的终端窗口,导航到项目根目录,然后运行

roscore

打开第二个终端窗口,导航到项目根目录,然后运行

cd Examples/ROS/Edge_SLAM/
rosrun Edge_SLAM RGBD ../../../Vocabulary/ORBvoc.txt ../../RGB-D/TUM2.yaml client

2.在边缘设备上

打开一个新的终端窗口,导航到项目根目录,然后运行

roscore

打开第二个终端窗口,导航到项目根目录,然后运行

cd Examples/ROS/Edge_SLAM/
rosrun Edge_SLAM RGBD ../../../Vocabulary/ORBvoc.txt ../../RGB-D/TUM2.yaml server

3.IP和端口号通信

当 Edge-SLAM 在两个设备上运行时,您将被要求在 Edge-SLAM 终端中输入 IP 和端口号以设置网络连接。Edge-SLAM 使用三个 TCP 连接。第一个连接传输关键帧,第二个连接传输帧,第三个连接传输地图更新。按照显示的顺序执行以下步骤以设置网络

  1. 在边缘设备上
  • 输入边缘设备 IP 地址
  • 输入用于边缘关键帧连接的端口号,比如6661
  1. 在移动设备上
  • 输入移动设备IP地址
  • 输入边缘设备 IP 地址
  • 输入用于移动设备上关键帧连接的端口号,比如6662
  • 输入用于边缘关键帧连接的端口号,比如6661
  • 如果建立了关键帧连接,系统将继续要求建立第二个连接
  1. 在边缘设备上
  • 输入用于边缘上的帧连接的端口号,比如6663
  1. 在移动设备上
  • 输入用于移动设备上的帧连接的端口号,比如6664
  • 输入用于边缘上的帧连接的端口号,比如6663
  • 如果帧连接建立,系统会继续要求建立第三个连接
  1. 在边缘设备上
  • 输入用于边缘地图更新连接的端口号,比如6665
  1. 在移动设备上
  • 输入用于移动设备地图更新连接的端口号,比如6666
  • 输入用于边缘地图更新连接的端口号,比如6665
  • 如果建立了地图更新连接,移动设备上的系统应该打开查看器窗口,边缘设备应该等待接收数据。
  1. 在移动设备上
  • 打开第三个终端窗口,导航到项目根目录,然后运行包文件
rosbag play ./rgbd_dataset_freiburg2_desk.bag /camera/rgb/image_color:=/camera/rgb/image_raw /camera/depth/image:=/camera/depth_registered/image_raw

端口残留或被占用

查询端口
sudo netstat -nplt

杀死端口中的进程
kill -9 xxx

视觉学习笔记9——边缘分离式计算EdgeSLAM结合ORBSLAM3_第6张图片

结论

很遗憾,它对我的工作起不来太大作用,所以将不再研究它了。

你可能感兴趣的:(深度学习,人工智能,计算机视觉,自动驾驶,边缘计算)