一、环境搭建
本人电脑环境是ubuntu18主要是参考这篇博客
【点云语义分割】Ubuntu18.04+GTX1060 配置运行RangeNet++
安装的版本如下,安装顺序是
- Cuda10.1安装
- cudnn 7.6.2安装
- TensorRT 5.1.5安装
也可以安装其他版本,但是安装其他版本的时候先看tensorrt的版本,直接下载tensorrt的安装文件会发现他的安装文件名字上已经限制了安装的cuda和cudnn版本,tensortt可供选的版本很少,如下就已经限定是cuda10.1 和 cudnn 7.5(实际上我装的是cudnn7.6.2的也没啥问题)
然后在查看cudnn对应的cuda版本,安装顺序还是如上cuda->cudnn->tensorrt
安装其他版本tensorrt可能会遇到错误,需要修改代码,参考这位博主;
30系显卡怎么配置rangenet++和SuMa++
二、RangeNet++源码编译
1.下载依赖源码和编译就依照官方描述操作即可:https://github.com/PRBonn/rangenet_lib
2.darknet53预训练模型下载::https://www.ipb.uni-bonn.de/html/projects/semantic_suma/darknet53.tar.gz
还有其他预训练模型其他预训练模型,但是我下载后发现缺少文件,运行报错不能使用
darknet53(可用)
darknet21(缺少文件不可用)
运行指令如下第一个 ./devel/lib/rangenet_lib/infer是编译生成的推理程序路径,第二个home/gwz/catkin_rangenet/darknet53是预训练模型的路径,第三个是点云的二进制文件路径,工程自带一个rangenet_lib/example/000000.bin径,
/home/gwz/catkin_rangenet/src/rangenet_lib/example/000000.bin ./devel/lib/rangenet_lib/infer -p /home/gwz/catkin_rangenet/darknet53
-s /home/gwz/catkin_rangenet/src/rangenet_lib/example/000000.bin --verbose
如果运行时候报错 cuda error out of memory,等一段时间就好了不用,
https://github.com/PRBonn/rangenet_lib/issues/5
一些个人遇到的问题,没遇到可跳过不看
1. 报错没定义tensorrt的成员函数,就是没找到tensorrt
sudo gedit /etc/ld.so.conf
往里面添加下载并解压的tensorrt/lib的路径,如
/home/gwz/tensorrt_tar/TensorRT-5.1.5.0/lib
然后
sudo ldconfig
2. 如果报错/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.7 不是符号链接,则自己按照如下命令收到生成并覆盖符号链接:
sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.7.6.2 /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so.7
3. yaml 报错(首先排除是否路径错误或者ymal文件里面没有对应内容键值甚至是空文件:
librangenet_lib.so:对‘vtable for YAML::BadConversion’未定义的引用
参考这篇博客换个yaml版本
https://blog.csdn.net/qq_43085476/article/details/123349085
如果没找到yaml则对/home/gwz/catkin_rangenet/src/rangenet_lib/CMakeLists.txt文件做出如下修改:
link_directories(/usr/local/lib)
include_directories(/usr/local/include/yaml-cpp)
FIND_LIBRARY(YAML_CPP_LIBRARIES yaml-cpp)
三、SUMA++源码编译
需要安装gtsam参考这篇博客
https://blog.csdn.net/JiaXie15/article/details/108368862
参考这篇博客:
https://blog.csdn.net/weixin_46118817/article/details/125194792
需要克隆 semantic_suma 和glow ,但是Glow的cmakelist好像不起作用会有一些错误
1. 编译报错:Unknown CMake command “COMPILE_SHADERS”
COMPILE_SHADERS在glow的cmake中定义,通过往 semantic_suma的CMakeList.txt中添加如下即可(修改为自己克隆的glow下的路径)
include(/home/gwz/catkin_rangenet/src/glow/cmake/GenCppFile.cmake)
include(/home/gwz/catkin_rangenet/src/glow/cmake/GlowShaderCompilation.cmake)
2. fatal error: glow/GlBuffer.h: 没有那个文件或目录,
通过往CMakeList.txt中添加如下:
include_directories("/home/gwz/catkin_rangenet/src/glow/include/")
3.glow:: xxxx 未定义的引用
MakeFiles/visualizer.dir/src/io/SimulationReader.cpp.o:在函数‘SimulationReader::SimulationReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’中:
/home/gwz/catkin_rangenet/src/semantic_suma/src/io/SimulationReader.cpp:72:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/gwz/catkin_rangenet/src/semantic_suma/src/io/SimulationReader.cpp:73:对‘glow::glRotateZ(float)’未定义的引用
/home/gwz/catkin_rangenet/src/semantic_suma/src/io/SimulationReader.cpp:73:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/gwz/catkin_rangenet/src/semantic_suma/src/io/SimulationReader.cpp:74:对‘glow::glTranslate(float, float, float)’未定义的引用
/home/gwz/catkin_rangenet/src/semantic_suma/src/io/SimulationReader.cpp:75:对‘glow::glRotateZ(float)’未定义的引用
做出了一些修改(设置的是绝对路径您需要改成自己的),我不太擅长这个因此有些修改可能多余,不过最后还是编译通过并且运行成功了,完整CMakeList见文末
find_package(Eigen3 REQUIRED)
find_package(X11)
include_directories("/home/gwz/catkin_rangenet/src/glow/include") include_directories("/usr/include/EGL")
file(GLOB GLOW_SRC_FILES
"/home/gwz/catkin_rangenet/src/glow/src/glow/*.cpp"
"/home/gwz/catkin_rangenet/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(visualizer suma ${X11_LIBRARIES} ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} EGL gtsam pthread robovision Qt5::OpenGL Qt5::Widgets ${OpenCV_LIBS})
然后运行命令
./src/bin/visualizer ~/catkin_rangenet/src/semantic_suma/config/default.xml
不指定semantic_suma/config/default.xml的路径可能找不到产生如下错误:
参考这篇博客:https://blog.csdn.net/weixin_58045467/article/details/126513326
terminate called after throwing an instance of 'rv::XmlError'
what(): Error while parsing in line 1
并且需要将semantic_suma/config/default.xml中的模型路径修改成自己使用模型路径
<param name="model_path" type="string">/home/gwz/catkin_rangenet/darknet53</param>
运行结果如图:
完整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)
catkin_package(
INCLUDE_DIRS src
LIBRARIES suma
CATKIN_DEPENDS
glow
rangenet_lib
DEPENDS
Boost
)
include_directories(${catkin_INCLUDE_DIRS})
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/gwz/catkin_rangenet/src/glow/include")
include_directories("/usr/include/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/gwz/catkin_rangenet/src/glow/cmake/GenCppFile.cmake)
include(/home/gwz/catkin_rangenet/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/gwz/catkin_rangenet/src/glow/src/glow/*.cpp"
"/home/gwz/catkin_rangenet/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 gtsam pthread robovision Qt5::OpenGL Qt5::Widgets ${OpenCV_LIBS})