Ubuntu 20.04下Kinect2驱动环境配置与测试【稳定无坑版】

一、引言

微软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开发环境的小伙伴们有所帮助,为后续的项目开发奠定良好基础,欢迎大家有问题评论区留言讨论。

如果有帮助,可以点赞关注一下!Thanks!**

相关推荐
正在努力的小河1 小时前
Linux设备树简介
linux·运维·服务器
荣光波比1 小时前
Linux(十一)——LVM磁盘配额整理
linux·运维·云计算
LLLLYYYRRRRRTT1 小时前
WordPress (LNMP 架构) 一键部署 Playbook
linux·架构·ansible·mariadb
轻松Ai享生活2 小时前
crash 进程分析流程图
linux
大路谈数字化3 小时前
Centos中内存CPU硬盘的查询
linux·运维·centos
luoqice4 小时前
linux下查看 UDP Server 端口的启用情况
linux
倔强的石头_5 小时前
【Linux指南】动静态库与链接机制:从原理到实践
linux
赏点剩饭7785 小时前
linux中的hostpath卷、nfs卷以及静态持久卷的区别
linux·运维·服务器
神鸟云6 小时前
DELL服务器 R系列 IPMI的配置
linux·运维·服务器·网络·边缘计算·pcdn
herderl6 小时前
**僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**
linux·运维·服务器·网络·网络协议