【SLAM】Jetson Xvier运行ORB_SLAM2 配置、跑数据集、usb_cam实时轨迹

一、简介

特点

• 首个支持单目,双目和RGB-D相机的完整的开源SLAM方案,能够实现地图重用,回环检测和重新定位的功能。
• 能够在CPU上进行实时工作,比如手机、无人机、汽车。
• 特征点法的巅峰之作,定位精度极高。
• 能够实时计算出相机的位姿,并生成场景的稀疏三维重建地图。
• 代码非常整洁,包含很多实际应用中的技巧,非常实用。
• 支持仅定位模式,该模式适用于轻量级以及在地图已知情况下长期运行,此时不使用局部建图和回环检测的线程
• 双目和RGB-D相对单目相机的主要优势在于,可以直接获得深度信息,不需要像单目情况中那样做一个特定的SFM初始化。
精度

原理

模块化代码框架

二、目标

  • 为Xavier配置好ORB_SLAM2
  • 跑通数据集
  • 实现本地usb_cam实时运行
  • 调用本地视频

三、安装配置

设备

硬件设备配置:
  1. Jetson Xavier 一台
  2. 海康威视USB摄像头 一台
软件
  • Ubuntu18.04
  • ROS Melodic

配置步骤

1.Jetson AGX Xavier部署ROS
通过ROSXavier脚本安装
git clone https://github.com/jetsonhacks/installROSXavier.git
cd installROSXavier
./installROSXavier #好像这句没意义,不清楚
#默认安装base版本,通过下面这条语句可设置安装版本,本人安装桌面完整版
./installROS.sh -p ros-melodic-desktop-full 

安静地等待n分钟…

创建ROS工作空间
#[optionalWorkspaceName]是自己设置的文件夹名,
运行完成后会生成该文件夹,如果省略,默认的文件
夹名是catkin_ws

特别注意,会在home下创建!!!

./setupCatkinWorkspace.sh [optionalWorkspaceName]

建议在Jetson AGX Xavier挂载的SD卡里创建,如我的/media/nvidia/samsung-SD2/catkin_ws_lwl

#进入SD卡,右键‘Open in Terminal’
mkdir -p catkin_ws_lwl/src
cd catkin_ws_lwl/src
catkin_init_workspace
cd ..
catkin_make
source ~/catkin-ws/devel/setup.bash
安装一些依赖包
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
初始化rosdep
sudo rosdep init

如果出现sudo rosdep:找不到命令提示,需要执行如下命令:

sudo apt install python-rosdep

再次执行初始化sudo rosdep init,如果出现错误:
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
这是因为该网址被墙,无法访问。解决办法是让该网址可以访问。该网址被墙的原因是dns污染,将下面的内容添加到/etc/hosts中。

192.30.253.118 gist.github.com
185.199.110.153 github.io

151.101.113.194 github.global.ssl.fastly.net
52.216.227.168 github-cloud.s3.amazonaws.com
52.74.223.119 github.com

199.232.28.133 avatars1.githubusercontent.com
199.232.28.133 avatars2.githubusercontent.com
199.232.28.133 avatars0.githubusercontent.com
199.232.28.133 avatars3.githubusercontent.com
199.232.28.133 raw.githubusercontent.com
199.232.28.133 user-images.githubusercontent.com
199.232.28.133 avatars.githubusercontent.com
199.232.28.133 github.map.fastly.net
199.232.28.133 avatars7.githubusercontent.com

# Amazon AWS Start
54.239.31.69	aws.amazon.com
54.239.30.25	console.aws.amazon.com
54.239.96.90	ap-northeast-1.console.aws.amazon.com
54.240.226.81	ap-southeast-1.console.aws.amazon.com
54.240.193.125	ap-southeast-2.console.aws.amazon.com
54.239.54.102	eu-central-1.console.aws.amazon.com
177.72.244.194	sa-east-1.console.aws.amazon.com
176.32.114.59	eu-west-1.console.aws.amazon.com
54.239.31.128	us-west-1.console.aws.amazon.com
54.240.254.230	us-west-2.console.aws.amazon.com
54.239.38.102	s3-console-us-standard.console.aws.amazon.com
54.231.49.3	s3.amazonaws.com
52.219.0.4	s3-ap-northeast-1.amazonaws.com
54.231.242.170	s3-ap-southeast-1.amazonaws.com
54.231.251.21	s3-ap-southeast-2.amazonaws.com
54.231.193.37	s3-eu-central-1.amazonaws.com
52.218.16.140	s3-eu-west-1.amazonaws.com
52.92.72.2	s3-sa-east-1.amazonaws.com
54.231.236.6	s3-us-west-1.amazonaws.com
54.231.168.160	s3-us-west-2.amazonaws.com
52.216.80.48	github-cloud.s3.amazonaws.com
54.231.40.3	github-com.s3.amazonaws.com
52.216.20.171	github-production-release-asset-2e65be.s3.amazonaws.com
52.216.228.168	github-production-user-asset-6210df.s3.amazonaws.com

再次执行初始化命令,可能会失败,多试几次。
执行rosdep update更新

rosdep update
添加ros环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
运行小乌龟,检验是否成功

第一个终端运行如下命令:

roscore

新建一个终端运行如下命令:

rosrun turtlesim turtlesim_node

再建一个终端运行如下命令:

rosrun turtlesim turtle_teleop_key

按方向键,看是否乌龟会动
歇一歇,好好玩儿一会儿吧,哈哈

2.更新apt库
sudo apt-get update
3.安装依赖
sudo apt install gcc g++
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libcanberra-gtk*
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev opencl-headers
sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev

4.安装Pangolin
#安装依赖
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev libpython2.7-dev

#下载Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git

#编译安装
cd Pangolin
mkdir build
cd build
cmake ..
make –j #根据自己设备,调整‘-j’为‘-j4’等,以防卡死,后边同理
sudo make install
5.安装Eigen3
sudo apt-get install libeigen3-dev
6.查看Opencv版本,看是否需要安装
pkg-config opencv --modversion

如果显示4.x.x,建议卸载,更换成3.4.x(我是这样实现的,其他版本应该也可以,但没有尝试)

卸载现有Opencv
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
下载安装Opencv3.4.1
安装依赖
sudo apt install gcc g++
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libcanberra-gtk*
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev opencl-headers
sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev
安装Opencv

1.通过脚本安装

 git clone https://github.com/jetsonhacks/buildOpenCVXavier.git
 cd buildOpenCVXavier
 #修改脚本,安装自己所需版本
 git checkout v1.0
./buildOpenCV.sh 

2.下载安装包安装

  • 安装依赖项
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国内镜像’资源下载。
    进入安装包
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 
make -j4
sudo make install

时间非常漫长,请耐心等待(我用了一个多小时)

  • 配置环境
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo vim  /etc/bash.bashrc

在打开的文件最后添加下面两句话:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

执行:

source /etc/bash.bashrc

#####安装DBoW2和g2o

无需安装DBoW2和g2o,ORB_SLAM2包里的Thirdparty文件夹就包含了。

四、编译安装ORB-SLAM2

无ROS单目
  • 下载
    再次,我的网速感人,借用‘码云’个人仓库进行下载,速度很快。

  • 编译
    将下载好的包放在之前创建好的ROS工作空间文件夹里,如我的catkin_ws_lwl/src/里。

$ cd ORB_SLAM2
$ chmod +x build.sh #此命令是为了给build.sh执行权限,对应有chmod -x命令
$ ./build.sh

如果不出意外,编译会出错,哈哈
恭喜,你的Debug时间到
会报错:‘usleep’,不慌,只需要在报错文件里面添加一个头文件:

#include <unistd.h> 

需要增加unistd.h的文件还有:
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc
后续可能还会有哦,期待哈哈
其他的问题请自行百度吧,写下去篇幅不可控啦

没事儿就单纯加一个框,假设你不报错了,恭喜,你已经成功一半了!!!
  • 下载数据集
#单目:
(1)TUM数据集:http://vision.in.tum.de/data/datasets/rgbd-dataset/download
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
(2)KITTI数据集:http://www.cvlibs.net/datasets/kitti/eval_odometry.php
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER
(3)EuRoc数据集:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE_FOLDER/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 

#双目:
(1)KITTI数据集:http://www.cvlibs.net/datasets/kitti/eval_odometry.php
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER
(2)EuRoc数据集:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH_TO_SEQUENCE/mav0/cam0/data PATH_TO_SEQUENCE/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/SEQUENCE.txt

#RGBD深度
TUM数据集:http://vision.in.tum.de/data/datasets/rgbd-dataset/download
#需要使用associate.py文件关联RGB图像和深度图像,associate.py链接:http://vision.in.tum.de/data/datasets/rgbd-dataset/tools
python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

注:具体./Examples/…中的PATH_TO_SEQUENCE_FOLDER是你自己的数据集下载后的位置,如我的:/media/nvidia/samsung-SD2/rgbd_dataset_freiburg1_xyz
运行数据集

ROS本地摄像头
  • 下载安装usb_cam包
    最好将它放在ROS空间的src文件夹下,方便管理
git clone https://github.com/bosch-ros-pkg/usb_cam.git usb_cam
cd usb_cam
mkdir build
cd build
cmake ..
make
  • 测试USB摄像头
    新建一个终端
roscore

进入/media/nvidia/samsung-SD2/catkin_ws_lwl/src/usb_cam/文件夹,开启新的终端

cd launch
roslaunch usb_cam usb_cam-test.launch

在这里插入图片描述
usb_cam-test.launch文件里默认是这样的,根据自己的情况改变设备号。
在这里插入图片描述

  • 添加环境变量
    将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS 

其中PATH为你的ORB_SLAM2路径,如我添加的是:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS

同时也要写入:

source /media/nvidia/samsung-SD2/catkin_ws_lwl/devel/setup.sh

最终在终端里执行:

source ~/.bashrc
  • 编译ROS下面的ORB_SLAM2
    ORB-SLAM默认订阅的话题为/camera/image_raw,而usb_cam节点发布的话题为/usb_cam/image_raw,因此需要在ros_mono.cc中修改订阅的话题。

在这里插入图片描述
更改后进入/media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2文件夹,打开终端进行编译:

$ chmod +x build_ros.sh
$ ./build_ros.sh

可能还会报错,例如:
/media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/…/…/…/Thirdparty/g2o/g2o/types/…/core/openmp_mutex.h:30:10: fatal error: …/…/config.h: No such file or directory
#include “…/…/config.h”
在这里插入图片描述
解决办法:
尝试将Thirdparty文件夹或Thirdparty / g2o文件夹添加到CMakeLists.txt中的包含目录列表中。https://github.com/raulmur/ORB_SLAM2/issues/399

如果你成功的走到了现在,那么恭喜你,接近成功啦!

  • 运行单目节点
    打开一个终端
roscore

打开一个新的终端

roslaunch usb_cam usb_cam-test.launch

再打开一个新的终端

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

其中PATH_TO_VOCABULARY和PATH_TO_SETTINGS_FILE根据自己的情况调整,如我的PATH_TO_VOCABULARY为/media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/ORBvoc.txt,PATH_TO_SETTINGS_FILE为/media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/myvideo.yaml,其中myvideo.yaml为我的相机标定结果。如果简单想跑起来,直接调用文件夹里的Asus.yaml就可以。

rosrun ORB_SLAM2 Mono /media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/ORBvoc.txt /media/nvidia/samsung-SD2/catkin_ws_lwl/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/myvideo.yaml

注意:当ORB SLAM2初始化的时候,请不要直接开始旋转或者运动速度过猛烈,先左右平移运动让SLAM系统成功初始化然后进行的。
来看看结果吧!

五、结果

在这里插入图片描述
图中左侧窗口中的绿色小方块为提取的图像ORB特征,右侧窗口中的绿线代表相机的运动轨迹,蓝色方框代表相机运动过程中的空间位置(即关键帧),黑点和红点代表环境的稀疏地图(黑色代表历史路标,红色表示当前路标)。

参考文献:

  1. https://blog.csdn.net/learning_tortosie/article/details/79881165
  2. https://blog.csdn.net/radiantjeral/article/details/82193370
  3. https://blog.csdn.net/wyy13273181006/article/details/108789594
  4. https://blog.csdn.net/chengmo123/article/details/104902199
  5. https://blog.csdn.net/radiantjeral/article/details/82193370
  6. https://blog.csdn.net/ykwjt/article/details/88090748
  7. https://blog.csdn.net/caomicm/article/details/83994962
  8. https://blog.csdn.net/learning_tortosie/article/details/79879575
  9. https://blog.csdn.net/weixin_44436677/article/details/105587986
  10. 10.https://www.cnblogs.com/gloria-zhang/p/13825287.html
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值