DSO编译运行
1. DSO编译运行(非ROS)
1.1 安装依赖库
编译DSO依赖库包括:
- OpenCV(版本>3.0)
- Eigen3
- Pangolin
- ziplib(不需要下载)
- ROS
前三个依赖库安装教程:安装教程;
ROS安装教程:ROS安装
1.2 编译
# 将DSO代码拷贝下来
git clone https://github.com/JakobEngel/dso.git
# 安装依赖库
sudo apt-get install libsuitesparse-dev libboost-all-dev
# 安装ziplib
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
# 编译工程
cd dso
mkdir build
cd build
cmake ..
make -j2
1.3 运行测试
- TUM单目数据集
# tum单目数据集测试, 可以生成一个.sh脚本文件,直接运行
./bin/dso_dataset files='/home/guofeng/桌面/Database/TUM/sequence_09/images.zip' calib='/home/guofeng/桌面/Database/TUM/sequence_09/camera.txt' gamma='/home/guofeng/桌面/Database/TUM/sequence_09/pcalib.txt' vignette='/home/guofeng/桌面/Database/TUM/sequence_09/vignette.png' preset=0 mode=0
- Euroc单目数据集
# Euroc单目数据集
cp ~/桌面/Database/Euroc/mav0/cam1/sensor.yaml ./camera.txt
gedit camera.txt # 改成DSO初探里一样的格式就行了
# camera.txt格式如下
# 第一行: fx fy cx cy d0 d1 d2 d3
# 第二行: 原始图像尺寸
# 第三行: 相机类型 crop / full / none / fx fy cx cy 0
# 第四行: resize后的图像尺寸
457.587 456.134 379.999 255.238 -0.28368365 0.07451284 -0.00010473 -3.55590700e-05
752 480
crop
640 480
./build/bin/dso_dataset files='/home/guofeng/桌面/Database/Euroc/mav0/cam1/data' calib='/home/guofeng/桌面/Database/Euroc/mav0/cam1/camera.txt' mode=1
1.4 测试结果
- TUM数据集
- Euroc数据集
2. DSO编译运行(ROS版本)
2.1 编译
# 下载源代码到工作空间
cd catkin_ws/src
git clone https://github.com/JakobEngel/dso_ros.git
# 配置环境变量, 需要dso运行正常的条件下
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src
export DSO_PATH=/home/guofeng/open-code/dso
# 修改CMakeLists.txt文件内容
# 1. 屏蔽输出文件保存位置
set(EXECUTABLE_OUTPUT_PATH bin) # 将其屏蔽掉
# 2. 添加添加动态链接库 -lboost_system,
target_link_libraries(dso_live ${DSO_LIBRARY} ${Pangolin_LIBRARIES} ${OpenCV_LIBS} -lboost_system)
# 需要在ROS工作空间里编译运行, 可以写成.sh脚本的形式
cd ~/catkin_ws/src/dso_ros
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j2
2.2 运行测试
- Euroc数据集bag
# 需要注意的是camera需要根据自己的相机内参改动
roscore
rosrun dso_ros dso_live image:=/cam1/image_raw calib='/home/guofeng/桌面/Database/Euroc/mav0/cam1/camera.txt' mode=1
rosbag play V1_02_medium.bag
- TUM数据集
roscore
rosrun dso_ros dso_live image:=/camera/rgb/image_color calib='/home/guofeng/桌面/Database/TUM/camera.txt' mode=1
rosbag play rgbd_dataset_freiburg1_xyz.bag
2.3 测试结果
- Euroc数据集
3. 出现的问题
3.1 evo评估问题
典型的TUM格式,但是生成的多了空格,需要处理一下才能用evo工具评估:
cat result.txt | tr -s [:space:] > DSO.txt
3.2 链接库问题
- 问题描述
/usr/bin/ld: CMakeFiles/dso_live.dir/src/main.cpp.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/dso_live.dir/build.make:212: recipe for target 'bin/dso_live' failed
make[2]: *** [bin/dso_live] Error 1
CMakeFiles/Makefile2:709: recipe for target 'CMakeFiles/dso_live.dir/all' failed
make[1]: *** [CMakeFiles/dso_live.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
- 解决方案
# 添加动态链接库 -lboost_system
target_link_libraries(dso_live ${DSO_LIBRARY} ${Pangolin_LIBRARIES} ${OpenCV_LIBS} -lboost_system)
4. 源代码修改
dso_ros修改版本,适用于catkin编译:dso_ros