cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

MugichokoさんのRGB-D SLAM実装、Intel Euclidで動くかな?(その1)コンパイル

面白そうなSLAMの実装が公開されています。ぱっと見、openFrameworksに移植してみたくなる感じです。
mugichoko.hatenablog.com
Windowsを開発環境にされているようですが、OpenGLさえ動けばどの環境でも大丈夫そうです。MakefileやCMakeはまだ用意されていないとのことですが、とりあえずビルドしてみましょう。

Intel Euclidでビルド

filesystemの扱いがWindowsgccで違うので、ちょっとだけソースの編集をします。
まずは、include先の修正
> nano SLAM/Utilities/TUMRGBDUtilities.h

//#include <filesystem>
#include <experimental/filesystem>

つぎに、namespaceの修正
> nano SLAM/Utilities/TUMRGBDUtilities.cpp

        //path_c = std::tr2::sys::path(cFramePath).parent_path().string();
        //path_d = std::tr2::sys::path(dFramePath).parent_path().string();
        path_c = std::experimental::filesystem::path(cFramePath).parent_path().string();
        path_d = std::experimental::filesystem::path(dFramePath).parent_path().string();

とりあえずこれでコンパイルは通るようになりました。

g++ Main.cpp App.cpp GLCore/*.cpp GLExt/*.cpp SLAM/*.cpp SLAM/Frame/*.cpp SLAM/ICP/*.cpp SLAM/Utilities/*.cpp -I. -lstdc++fs -std=c++11 `pkg-config --cflags opencv` `pkg-config --libs opencv` `pkg-config --static --libs gl` `pkg-config --static --libs glew` -lglfw

実行してみましょう。

./a.out
Failed to open: D:/Dataset/MY_RGBD/desktop/rgb.txtFailed to open: D:/Dataset/MY_RGBD/desktop/depth.txtFailed to open: D:/Dataset/MY_RGBD/desktop/groundtruth.txtVendor: Intel Open Source Technology Center
Renderer: Mesa DRI Intel(R) HD Graphics (Cherrytrail)
Version: 3.0 Mesa 12.0.6
GLSL: 1.30

Failed to read frames.
Creating a shader program...
Loaded "../shaders/SLAM/BilateralFilter.comp".
Error: Failed to compile "compute" shader:
�"���

設定ファイルに書かれたパスが存在しないのはともかくとして、openGLのバージョンがうまく設定されていないようです。Intel EuclidはかろうじてOpenGL4.3が動くはずなので、設定してやればきっと大丈夫、、、と信じたい。

> MESA_GL_VERSION_OVERRIDE=4.3 ./a.out

Failed to open: D:/Dataset/MY_RGBD/desktop/rgb.txtFailed to open: D:/Dataset/MY_RGBD/desktop/depth.txtFailed to open: D:/Dataset/MY_RGBD/desktop/groundtruth.txtVendor: Intel Open Source Technology Center
Renderer: Mesa DRI Intel(R) HD Graphics (Cherrytrail)
Version: 4.3 (Core Profile) Mesa 12.0.6
GLSL: 4.30

Segmentation fault

今日はもう疲れたので、また今度に続く。
調べた結果、Appのコンストラクタで落ちていて、openGLの初期化に失敗しているようです。これは、Intel Euclidのハードウェアスペックの問題のように見えますので、環境を変えてやってみましょう。

2018/03/28
CMakeLists.txt on jetson tx2

cmake_minimum_required(VERSION 3.0.0)

set(PROJECT_NAME "Cross-Platform-RGB-D-SLAM")

file(GLOB SOURCES *.cpp)
file(GLOB GLCORE_SOURCES GLCore/*.cpp)
file(GLOB GLEXT_SOURCES GLExt/*.cpp)
file(GLOB SLAM_SOURCES SLAM/*.cpp)
file(GLOB SLAM_FRAME_SOURCES SLAM/Frame/*.cpp)
file(GLOB SLAM_ICP_SOURCES SLAM/ICP/*.cpp)
file(GLOB SLAM_UTILITIES_SOURCES SLAM/Utilities/*.cpp)
include_directories(./)
add_executable(${PROJECT_NAME} ${SOURCES} ${GLCORE_SOURCES} ${GLEXT_SOURCES} ${SLAM_SOURCES} ${SLAM_FRAME_SOURCES} ${SLAM_ICP_SOURCES} ${SLAM_UTILITIES_SOURCES})
target_compile_features(${PROJECT_NAME} PRIVATE cxx_range_for)
target_link_libraries(${PROJECT_NAME} stdc++fs)
set_target_properties(${PROJECT_NAME} PROPERTIES
                RUNTIME_OUTPUT_DIRECTORY "../")

# link libraries
find_packakgConfig REQUIRED)
find_package(OpenGL)
find_package(GLEW REQUIRED)
find_package(glfw3)
find_package(OpenCV)
target_link_libraries(${PROJECT_NAME} ${OPENGL_gl_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${GLEW_LIBRARIES})
target_link_libraries(${PROJECT_NAME} glfw)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

# OpenMP settings
find_package(OpenMP)
if (OPENMP_FOUND) 
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

# from here http://zashikiro.hateblo.jp/entry/2014/05/17/001314
message(STATUS "*** dump start cmake variables ***")
get_cmake_property(_variableNames VARIABLES)
foreach(_variableName ${_variableNames})
        message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
message(STATUS "*** dump end ***")
  • libglew-dev:arm64/xenial 1.13.0-2 uptodate
    • glfw3_VERSION=3.2.1
    • OpenCV_VERSION=2.4.13.1

libglm-dev:all/xenial 0.9.7.2-1 uptodate

[1]
zashikiro.hateblo.jp