Jetson TX2 运行ORB-SLAM2 ros Kinect V1

系统版本:ubuntu16.04(aarrch64-Linux),ROS版本:kinect版,ORB-SLAM2,摄像头kinect V1

一、前言

事情不复杂就是过程有点麻烦,大部分遇到的问题都是依赖库驱动问题,涉及代码的问题很少(毕竟开源人家写好的)

二、jetson刷机

刷机教程https://blog.csdn.net/weixin_38593194/article/details/84539596

刷机过后的Jetson TX2自带nvidia和ubuntu两个名字的系统,初始密码跟用户名相同,系统:ubuntu16.04,建议一开始调试接个显示器,速度快,必须使用hdmi-hdmi的线,不能通过vga转接头。

更新安装源 

该ubuntu系统是ARM版本的linux系统,ARM源比较少,并且速度比较慢,现在更新成中科大的镜像源。

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo nano /etc/apt/sources.list    
Jetson TX2一开始默认是没有装nano编辑器的,需要先安装nano编辑器,默认安装vim,直接使用sudo vim /etc/apt/sources.list可以。 
在文件末尾添加如下内容:

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main restricted universe multiverse 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse

最后

sudo apt-get update

启动自带摄像头 
打开Jetson TX2的终端

写入命令:nvgstcapture-1.0 ,摄像头就会起来了 
1. –prev_res 预览视屏的分辨率,高度和宽度,用的是CSI摄像头的话范围是 2 to 12 (5632x4224)

nvgstcapture-1.0 --prev-res=3


–cus-prev-res 自定义预览分辨率,宽度和高度,仅支持CSI摄像头
nvgstcapture-1.0 --cus-prev-res=1920x1080
多个命令同时使用的话用!隔开,想关掉摄像头的额话,直接在终端输入q再按回车,想捕获图片的话,在终端输入j再按回车,图片将保存当前目录下。 
 

三、安装ROS

参考http://wiki.ros.org/kinetic/Installation/Ubuntu

以下是我的步骤

注意很多博客说的ROS indigo实在ubuntu14.04下,16.04不支持,应该安装kinect或者其他版本(各个版本之间差距不大)

(1)设置系统软件

Jetson TX2 运行ORB-SLAM2 ros Kinect V1_第1张图片
(2)设置计算机以接受packages.ros.org中的软件 

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

(3)获取密钥

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654

注意:这里可能碰到一个问题——“无法连接服务器,无法获取密钥,无有效的数字签名认证”等报错,可以尝试更换上面key后面的密钥解决问题。

获取密钥成功如下

Jetson TX2 运行ORB-SLAM2 ros Kinect V1_第2张图片

(4)安装ros

sudo apt-get update

sudo apt-get install ros-kinetic-desktop-full

(5)安装功能包

sudo apt-get install python-rosdep

sudo apt-get install ros-kinetic-slam-gmapping

sudo apt-get install python-rosinstall

(6)初始化ros

sudo rosdep init
rosdep update

(7)添加启动项

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc 

source ~/.bashrc

(8)安装其他依赖包

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

(9)测试是否成功

打开Termial,输入以下命令,初始化ROS环境

roscore

再打开一个新终端,运行会弹出一个小乌龟

rosrun turtlesim turtlesim_node

再打开一个新终端,输入下面指令可以用方向键控制乌龟

rosrun turtlesim turtle_teleop_key

四、安装摄像头驱动

(1)kinect V1

kinect V1的比较麻烦,使用其他摄像头的朋友可以跳过。

安装依赖

sudo apt-get install ros-kinetic-openni-* ros-kinetic-openni2-* ros-kinetic-freenect-*

sudo apt-get install ros-kinetic-rtabmap-ros

rospack profile

测试下能不能用

roslaunch freenect_launch freenect-registered-xyzrgb.launch 

测试kinect使用这时候会出现几个WARN,如果仔细看的话是没有进行摄像机的标定,哎呀,暂时先不要管那么多了,先看看这个尘封已久的Kinect 是否还健在! 
这时候可以在新终端中输入rostopic list查看当前的话题。 
如果不知道啥是rostopic,建议花两天时间把ROS初级的Tutorial过一遍,这样对ROS的基本知识有个印象,不会在后面开发使用的时候一团迷糊! 

再开一个终端输入

rqt

这时会打开一个窗口,在窗口的Plugins菜单栏中选择Visualization->Image View,此时可以在下拉菜单中选择话题的种类,注意,默认情况下,选择/camera/depth/XXXX的话题才会显示出来图像,因为你并没有设置depth_registered,如果你在显示的过程中,在新的终端里使用rosrun rqt_reconfiguration rqt_reconfiguration,之后在camera->driver中勾选了depth_registered,此时你的rqt窗口就不会进行图像刷新了,此时切换至/camera/depth_registered/XXXX的话题后,继续会刷新图像


五、ORB_SLAM2

参考博客

https://blog.csdn.net/lixujie666/article/details/80475451

https://www.cnblogs.com/zengcv/p/6021512.html

https://blog.csdn.net/qq_38589460/article/details/82708166

(1) 创建ROS工作空间

mkdir -p ~/slam/src
cd ~/slam/src
catkin_init_workspace
cd ..
catkin_make
echo "source ~/slam/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

(2) 下载源码

cd ~/SLAM/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

(3)安装依赖

参考github下

Boost      sudo apt-get install libboost-all-dev

Pangolin

git clone https://github.com/stevenlovegrove/Pangolin.git  
cd Pangolin 
mkdir build 
cd build 
cmake .. 
make -j

Opencv

Jetson在刷机的时候自带opencv3.3所以可以不用安装

Eigen3

版本在3.1.0之上,在下面网址安装

http://eigen.tuxfamily.org/index.php?title=Main_Page
DBoW2和g2o (included in Thirdparty) 在ORB-SLAM2的Thirdparty文件夹里面,无需安装。

(4)编译

运行脚本文件./build.sh和./build_ros.sh分别编译两个版本的slam

cd ORB_SLAM2
chmod +x build.sh
./build.sh
  • 在编译ubuntu16.04ros包的时候出现以下问题
  • `/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’ 
    /usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line 
    collect2: error: ld returned 1 exit status 
    CMakeFiles/RGBD.dir/build.make:218: recipe for target ‘../RGBD’ failed 
    make[2]: * [../RGBD] Error 1 
    CMakeFiles/Makefile2:67: recipe for target ‘CMakeFiles/RGBD.dir/all’ failed 
    make[1]: * [CMakeFiles/RGBD.dir/all] Error 2 
    make[1]: * 正在等待未完成的任务…. 
    /usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’ 
    /usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line 
    collect2: error: ld returned 1 exit status 
    CMakeFiles/Stereo.dir/build.make:218: recipe for target ‘../Stereo’ failed 
    make[2]: * [../Stereo] Error 1 
    CMakeFiles/Makefile2:104: recipe for target ‘CMakeFiles/Stereo.dir/all’ failed 
    make[1]: * [CMakeFiles/Stereo.dir/all] Error 2 
    Makefile:127: recipe for target ‘all’ failed 
    make: * [all] Error 2

- 出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录 
- 解决方案为

sudo locate boost_system

//查找到目录

/usr/lib/x86_64-linux-gnu/libboost_system.a

/usr/lib/x86_64-linux-gnu/libboost_system.so

/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0

/usr/local/MATLAB/R2017a/bin/glnxa64/libboost_system.so.1.56.0

 

locate boost_filesystem

//查找到目录

/usr/lib/x86_64-linux-gnu/libboost_filesystem.a

/usr/lib/x86_64-linux-gnu/libboost_filesystem.so

/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0

/usr/local/MATLAB/R2017a/bin/glnxa64/libboost_filesystem.so.1.56.0

将libboost_system.so与libboost_filesystem.so路径复制到ORB_SLAM2的CMakeLists中的lib下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为 
set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS} 
${Pangolin_LIBRARIES} 
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so 
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so 
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
 
之后加入${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
 

问题解决

这里我的jetson还碰到过ubuntu下locate无反应的情况,附链接解决办法

https://blog.csdn.net/g11d111/article/details/82185610

(5)运行公开数据集

 

1.RGB-D实例

 ******准备数据************

1)下载TUM数据集

 从下面这个链接https://vision.in.tum.de/data/datasets/rgbd-dataset/download下载相关数据集,例如下载rgbd_dataset_freiburg2_pioneer_360.tgz

 2)然后解压到你想要解压的位置,这里我把数据集解压在ORB_SLAM2

 3)运行RGB-D实例时需要RGBD(depth)图像和RGB图像,因此需要将每一张RGB图像和与之对应的RGBD图像建立关联,用到associate.py文件

 *******进行关联操作********

 python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

 注意:

 PATH_TO_SEQUENCE即rgb.txt所在目录,在下载的数据集中,这里我的目录如下:

 home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360

 1)associate.py将放在/ORB_SLAM2/Examples/RGB-D/目录下面

 2)打开终端,进入associate.py所在目录

 3)执行:python associate.py home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/rgb.txt home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt

 

 注意:这里用的是python2

 *********进行测试*********

 执行下面命令:

 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

 

其中PATH_TO_SEQUENCE_FOLDER 我下载数据集所在的目录,这里我是放在了ORB_SLAM2工程目录下,即/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360

 

 ASSOCIATIONS_FILE为生成的associations.txt,给出它的指定位置,这里我把它拷贝到了数据集下面,即/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360

 /associations.txt

然后对应的,先cd ORB_SLAM2工程目录下,我执行:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM2.yaml /home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360 /home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/associations.txt

运行效果: 
Jetson TX2 运行ORB-SLAM2 ros Kinect V1_第3张图片 Jetson TX2 运行ORB-SLAM2 ros Kinect V1_第4张图片
2.Monocular实例

参考https://www.cnblogs.com/ilym/p/9080141.html

 (1)TUM Dataset
  使用上述RGB-D下载的数据集,运行下面的命令:
  ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
  
  针对上述命令做如下修改:
  将TUMX.yaml修改为TUM1.yaml、TUM2.yaml、TUM3.yaml其中之一
  将PATH_TO_SEQUENCE_FOLDER修改为TUM Dataset数据集所在的位置
  
  例如针对我自己而言,进入ORB_SLAM2工程目录下,运行下面命令:
 ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360
 
(2)KITTI Dataset
 从链接 http://www.cvlibs.net/datasets/kitti/eval_odometry.php 下载KITTI数据集合,这里我下载的是ground truth poses,并将其解压在ORB_SLAM2工程目录下,解压后的文件夹名为dataset.
 
 使用该数据集,运行下面的命令:
 ./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER
 
 针对上述命令,做如下修改:
 将KITTIX.yaml改为 KITTI00-02.yaml、KITTI03.yaml、KITTI04-12.yaml其中之一即可
 PATH_TO_DATASET_FOLDER修改为所下载数据集合放置的位置
 SEQUENCE_NUMBER修改为00,01,02,...,11.22 
 例如针对我自己而言,进入ORB_SLAM2工程目录下,运行下面命令:
 ./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00.yaml /home/ttwang/ORB_SLAM2/dataset/sequences/00

(6)运行Kinect V1  RGB-D相机

方式一:
新开终端     roscore
再新开终端 roslaunch freenect_launch freenect-registered-xyzrgb.launch
备注:这条命令输入后可以打开终端使用命令 rqt 看到kinect相关图像(深度图和rgb图等)
 再新开终端

注:前面进行过source ~/slam/devel/setup.bash的操作,这里可以直接找到ORBSLAM2的目录

执行下面一句的时候用tab键可以补全ORB_SLAM2 RGB这种东西

rosrun ORB_SLAM2 RGBD ~/slam/src/ORB_SLAM2/Vocabulary/ORBvoc.txt  ~/slam/src/ORB_SLAM2/Examples/RGB-D/TUM1.yaml


 

Jetson TX2 运行ORB-SLAM2 ros Kinect V1_第5张图片

方法二、写个launch脚本

。。。还没实验出来,在捣鼓两天 

你可能感兴趣的:(Nvidia,JetSon,TX2)