Ubuntu 18.04 安装iai_kinect2遇到的问题

2024-01-27 14:20

本文主要是介绍Ubuntu 18.04 安装iai_kinect2遇到的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行环境为:Ubuntu 18.04 Ros melodic

一、所需环境

libfreenect2,下载安装教程https://github.com/OpenKinect/libfreenect2

对于git clone因为网络问题用不了的同学,建议windows下载了以后把u盘拷进ubuntu系统。

二、安装libfreenect2

1. 下载u盘文件https://github.com/OpenKinect/libfreenect2

https://github.com/code-iai/iai_kinect2

2. 拷进/home/用户名/工作空间/src文件夹

3.解压libfreenect2的压缩包,并把文件夹改名为libfreenect2

4.cd /home/用户名/工作空间/src/libfreenect2

5.安装build tools(已经有了就跳过)sudo apt-get install build-essential cmake pkg-config

6.安装libusb(同理) sudo apt-get install libusb-1.0-0-dev

7.安装turboJPEG        sudo apt-get install libturbojpeg0-dev

8.安装OpenGL          sudo apt-get install libglfw3-dev

至此,必要的依赖安装完毕,可以继续安装步骤

9.cd ..

保证自己在libfreenect2的根目录底下

10. mkdir build && cd build

cmake .. -DCMAKE_INSTALL_PREFIX=/home/用户名/freenect2      (你打算把freenect2文件夹放的地址)

make

sudo make install

安装完毕,测试:

cd ~/工作空间/src/libfreenect2/build/bin

./Protonect

看看有没有出现四张图片

三、运行./Protonect报错

failed to compile vertex shader!
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES

failed to compile fragment shader!
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES

failed to link shader program!
error: linking with uncompiled/unspecialized shadererror: linking with uncompiled/unspecialized shader
failed to compile vertex shader!
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES

failed to compile fragment shader!
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES

failed to link shader program!
error: linking with uncompiled/unspecialized shadererror: linking with uncompiled/unspecialized shader

解决办法:由于这个软件最近的更新是在好多年前了,所以当时支持的OpenGl版本没有这么新。但是其实3.3版本运行是没有问题的,因此,在运行./Protonect之前,先终端运行

export MESA_GL_VERSION_OVERRIDE=3.3

即可。

为了避免每次启动都需要运行一遍代码,进行如下操作:

1. 文件目录打开主目录

2. ctrl+H显示隐藏文件

3. 双击.bashrc

4.文件最后添加export MESA_GL_VERSION_OVERRIDE=3.3

 

四、不建议安装依赖Opencl

官方安装教程里写:install Opencl(optional)

但是如果不install CUDA(optional)的话基本会报错

想要安装CUDA必须要安装NVIDIA显卡驱动。但是在Ubuntu系统中安装显卡驱动非常容易把系统搞崩掉,然后就开不了机,非常麻烦。建议不需要用ubuntu跑pytorch等机器学习算法的同学就别折腾了。真的想安装的话请仔细按照官方教程对应版本安装正确,然后做好系统崩溃的准备

五、安装iai_kinect2

官方安装教程https://github.com/code-iai/iai_kinect2

1. 解压iai_kinect2文件到/home/用户名/工作空间/src,并更改名称为iai_kinect2

2. cd ~/工作空间/src/iai_kinect2

rosdep install -r --from-paths .

报错说Cannot locate rosdep definition for [kinect2_bridge]...是没关系的,只要保证基础的rosdep update能正常运行就可以

cd ~/工作空间

catkin_make -Dfreenect2_DIR=path_to_freenect2/home/用户名/freenect2 -DCMAKE_BUILD_TYPE=''Release''

path_to_freenect2后面填你安装libfreenect2的时候cmake的地址

3. 由于本文没有安装opencl所以需要修改launch文件,不然会报错,因为默认会使用opencl。

如果报错如下,则都是这个问题

[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Error] [DepthPacketStreamParser] Packet buffer is NULL
[Info] [Freenect2DeviceImpl] canceling depth transfers...
[Info] [Freenect2DeviceImpl] stopped
[Info] [OpenCLDepthPacketProcessorImpl] building OpenCL program...
[Error] [OpenCLDepthPacketProcessorImpl] program = cl::Program(context, source, &err): -34
[ WARN] [1669112719.835973091]: [Kinect2Bridge::initCalibration] using sensor defaults for color intrinsic parameters.
[ WARN] [1669112719.836011857]: [Kinect2Bridge::initCalibration] using sensor defaults for ir intrinsic parameters.
[ WARN] [1669112719.836024210]: [Kinect2Bridge::initCalibration] using defaults for rotation and translation.
[ WARN] [1669112719.836036329]: [Kinect2Bridge::initCalibration] using defaults for depth shift.
[ INFO] [1669112719.927726400]: [DepthRegistration::New] Using OpenCL registration method!
[ INFO] [1669112719.927769985]: [DepthRegistration::New] Using OpenCL registration method!
[ERROR] [1669112719.943127018]: [DepthRegistrationOpenCL::init] [depth_registration_opencl.cpp](180) cl::Platform::get(&platforms) failed: -1001
[Info] [Freenect2DeviceImpl] closing...
[Info] [Freenect2DeviceImpl] releasing usb interfaces...
[Info] [Freenect2DeviceImpl] deallocating usb transfer pools...
[Info] [Freenect2DeviceImpl] closing usb device...
[Info] [Freenect2DeviceImpl] closed
[ERROR] [1669112719.943487276]: [Kinect2Bridge::start] Initialization failed!
[Info] [Freenect2DeviceImpl] closing...
[Info] [Freenect2DeviceImpl] already closed, doing nothing
[Error] [OpenCLAllocator] queue.enqueueUnmapMemObject(b->buffer, b->data, NULL, &event): -36
[Error] [OpenCLAllocator] queue.enqueueUnmapMemObject(b->buffer, b->data, NULL, &event): -36
[Error] [OpenCLAllocator] queue.enqueueUnmapMemObject(b->buffer, b->data, NULL, &event): -36
[FATAL] [1669112720.045885313]: Failed to load nodelet '/kinect2_bridge` of type `kinect2_bridge/kinect2_bridge_nodelet` to manager `kinect2'
[kinect2_bridge-2] process has died [pid 14981, exit code 255, cmd /opt/ros/melodic/lib/nodelet/nodelet load kinect2_bridge/kinect2_bridge_nodelet kinect2 __name:=kinect2_bridge __log:=/home/wyf/.ros/log/953c25e6-6a41-11ed-876a-0c9d925c2b6a/kinect2_bridge-2.log].
log file: /home/wyf/.ros/log/953c25e6-6a41-11ed-876a-0c9d925c2b6a/kinect2_bridge-2*.log

 4. 首先确认./Protonect gl

和./Protonect cpu命令全都能正常显示四张图片

 

 如果有哪个不能显示,请检查libfreenect2的安装问题

5.  打开~/工作空间/src/iai_kinect2/kinect2_bridge/launch/kinect2_bridge.launch文件,把depth_method那一行改为''opengl'';把reg_method那一行改为''cpu''

 6. 运行roscore

开新终端,运行roslaunch kinect2_bridge kinect2_bridge.launch

正常来说应该显示waitting for client to connect并且没有报错

新终端运行rosrun kinect2_viewer kinect2_viewer

 因为没有标定,所以点云是错位的。正常显示点云即说明安装成功

 

这篇关于Ubuntu 18.04 安装iai_kinect2遇到的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650504

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)