SUMA++编译运行
源码地址
源码链接:git clone https://github.com/PRBonn/semantic_suma.git
电脑配置
Ubuntu 18.04 + ROS Melodic + GTSAM 4.0.2 + CERES 1.14.0
pcl1.8+vtk8.2.0+opencv3.2.0
环境配置
之前已经配置过TensorRT的环境(8.0.0.3)
检查TensorRT是否安装成功:参考链接
安装GLEW:sudo apt install libglew-dev
安装rangenet_lib
cd ~/catkin_ws5/src
git clone https://github.com/ros/catkin.git
git clone https://github.com/vincenzo0603/rangenet_lib_forTensorRT8XX.git
cd .. && catkin init
catkin build rangenet_lib
检查rangenet_lib是否安装成功:参考链接
安装SUMA++
cd ~/catkin_ws5/src
git clone https://github.com/PRBonn/semantic_suma.git
git clone https://github.com/jbehley/glow.git
检查版本
glxinfo | grep "version"
#显示是4.6.0,所以命令中用460;如果不清楚可以用默认的330
cd ~/catkin_ws5
catkin build --save-config -i --cmake-args -DCMAKE_BUILD_TYPE=Release -DOPENGL_VERSION=460 -DENABLE_NVIDIA_EXT=YES
编译SUMA++
参考链接:https://blog.csdn.net/weixin_42705347/article/details/136219565
1.报错:
Unknown CMake command “COMPILE_SHADERS”
解决方法:
CMakeList.txt中添加(克隆的glow的路径)
include(/home/me/catkin_ws5/src/glow/cmake/GenCppFile.cmake)
include(/home/me/catkin_ws5/src/glow/cmake/GlowShaderCompilation.cmake)
2.报错:
未定义引用
MakeFiles/visualizer.dir/src/io/SimulationReader.cpp.o:在函数‘SimulationReader::SimulationReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’中:
/home/me/catkin_ws5/src/semantic_suma/src/io/SimulationReader.cpp:72:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/me/catkin_ws5/src/semantic_suma/src/io/SimulationReader.cpp:73:对‘glow::glRotateZ(float)’未定义的引用
/home/me/catkin_ws5/src/semantic_suma/src/io/SimulationReader.cpp:73:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/me/catkin_ws5/src/semantic_suma/src/io/SimulationReader.cpp:74:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/me/catkin_ws5/src/semantic_suma/src/io/SimulationReader.cpp:75:对‘glow::glRotateZ(float)’未定义的引用
解决方法:CMakeList.txt中添加GEL
1)查看 ldconfig -p | grep libEGL
根据libEGL的位置在.bashrc中添加
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
2)CmakeList.txt修改如下:
cmake_minimum_required(VERSION 3.2.0)
project(semantic_suma)
find_package(OpenGL REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(Boost REQUIRED COMPONENTS filesystem system)
find_package(GTSAM REQUIRED)
find_package(OpenCV REQUIRED)
find_package(catkin COMPONENTS rangenet_lib)
find_package(Eigen3 REQUIRED)
find_package(X11)
find_library(EGL_LIBRARY NAMES EGL HINTS /usr/lib/x86_64-linux-gnu)
catkin_package(
INCLUDE_DIRS src
LIBRARIES suma
CATKIN_DEPENDS
glow
rangenet_lib
DEPENDS
Boost
)
include_directories(${catkin_INCLUDE_DIRS} /usr/include)
set(CMAKE_INCLUDE_CURRENT_DIR ON) # needs to be activated for qt generated files in build directory.
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_FLAGS "-std=c++11 -O3 -Wall ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "-UDEBUG_GL -UDEBUG -DNDEBUG -g2 ${CMAKE_CXX_FLAGS}")
# since now everything resides in "bin", we have to copy some stuff.
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
include_directories(
${QT5_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
${GTSAM_INCLUDE_DIRS}
/usr/include/eigen3
${rangenet_lib_INCLUDE_DIRS}
${TENSORRT_INCLUDE_DIRS}
)
include_directories(src/)
include_directories("/home/nssc/catkin_ws5/src/glow/include")
link_directories(/usr/lib/x86_64-linux-gnu)
# pkg_check_modules(EGL REQUIRED egl)
option(ENABLE_NVIDIA_EXT "Enable Nvidia GL capabilites." OFF)
set(OPENGL_VERSION 330 CACHE STRING "Available OpenGL version")
if(ENABLE_NVIDIA_EXT)
message("Enabling Nvidia OpenGL extensions.")
add_definitions(-DQUERY_MEMORY_NV)
endif()
add_definitions(-D__GL_VERSION=${OPENGL_VERSION})
message(STATUS "Using OpenGL version ${OPENGL_VERSION}.")
include(/home/nssc/catkin_ws5/src/glow/cmake/GenCppFile.cmake)
include(/home/nssc/catkin_ws5/src/glow/cmake/GlowShaderCompilation.cmake)
set(COMP_SHADER_SRC ${CMAKE_BINARY_DIR}/computation_shaders.cpp)
set(VIZ_SHADER_SRC ${CMAKE_BINARY_DIR}/visualization_shaders.cpp)
COMPILE_SHADERS(${COMP_SHADER_SRC}
src/shader/color.glsl
src/shader/color_map.glsl
src/shader/empty.vert
src/shader/empty.frag
src/shader/quad.geom
src/shader/quad_inverse.geom
src/shader/passthrough.frag
src/shader/Frame2Model_jacobians.frag
src/shader/Frame2Model_jacobians.geom
src/shader/Frame2Model_jacobians.vert
src/shader/render_surfels.frag
src/shader/render_surfels.geom
src/shader/render_surfels.vert
src/shader/render_compose.frag
src/shader/update_surfels.vert
src/shader/update_surfels.geom
src/shader/update_surfels.frag
src/shader/extract_surfels.vert
src/shader/init_radiusConf.vert
src/shader/init_radiusConf.frag
src/shader/copy_surfels.vert
src/shader/copy_surfels.geom
src/shader/gen_surfels.frag
src/shader/gen_surfels.geom
src/shader/gen_surfels.vert
src/shader/init_depthimg.frag
src/shader/avg_vertexmap.frag
src/shader/gen_depthimg.vert
src/shader/gen_depthimg.frag
src/shader/gen_normalmap.frag
src/shader/gen_indexmap.vert
src/shader/gen_indexmap.frag
src/shader/bilateral_filter.frag
src/shader/gen_vertexmap.vert
src/shader/gen_vertexmap.frag
src/shader/gen_semanticmap.frag
src/shader/floodfill.frag
# needed for surfelmap:
src/shader/draw_surfels.frag
src/shader/draw_surfels.geom
src/shader/draw_surfels.vert
src/shader/draw_surfelPoints.vert
src/shader/draw_submaps.vert
src/shader/draw_submaps.geom
src/shader/coloredvertices.frag
src/shader/coloredvertices.vert
)
COMPILE_SHADERS(${VIZ_SHADER_SRC}
src/shader/draw_normalmap3d.geom
src/shader/draw_normalmap3d.vert
src/shader/draw_vertexmap3d.vert
src/shader/draw_depthimg.frag
src/shader/draw_normalmap.frag
src/shader/draw_residuals.frag
src/shader/draw_mesh.vert
src/shader/draw_mesh.frag
src/shader/draw_posegraph_edge.geom
src/shader/laserscan.vert
src/shader/laserscan.frag
src/shader/draw_semanticmap.frag
src/shader/draw_semantic_colormap.frag
)
QT5_WRAP_UI(UI_HDRS src/visualizer/visualizer.ui)
add_library(robovision
src/rv/CompositeParameter.cpp
src/rv/FileUtil.cpp
src/rv/Laserscan.cpp
src/rv/Math.cpp
src/rv/Parameter.cpp
src/rv/ParameterList.cpp
src/rv/ParameterListIterator.cpp
src/rv/PrimitiveParameters.cpp
src/rv/Random.cpp
src/rv/RangeParameter.cpp
src/rv/string_utils.cpp
src/rv/Stopwatch.cpp
src/rv/transform.cpp
src/rv/XmlDocument.cpp
src/rv/XmlNode.cpp
src/rv/yxml.c
)
add_library(suma
src/core/SurfelMapping.cpp
src/core/Preprocessing.cpp
src/core/Frame2Model.cpp
src/core/SurfelMap.cpp
src/core/lie_algebra.cpp
src/core/LieGaussNewton.cpp
src/core/Posegraph.cpp
src/core/ImagePyramidGenerator.cpp
${COMP_SHADER_SRC})
file(GLOB GLOW_SRC_FILES
"/home/nssc/catkin_ws5/src/glow/src/glow/*.cpp"
"/home/nssc/catkin_ws5/src/glow/src/glow/util/*.cpp")
add_executable(visualizer
src/io/KITTIReader.cpp
src/io/SimulationReader.cpp
src/io/RobocarReader.cpp
# use rangenet
src/io/RangenetAPI.cpp
src/opengl/Mesh.cpp
src/opengl/Model.cpp
src/opengl/ObjReader.cpp
src/util/kitti_utils.cpp
src/util/ScanAccumulator.cpp
${UI_HDRS}
${VIZ_SHADER_SRC}
${GLOW_SRC_FILES}
src/visualizer/GraphWidget.cpp
src/visualizer/ViewportWidget.cpp
src/visualizer/VisualizerWindow.cpp
src/visualizer/visualizer.cpp
)
target_link_libraries(robovision ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${rangenet_lib_LIBRARIES} gtsam pthread)
target_link_libraries(suma ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${rangenet_lib_LIBRARIES} gtsam pthread robovision)
target_link_libraries(visualizer suma ${X11_LIBRARIES} ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${EGL_LIBRARY} gtsam pthread robovision Qt5::OpenGL Qt5::Widgets ${OpenCV_LIBS})
3.报错:
return 1;
类不能有返回值,直接注释掉
运行-KITTI数据集
将semantic_suma/config/default.xml中模型路径修改成自己使用的模型路径
<param name="model_path" type="string">/home/me/data/darknet53</param>
运行命令:
./src/semantic_suma/bin/visualizer ~/catkin_ws5/src/semantic_suma/config/default.xml
左上角打开下载的KITTI数据集中的.bin文件,点击左下角开始按钮,即可开始
鼠标左键用来前后移动,右键翻转,长按滚轮鼠标向界面上滑动可提高观看视角
运行结果
保存pose:
左上角File->save pose
报错:Unknown name for calibration matrix.
将每个序列对应的calib.txt文件放到相应的位置即可
参考链接:
1.https://blog.csdn.net/weixin_46118817/article/details/125194792?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125194792-blog-137207324.235%5Ev43%5Econtrol&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125194792-blog-137207324.235%5Ev43%5Econtrol&utm_relevant_index=1
2.https://blog.csdn.net/Parkerfive/article/details/129060845?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-129060845-blog-136219565.235%5Ev43%5Econtrol&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-129060845-blog-136219565.235%5Ev43%5Econtrol&utm_relevant_index=6
3.https://blog.csdn.net/weixin_46118817/article/details/125194792?ops_request_misc=&request_id=&biz_id=102&utm_term=suma&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-125194792.142%5Ev73%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&spm=1018.2226.3001.4187
4.https://blog.csdn.net/weixin_58045467/article/details/126513326