jetson orin ubuntu 22.04 复现rs-kinfu算法
文章目录
- 前言
- 一、什么是rs-kinfu?
- 二、硬件-软件配置
- 三、安装opencv
- 四、安装realsense
- 五、安装ROS2 Wrapper
- 六、build and run kinfu
- 总结
前言
最近刚好要拍一个深度相机的三维地图重建的视频,手上有一个D405,于是便想着查查关于怎么用D405来实现地图重建,随后便查到rs-kinfu的算法,花了整整1.5天的时间来尝试复现这个算法,最后也是终于成功了,但效果不是很好,感觉算法中还有很多地方需要调参。
如果哪个步骤有报错或者感觉哪里不是很理解的可以在评论区里提出,看到我都会一一回复的。
一、什么是rs-kinfu?
rs-kinfu是Intel为RealSense深度相机优化的一个实时三维重建算法。它源自著名的KinectFusion(Kinfu)技术,核心原理是通过连续输入深度相机的RGB-D(颜色+深度)数据流,在GPU上实时融合生成环境的稠密三维体素地图。算法利用截断符号距离函数(TSDF)来增量式更新场景几何,实现动态的、交互式的三维建模,广泛应用于机器人导航、VR/AR和数字孪生等领域。
二、硬件-软件配置
硬件:jetson orin nano super
软件:
jetpack 6.1
CUDA 12.6
ubuntu 22.04 humble ros2
opencv-4.10
realsense-最新
三、安装opencv
- 在opencv官网中下载opencv 4.10.0-source版

- 下载opencv-contrib
在终端中运行以下命令
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.10.0.zip -O opencv_contrib-4.10.0.zip
- 解压两个文件
- 将解压后的***opencv_contrib-4.10.0***重新命名为***opencv_contrib***,再将其放到***opencv-4.10.0***这个文件夹中
- 在终端中输入以下命令
sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
随后切换路径至opencv-4.10.0并创建文件夹build
cd opencv-4.10.0 && mkdir build
cd build
- 然后进行安装opencv中最重要耗时最久的一步(我花了一个小时左右的时间)
cmake .. \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D OPENCV_DNN_CUDA=ON \
-D WITH_V4L=ON \
-D WITH_OPENGL=ON \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D CUDA_ARCH_BIN=8.7 \
-D CUDA_ARCH_PTX=8.7 \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_java=OFF
然后,建议以下命令逐行运行,以便参考有可能的报错
make -j(nproc) # 这个nproc代表的是你的CPU的几核
sudo make install
sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo ldconfig
sudo sh -c "echo 'PKG_CONFIG_PATH=\$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig' > /etc/bash.bashrc"
sudo sh -c "echo export PKG_CONFIG_PATH >> /etc/bash.bashrc"
source /etc/bash.bashrc
- 版本确认
pkg-config --modversion opencv4
opencv_version
jtop # 在info中查看opencv版本
四、安装realsense
依照github intel官方给出的安装介绍
realsense安装方法
- 注册服务器的公钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
- 将服务器添加到存储库列表中
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
- 安装 SDK
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev
安装完成后便可以在终端中输入命令
realsense-viewer
查看realsense点云图像
五、安装ROS2 Wrapper
这个博主写的文章非常好,可以参考这篇博主的安装方法
Jetson AGX orin Ubuntu22.04 ROS2 humble ORB-SLAM3 Realsense D435i
六、build and run kinfu
安装好wrapper后进入到这个文件夹中(注:前面的Desktop/librealsense只是本人的安装路径)
Desktop/librealsense/wrappers/opencv/kinfu
修改cmakelists.txt
cmake_minimum_required(VERSION 3.8)
project(RealSenseKinfuExample)
# Find required packages
find_package(OpenCV 4 REQUIRED)
find_package(glfw3 3.3 REQUIRED)
find_package(OpenGL REQUIRED)
# Use pkg-config for RealSense (bypasses cmake package issues)
find_package(PkgConfig REQUIRED)
pkg_check_modules(REALSENSE2 REQUIRED realsense2)
# ImGui setup - use the existing ImGui from librealsense third-party
set(IMGUI_PATHS
"${CMAKE_CURRENT_SOURCE_DIR}/imgui"
"${CMAKE_CURRENT_SOURCE_DIR}/../imgui"
"${CMAKE_SOURCE_DIR}/imgui"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../third-party/imgui" # librealsense third-party
"${CMAKE_CURRENT_SOURCE_DIR}/../../../../third-party/imgui" # alternative path
)
set(IMGUI_DIR "")
foreach(path ${IMGUI_PATHS})
if(EXISTS ${path}/imgui.h)
set(IMGUI_DIR ${path})
message(STATUS "Found ImGui at: ${IMGUI_DIR}")
break()
endif()
endforeach()
if(IMGUI_DIR STREQUAL "")
message(STATUS "Current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "Checking paths:")
foreach(path ${IMGUI_PATHS})
message(STATUS " - ${path}")
endforeach()
message(FATAL_ERROR "ImGui not found. It should be available in librealsense/third-party/imgui")
endif()
# ImGui source files - note that the librealsense imgui has slightly different structure
set(IMGUI_SOURCES
${IMGUI_DIR}/imgui.cpp
${IMGUI_DIR}/imgui_draw.cpp
${IMGUI_DIR}/imgui_tables.cpp
${IMGUI_DIR}/imgui_widgets.cpp
${IMGUI_DIR}/imgui_impl_glfw.cpp
${IMGUI_DIR}/imgui_impl_opengl3.cpp
${IMGUI_DIR}/realsense_imgui.cpp # RealSense-specific ImGui code
)
# Add include directories
include_directories(
../../../examples
${OpenCV_INCLUDE_DIRS}
${IMGUI_DIR} # No backends subdirectory in librealsense imgui
${REALSENSE2_INCLUDE_DIRS}
)
# Create ImGui library
add_library(imgui STATIC ${IMGUI_SOURCES})
target_link_libraries(imgui glfw ${OPENGL_LIBRARIES})
# Create executable
add_executable(rs-kinfu rs-kinfu.cpp ../../../examples/example.hpp)
set_property(TARGET rs-kinfu PROPERTY CXX_STANDARD 11)
# Add compiler flags from pkg-config
target_compile_options(rs-kinfu PRIVATE ${REALSENSE2_CFLAGS_OTHER})
# Link all libraries using pkg-config results for RealSense
target_link_libraries(rs-kinfu
glfw
${OPENGL_LIBRARIES}
${OpenCV_LIBS}
${REALSENSE2_LIBRARIES} # This comes from pkg-config
imgui
)
set_target_properties(rs-kinfu PROPERTIES FOLDER "Examples/OpenCV")
install(TARGETS rs-kinfu RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
运行以下指令make kinfu
mkdir -p build && cd build
cmake ..
make -j$(nproc)
因为我使用的是D405,所以我需要在.cpp文件中修改一个参数
// depth_scale = dpt.get_depth_scale(); // 将这一行注释,换成下一行
depth_scale = 0.001;
随后运行
./rs-kinfu -w 640 -h 480 -fps 30
这样便大功告成了
但其实效果并不是很好,之后还需要具体研究一下kinfu点云构建的问题所在。
总结
在Jetson Orin Nano上成功配置Intel D405深度相机并运行rs-kinfu算法完成三维重建。过程涉及安装JetPack 6.1、CUDA 12.6、定制编译OpenCV 4.10.0、部署LibRealSense SDK及ROS2 Humble wrapper。关键步骤包括解决OpenCV与CUDA的编译集成、KinFu程序中的深度尺度参数适配(D405需手动设置为0.001)以及ImGui库的路径配置。最终虽实现实时重建,但点云效果仍有优化空间,突显了在嵌入式平台上进行密集三维重建时算法调参和性能平衡的挑战。
更多推荐



所有评论(0)