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.omake[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.mzph.cn/bicheng/64565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-75-大语言模型LLM之基于llama.cpp和Transformers与Qwen(通义千问)因果语言模型交互

文章目录 1 Qwen2.51.1 模型介绍1.2 Qwen2.5-0.5B模型1.3 llama.cpp支持Qwen架构2 下载模型2.1 Huggingface镜像网站整体下载2.2 阿里魔塔社区整体下载2.3 模型Qwen2.5-0.5B-Instruct-IQ3_M.gguf3 推理方式3.1 llama.cpp启动模型3.1.1 补全3.1.2 聊天3.2 使用transformers库3.2…

Flask入门:打造简易投票系统

目录 准备工作 创建项目结构 编写HTML模板 编写Flask应用 代码解读 进一步优化 结语 Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概…

ApacheStruts2 目录遍历与文件上传漏洞复现(CVE-2024-53677,S2-067)(附脚本)

0x01 产品描述: Apache Struts 2 是一个用于JAVA的MVC框架,它用于快速开发web应用。它的设计目标是使得开发者能够更容易的处理web应用的展现层,数据层,和业务层。0x02 漏洞描述: CVE-2024-53677 漏洞的根本原因是 Struts 框架中不安全的文件上传处理机制。攻击者利用 CVE…

Cadence学习笔记 9 器件封装匹配

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制Cadence学习笔记 5 四路HDMI原理图绘制Cadence学习笔记…

2011年IMO几何预选题第5题

△ A B C \triangle ABC △ABC 内心为 I I I, 外接圆在 B B B, C C C 两点处的切线交于 P P P, D D D, E E E 分别为 B I BI BI, C I CI CI 与外接圆的交点, D E DE DE 分别交 A B AB AB, A C AC AC 于点 M M M, N N N, 过 M M M 作 B I BI BI 平行线, 过 N N …

Python构造方法:对象的“开机启动程序”

在Python中&#xff0c;构造方法&#xff08;__init__&#xff09;是一个类的“生命之初”&#xff0c;定义了每个对象从“出生”到“投入使用”的整个初始化过程。那既然类里可以直接写属性&#xff0c;为什么还需要构造方法呢&#xff1f; 构造方法的核心作用&#xff1a;创…

Superset 和 Appsmith的对比

对于报表数据需要给到前端进行定制化展示&#xff0c;并且直接提供基于报表的 API 让前端调用&#xff0c;以下是对 Superset 和 Appsmith 的对比分析&#xff1a; 1. Apache Superset API 支持 Superset 提供 REST API 接口&#xff0c;可以让前端调用获取报表数据。前端可以…

idea | maven项目标红解决方案 | 强制刷新所有依赖

场景&#xff1a;父pom多模块&#xff0c;新增时&#xff0c;依赖正常&#xff0c;但是application.yml看起来没被springboot识别&#xff0c;试过rebuild、重开idea清除缓存&#xff0c;重新maven面板reload all maven projects, 试过pom文件的依赖先移除再重新粘贴导入进来&a…

Nginx常用配置详解(1)

Nginx常用配置详解 一、全局块&#xff08;main&#xff09;配置 在Nginx的配置文件中&#xff0c;最外层的部分是全局块。这部分配置通常会影响Nginx服务器整体的运行参数。 worker_processes 作用&#xff1a;这个配置指令用于指定Nginx工作进程的数量。工作进程是Nginx处理…

单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。

论文介绍了一种从单幅图像合成 360 3D 场景的新方法。该方法以连贯的方式生成全景图及其相应的深度&#xff0c;解决了现有最先进方法&#xff08;如 LucidDreamer 和 WonderJourney 的局限性。这些方法按照生成轨迹依次添加细节&#xff0c;通常在循环回输入图像时导致可见的接…

Linux —— 管理进程

一、查看进程 运行态&#xff08;Running&#xff09; 定义&#xff1a;处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中&#xff0c;同一时刻只有一个进程处于运行态&#xff1b;在多 CPU 或多核系统中&#xff0c;可能有多个进程同时处于运行态。示例&#xff1a; 当…

Kubernetes中subPath

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;当容器关闭时&#xff0c;其使用的subPath目录的清理行为取决于几个因素。首先&#xff0c;subPath允许Pod中的容器挂载共享卷的一个子目录&#xff0c;而不是整个卷。这种机制有助于避免不同容器间的文件冲突。 容器关闭…

前端(组件传参案例)

父组件(商品详情页) 子组件上边放大图 底下缩小轮播图 需求分析&#xff1a;父组件获取图片数据&#xff0c;传给底下子组件进行进行轮播&#xff0c;实现父组件给子组件传参。然后底下子组件轮播后&#xff0c;把当前图片下标给父组件&#xff0c;实现子组件给父组件传参。父组…

Linux基础 -- 查看程序注册了的信号的方案

程序注册了哪些信号的方案 方法 1&#xff1a;使用 strace 动态追踪信号处理注册 strace 是一个强大的工具&#xff0c;可以动态捕获程序对信号的处理注册行为&#xff08;如 sigaction 或 signal 系统调用&#xff09;。 示例 启动程序并追踪信号注册&#xff1a; strace…

数据库设计的四大原则:优化性能、保证一致性与高效处理

目录 一. 数据冗余最小化 二. 数据一致性 三. 事务处理 四. 查询性能优化 数据库设计不仅是关于创建表和字段的简单任务&#xff0c;更是构建一个高效运行、易于维护且能够确保数据一致性的系统的核心。一个好的数据库设计不仅能提升应用程序的性能&#xff0c;还能为未来的…

What‘s Next on TON 成都站|聚焦生态创新,共享技术前沿

2024 年&#xff0c;TON 生态为何持续吸引全球开发者和用户的关注&#xff1f;在经历了一系列重要的技术更新和生态扩展后&#xff0c;TON 正在迎来一个爆发式增长的阶段。作为全球四城巡回沙龙的第三站&#xff0c;成都站的活动将如何继续推动这一势头&#xff0c;带来哪些不容…

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …

近端策略优化(Proximal Policy Optimization, PPO)详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Windows 系统如何高效搭建 Linux 开发环境,一步步解锁内核源码

每日禅语 人闲桂花落&#xff0c;夜静春山空。月出惊山鸟&#xff0c;时鸣春涧中。人人皆以为王维只是在写自然界景物的美丽&#xff0c;其实这首诗不只体现了自然界的美丽&#xff0c;更是诗人内心的写照&#xff0c;体现了诗人心中禅心与禅境的完美结合。这首诗的境界之所以如…

C++循环斐波那契数列

1.斐波那契数列&#xff0c;又称黄金分割数列、因数学家莱昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”。如果每对兔子&#xff08;一雄一雌&#xff09;每月能生殖一对小兔子&#xff08;一雄一雌&…