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!**

相关推荐
Tlzns9 分钟前
Linux网络——UDP的运用
linux·网络·udp
码农土豆15 分钟前
PaddlePaddle飞桨Linux系统Docker版安装
linux·docker·paddlepaddle
Hacker_xingchen20 分钟前
天融信Linux系统安全问题
linux·运维·系统安全
张暮笛30 分钟前
抓取手机HCI日志
linux
大猫和小黄32 分钟前
Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
linux·服务器·windows·git
Joyner201836 分钟前
【Linux】ubuntu通过远程命令行启动桌面应用
linux·服务器·ubuntu
ghostwritten39 分钟前
Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon
linux·运维·服务器
我是唐青枫41 分钟前
Linux xargs 命令使用教程
linux·运维·服务器
Eric.Lee20211 小时前
ubuntu paddle ocr 部署bug问题解决
ubuntu·ocr·paddle
未知陨落1 小时前
Linux常用命令
linux·运维·服务器