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,一经查实,立即删除!

相关文章

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

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

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 …

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; 当…

前端(组件传参案例)

父组件(商品详情页) 子组件上边放大图 底下缩小轮播图 需求分析&#xff1a;父组件获取图片数据&#xff0c;传给底下子组件进行进行轮播&#xff0c;实现父组件给子组件传参。然后底下子组件轮播后&#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;一雄一雌&…

“视觉革命:走进可视化AI识别系统的智能世界

嘿&#xff0c;各位朋友&#xff01;今天咱们来聊聊一个特别酷炫的技术——可视化AI识别系统。想象一下&#xff0c;如果你的手机能够像你一样“看”懂周围的世界&#xff0c;并且还能告诉你它看到了什么&#xff0c;是不是很神奇&#xff1f;没错&#xff0c;这就是可视化AI识…

Kubernetes 生态揭秘:深度剖析服务与流量管理、Pod 创建,以及外部请求的响应之旅

kubernetes&#xff0c;简称为k8s&#xff08;k12345678s&#xff09;。用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群&#xf…

职场上,如何做好自我保护?

今天我们讨论一个话题&#xff1a;在职场上&#xff0c;如何保护好自己&#xff1f;废话不多说&#xff0c;我们直接上干货。 &#xff08;一&#xff09; 1.时刻准备一点零食或代餐&#xff0c;如果遇到长时间的会议&#xff0c;就补充点能量。代餐最好选流体&#xff0c;这…

【Lua热更新】下篇 -- 更新中

上篇链接&#xff1a;【Lua热更新】上篇 文章目录 三、xLua热更新&#x1f4d6;1.概述&#x1f4da;︎2.导入xLua框架&#x1f516;3. C#调用Lua3.1Lua解析器3.2Lua文件夹的重定向3.3Lua解析器管理器3.4全局变量获取3.5全局函数获取3.6映射到List和Dictionary3.7映射到类3.8映…

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题&#xff0c;需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令&#xff0c;用于维护 go.mod 文件…

C# 中的闭包

文章目录 前言一、闭包的基本概念二、匿名函数中的闭包1、定义和使用匿名函数2、匿名函数捕获外部变量3、闭包的生命周期 三、Lambda 表达式中的闭包1、定义和使用 Lambda 表达式2、Lambda 表达式捕获外部变量3、闭包的作用域 四、闭包的应用场景1、事件处理2、异步编程3、迭代…

视阅口译与其他口译的不同点

与其他口译不同 译员在进行视阅口译时可以看到书面材料&#xff0c;这与交替口译和同声口译有所不同。译员能够提前浏览文本内容&#xff0c;对主题、结构和专业词汇等有初步的了解。 压力相对较小 视阅口译相较于同声传译而言&#xff0c;时间压力没有那么紧迫。译员有一定…

初学stm32 --- NVIC中断

目录 STM32 NVIC 中断优先级管理 NVIC_Type: ISER[8]&#xff1a; ICER[8]&#xff1a; ISPR[8]&#xff1a; ICPR[8]&#xff1a; IABR[8]&#xff1a; IP[240]&#xff1a; STM32 的中断分组&#xff1a; 中断优先级分组函数 NVIC_PriorityGroupConfig 中断初始化函…