Ubuntu16.04+ROS+Kinect2运行DSO(Direct Sparse Odometry)

一、DSO的安装运行

参考https://github.com/JakobEngel/dso

1、安装依赖项

(1)基本依赖项:

sudo apt-get install build-essential

(2)eigen3安装:

sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-all-dev

(3)(可选)opencv:

sudo apt-get install libopencv-dev

如果要可视化运行程序安装,或者选择从源码安装,这里就不给出过程了。

(4)(可选)Pangolin:

这是DSO的可视化库,参考https://github.com/stevenlovegrove/Pangolin,建议安装。
glew:

sudo apt-get install libglew-dev

CMake:
sudo apt-get install cmake

(可选)python2.7:
sudo apt-get install libpython2.7-dev
(可选)ffmpeg,视频解码和图像缩放:
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
(可选)ibjpeg, libpng, libtiff, libopenexr,能读取图像集,基本所有的开源SLAM都会用数据集,建议安装:
sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev

接下来安装panglion(本例中位于~/ThirdParty):
cd ~/ThirdParty
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j8

make -j后的参数表示以多少线程运行,根据自己电脑可修改。

(5)(可选)ziplib:

能使程序直接读取.zip图像压缩文件,如果要运行数据集,建议安装。
sudo apt-get install zlib1g-dev
cd dso/thirdparty
tar -zxvf libzip-1.1.1.tar.gz
cd libzip-1.1.1/
./configure
make
sudo make install
sudo cp lib/zipconf.h /usr/local/include/zipconf.h

2、编译并运行DSO

本例中采用~目录,

git clone https://github.com/JakobEngel/dso.git
cd dso
cd dso
mkdir build
cd build
cmake ..
make -j8

如果以上过程通过,在dso/build/lib中有libdso.a库文件,如果上述过程安装了可视化部分的话,在dso/build/bin中有dso_dataset文件,该文件即可运行作者提供的数据集。
从https://vision.in.tum.de/data/datasets/mono-dataset?redirect=1下载其中的任一数据集即可,速度比较感人,建议从windows上用迅雷下载。这里以数据集中的sequence_11为例,下载完成后解压至dso/build/bin中,在控制台中运行:
./dso_dataset files=./sequence_11/images.zip calib=./sequence_11/camera.txt gamma=./sequence_11/pcalib.txt vignette=./sequence_11/vignette.png preset=0 mode=0
不同的数据集替换上述中的数字11即可,注意若未安装ziplib,需要手动解压./sequence_11/images.zip,并改为files=./sequence_11/image。下图为运行结果。
Ubuntu16.04+ROS+Kinect2运行DSO(Direct Sparse Odometry)_第1张图片
如果不需要连接kienct2相机,以下过程可省略。

二、通过ROS连接kienect2并运行DSO

1、安装ROS kinetic

参考http://wiki.ros.org/kinetic/Installation/Ubuntu
进入system setting->software&updates,做如下更改并添加ustc镜像:
Ubuntu16.04+ROS+Kinect2运行DSO(Direct Sparse Odometry)_第2张图片

设置sources.list:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
设置key:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
更新软件源并安装:
sudo apt-get update
安装ROS:
sudo apt-get install ros-kinetic-desktop-full
使ROS包有效:
apt-cache search ros-kinetic
初始化rosdep:
sudo rosdep init
rosdep update

设置环境变量:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

安装rosinstall:
sudo apt-get install python-rosinstall
创建工作目录并设置路径:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

设置ros包的环境变量:
echo ~/catkin_ws/devel/setup.bash ~/.bashrc
或者每次进入catkin_ws目录时输入:
source devel/setup.bash

2、安装kinect2驱动

安装libfreenect2:
cd ~/ThirdParty
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
sudo apt-get install build-essential cmake pkg-config libusb-1.0-0-dev libturbojpeg libjpeg-turbo8-dev
sudo apt-get install libglfw3-dev libopenni2-dev
cd ..
mkdir build && cd build
cmake .. -DENABLE_CXX11=ON
make
make install
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

在ROS中编译kinect2:
cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"

插上kienct2,然后运行ros的Kinect接口:
cd ~/catkin_ws
roscore

然后在另外一个控制台运行:
roslaunch kinect2_bridge kinect2_bridge.launch
这条命令表示打开了ros的kinect接口,再在另一个控制台显示kienct的运行结果:
rosrun image_view image_view image:=/kinect2/hd/image_color
hd表示RGB的分辨率,有hd、rd、qhd等分辨率,输入
rostopic list
查看kienct2提供的所有topic,包括RGB、depth等。

3、安装ROS_DSO并运行在线运行Kinect2

下载ros_dso并安装:
cd ~/catkin_ws/src/
git clone https://github.com/JakobEngel/dso_ros
cd ..
export DSO_PATH=~/dso
catkin_make

修改相机参数文件:
gedit ~/catkin_ws/src/dso_ros/camera.txt
在弹出的窗口中输入以下内容:
529.97 526.97 477.44 261.87 0.05627 -0.0742 0.00142 -0.00169
960 540
crop
960 540

第一行是相机的内参,从左到右的8个数为fx fy cx cy k1 k2 r1 r2,第二行为输入图像的宽和高,根据你用的Kinect RGB不同的分辨率设置,这里因为下面要用到kienct2的qhd,使用960和540。
终止上一步最后的rosrun image_view image_view image:=/kinect2/hd/image_color进程,运行:
cd ~/catkin_ws
rosrun dso_ros dso_live image:=/kinect2/qhd/image_color_rect calib=src/dso_ros/camera.txt mode=1

即可在线运行DOS,下图为在我电脑上的结果。
Ubuntu16.04+ROS+Kinect2运行DSO(Direct Sparse Odometry)_第3张图片
由于DSO初始化做的不太好,注意DSO刚开始运行时要慢慢的平移和转动镜头,不然很容易跑崩。

你可能感兴趣的:(SLAM)