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