当前位置: 首页 > article >正文

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构建工具等。打开终端并执行:

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下自己方便管理

git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
  • 通过git clone可获取最新的libfreenect2源代码

3.3 编译与安装libfreenect2:

先创建构建目录,随后利用CMake进行配置并编译:

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 编译的时候出现了以下报错:

(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 示例仓库手动获取该文件,但是一直出现连接错误

(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文件夹里面

sudo mkdir -p /usr/local/cuda/samples/common/inc/
sudo mv helper_math.h /usr/local/cuda/samples/common/inc/

然后重新编译了libfreenect2

cd ~/Downloads/libfreenect2/build
make clean
cmake .. -DENABLE_CXX11=ON
make -j4
sudo make install

最终编译成功!!

四、运行测试

4.1、查看是否检测到Kinect2设备

lsusb

在这里插入图片描述
蓝色框的就是Kinect2的设备名称

4.2、运行测试例程

进入到测试例程的文件夹

cd /Downloads/libfreenect2/build/bin
./Protonect

在这里插入图片描述

显示未发现设备,这里有一个问题,必须使用管理员命令运行

sudo ./Protonect

在这里插入图片描述

4.3 如果不想使用管理员命令,需要配置udev规则及权限

先进入libfreenect2的编译文件夹
cd /Downloads/libfreenect2
sudo cp /platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

不使用管理员命令,直接运行

cd  libfreenect2/build/bin
./Protonect

即可完成!!

五、总结

通过上述步骤,我们在Ubuntu 20.04下成功编译和配置了libfreenect2,并利用Protonect测试确认了Kinect2的正常工作。这一过程包括对依赖环境的搭建、源码编译、设备权限配置和基础测试,希望本文对正在构建Kinect2开发环境的小伙伴们有所帮助,为后续的项目开发奠定良好基础,欢迎大家有问题评论区留言讨论。

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


http://www.kler.cn/a/447916.html

相关文章:

  • Day50 图论part01
  • SQL进阶技巧:如何计算商品需求与到货队列表进出计划?
  • go mod tidy 命令
  • 0.gitlab ubuntu20.04 部署问题解决
  • 基于层次化设计方法,设计一个16位二进制全加器
  • 【论文研读】U-DiTs:在U型扩散Transformer中引入下采样Token,以更低计算成本超越DiT-XL/2
  • 国标GB28181平台EasyGBS在安防视频监控中的信号传输(电源/视频/音频)特性及差异
  • 本地Push Git失败
  • QtCreator配置github copilot实现AI辅助编程
  • Django中注册模型到Admin界面
  • 动手学深度学习-多层感知机-7前向传播、反向传播和计算图
  • labelme标签批量转换数据集json_to_dataset
  • oracle dblink 的创建及使用
  • 在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。
  • Dijkstra(迪杰斯特拉)最短路径算法可视化演示
  • torch.unsqueeze:灵活调整张量维度的利器
  • 插入排序 计数排序 数据库的三范式
  • YOLO11改进-注意力-引入自调制特征聚合模块SMFA
  • 2024年智能船舶与机电系统
  • Deformable DETR中的look forword once
  • 排序算法进一步总结
  • 使用 AI 辅助开发一个开源 IP 信息查询工具:一
  • thinkphp 多选框
  • < Chrome Extension : TamperMonkey > 去禁用网页的鼠标的事件 (水文)
  • Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • 浅析InnoDB引擎架构(已完结)