一、引言
微软Kinect2传感器作为一个包含深度传感器、RGB摄像头以及红外摄像头的多模态采集设备,在计算机视觉、机器人感知、人体姿态识别、3D建模等领域有着广泛应用。相比第一代Kinect,Kinect2拥有更好的深度分辨率和更高的数据质量。本文将详细介绍如何在Ubuntu 20.04下配置并测试Kinect2设备的环境,以便为后续的开发工作(如ROS下的机器人感知应用、SLAM算法研究或三维重建应用)提供一个稳定且易用的基础
二、环境准备
2.1、操作系统及硬件信息
- 操作系统:Ubuntu 20.04 (64位)
- 硬件要求:USB 3.0接口(Kinect2需要USB 3.0来保证数据带宽)
- 已安装Git和CMake等构建工具(如果未安装,可使用
sudo apt-get install git cmake build-essential
进行安装)
2.2、相关驱动与库简介
Kinect2与Kinect for Windows SDK(官方只支持Windows)不同,在Linux上通常使用社区维护的开源库libfreenect2来驱动和访问Kinect2硬件数据。libfreenect2提供对深度、RGB、红外数据的访问接口,并包含基础的测试程序(Protonect),方便验证安装是否成功。
三、安装与配置
下面将详细介绍在Ubuntu 20.04下编译安装libfreenect2的步骤
3.1 安装必要依赖项
在编译libfreenect2前需要安装一些依赖库,包括USB驱动库(libusb)、图像处理库(libjpeg、libpng)、OpenGL、CMake构建工具等。打开终端并执行:
cpp
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config libusb-1.0-0-dev libturbojpeg0-dev libjpeg-turbo8-dev \
libglfw3-dev beignet-dev libva-dev libjpeg-dev libpng-dev
- libusb-1.0-0-dev:用于访问USB设备的开发头文件和库
- libturbojpeg0-dev、libjpeg-turbo8-dev、libjpeg-dev、libpng-dev:用于图像的JPEG、PNG解码处理
- libglfw3-dev:提供OpenGL上下文和窗口管理
- beignet-dev、libva-dev:若使用OpenCL加速需要的开发包(可选)
若不需要OpenCL加速,可忽略beignet-dev。本例中建议一并安装,保证后续灵活性
3.2 获取libfreenect2源码
建议home下自己方便管理
cpp
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
- 通过git clone可获取最新的libfreenect2源代码
3.3 编译与安装libfreenect2:
先创建构建目录,随后利用CMake进行配置并编译:
cpp
mkdir build && cd build
cmake .. -DENABLE_CXX11=ON
make -j4
sudo make install
- cmake ...: 让CMake从上级目录(源码目录)寻找CMakeLists.txt进行配置
- -DENABLE_CXX11=ON:开启C++11支持(如果需要)
- make -j4:并行编译,速度更快(根据CPU核心数进行调整)
- sudo make install安装后,libfreenect2相关库与可执行文件将放入系统目录中(如/usr/local/)。
TIPS: 可能会遇到的问题
在进行make 编译的时候出现了以下报错:
cpp
(base) sunshine@sunshine:~/Downloads/libfreenect2/build$ make
Scanning dependencies of target generate_resources_tool
[ 2%] Building CXX object CMakeFiles/generate_resources_tool.dir/tools/generate_resources.cpp.o
[ 4%] Linking CXX executable bin/generate_resources_tool
[ 4%] Built target generate_resources_tool
[ 7%] Building NVCC (Device) object CMakeFiles/cuda_compile_1.dir/src/cuda_compile_1_generated_cuda_kde_depth_packet_processor.cu.o
/home/sunshine/Downloads/libfreenect2/src/cuda_kde_depth_packet_processor.cu:39:10: fatal error: helper_math.h: 没有那个文件或目录
39 | #include <helper_math.h>
| ^~~~~~~~~~~~~~~
compilation terminated.
CMake Error at cuda_compile_1_generated_cuda_kde_depth_packet_processor.cu.o.RelWithDebInfo.cmake:220 (message):
Error generating
/home/sunshine/Downloads/libfreenect2/build/CMakeFiles/cuda_compile_1.dir/src/./cuda_compile_1_generated_cuda_kde_depth_packet_processor.cu.o
make[2]: *** [CMakeFiles/freenect2.dir/build.make:84:CMakeFiles/cuda_compile_1.dir/src/cuda_compile_1_generated_cuda_kde_depth_packet_processor.cu.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:175:CMakeFiles/freenect2.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2
这个错误是由于缺少 helper_math.h 文件,导致 CUDA 模块无法正常编译
虽然Kinect2相机本身并不直接依赖 CUDA 版本,但在使用 libfreenect2 等库时,CUDA 可用于加速深度数据处理,我系统安装的是CUDA11.8,因为是较新的cuda,缺少 helper_math.h 文件,导致编译错误,这个问题我找了网上很多资料都没有明确的解决办法,于是我想从NVIDIA 的 CUDA 示例仓库手动获取该文件,但是一直出现连接错误
cpp
(base) sunshine@sunshine:~/Downloads$ sudo wget https://raw.githubusercontent.com/NVIDIA/cuda-samples/master/Common/helper_math.h
[sudo] sunshine 的密码:
--2024-12-19 15:14:28-- https://raw.githubusercontent.com/NVIDIA/cuda-samples/master/Common/helper_math.h
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 0.0.0.0, ::
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443... 失败:拒绝连接。
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|::|:443... 失败:拒绝连接。
我点进去网页连接只能查看,无法下载 helper_math.h 文件
于是,我直接复制了文件内容在本地直接创建了一个新的helper_math.h (没想到还真有用)
然后将创建的helper_math.h移动到了对应的cuda文件夹里面
cpp
sudo mkdir -p /usr/local/cuda/samples/common/inc/
sudo mv helper_math.h /usr/local/cuda/samples/common/inc/
然后重新编译了libfreenect2
cpp
cd ~/Downloads/libfreenect2/build
make clean
cmake .. -DENABLE_CXX11=ON
make -j4
sudo make install
最终编译成功!!
四、运行测试
4.1、查看是否检测到Kinect2设备
bash
lsusb
蓝色框的就是Kinect2的设备名称
4.2、运行测试例程
进入到测试例程的文件夹
bash
cd /Downloads/libfreenect2/build/bin
./Protonect
显示未发现设备,这里有一个问题,必须使用管理员命令运行
bash
sudo ./Protonect
4.3 如果不想使用管理员命令,需要配置udev规则及权限
bash
先进入libfreenect2的编译文件夹
cd /Downloads/libfreenect2
sudo cp /platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
不使用管理员命令,直接运行
bash
cd libfreenect2/build/bin
./Protonect
即可完成!!
五、总结
通过上述步骤,我们在Ubuntu 20.04下成功编译和配置了libfreenect2,并利用Protonect测试确认了Kinect2的正常工作。这一过程包括对依赖环境的搭建、源码编译、设备权限配置和基础测试,希望本文对正在构建Kinect2开发环境的小伙伴们有所帮助,为后续的项目开发奠定良好基础,欢迎大家有问题评论区留言讨论。