Advertisement

ubuntu16.04上的安装Kinect Azure

阅读量:

今天相机到货,然后先在Windows上试了试功能,测了测深度估计的误差(emm感觉误差有时候能够稳定在10mm以内,有时候就有些大了,暂时没有搞懂,希望接下来做项目没啥太大问题吧)。接下来,就是在ubuntu上安装了,由于项目一直用的是16.04版本的,而官方支持的是18.04,不过没事,就是一些依赖的问题,接下来就开始吧!

1.下载官方的SDK包

可以直接使用git下载:

复制代码
    git clone -b v1.2.0 https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git

或者到上面的网址https://github.com/microsoft/Azure-Kinect-Sensor-SDK中,下载zip压缩包,具体看哪种下载快用哪种就行。

2.libdepthengine.so.2.0下载

下载文件

下载网址如下:https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/
在该网页中找到libk4a1.2/ ,打开后下载xxx.deb文件。

解压,并在加压的文件夹中找到libdepthengine.so.2.0
加压后会得到一个data.tar.gz的压缩包,继续解压,并在该文件夹的/usr/lib/x86_64-linux-gnu目录下找到libdepthengine.so.2.0文件

将该文件复制到系统的/usr/lib/x86_64-linux-gnu目录下
在第二步含有libdepthengine.so.2.0文件的文件夹下打开终端复制

复制代码
    sudo cp ./libdepthengine.so.2.0 /usr/lib/x86_64-linux-gnu/

3.依赖安装

进入Azure-Kinect-Sensor-SDK文件,执行如下命令,安装依赖

复制代码
    sudo ./script/bootstrap-ubuntu.sh

如果遇到有些依赖安装不成功的情况,打开script/bootstrap-ubuntu.sh文件,尝试单个依赖进行安装,安装过程中,可能存在依赖关系出问题的情况,按照如下命令修复后继续安装完所有的依赖即可。

复制代码
    sudo apt-get install -f

4.升级cmake版本

该SDK要求的cmake版本在3.9以上,可以查看下自己的cmake版本(cmake --version),如果不满足则进行升级。

  1. 下载cmake
复制代码
    wget https://cmake.org/files/v3.14/cmake-3.14.0.tar.gz

或者仍然是点击上面的网址,通过浏览器下载

  1. 解压后进行编译安装
    进入解压后的文件夹
复制代码
    ./bootstrap

    make -j8
    sudo make install

最后,查看当前的版本

复制代码
    cmake --version

5.编译安装Azure-Kinect-Sensor-SDK

5.1 进入该文件夹

复制代码
    mkdir build
    cd build
    cmake .. -GNinja

ps:cmake … -GNinja是生成ninja的配置,ninja是一个小型的编译系统,并行编译,速度比较快

问题1 卡在正在克隆…

这个过程会存在从网上下载相关的源码到/extern/xxx/src文件中,如果网速不好,可能会存在一直编译不上即一直是正在克隆到/extern/xxx/src 的情况。可以直接进入第一步的github网址,打开extern目录,以第一个库所需要的源码为例。
在这里插入图片描述
点进去后,可以看到src指向别的github链接(其实也可以直接在Azure-Kinect-Sensor-SDK文件夹下,按Ctrl+H,显示隐藏文件,查看.gitmodules和.git/config文件,里面给出了下载这些包的网址,这一步的程序就是根据这些网址下载包到对应的目录下。然后可以直接手动git clone 这些包到对应的目录下,这里注意,libyuv这个包给的是外网的链接,所以一般人们会在这里卡住,这里可以将链接改为https://github.com/lemenkov/libyuv)。点击后到相应的网址下载该文件,下载后将其命名为src文件夹,然后放到对应的目录下。比如azure_c_shared的文件就放入该文件夹下。其他的库的源码也可以用这种方式下载。

问题2 两种下载方式及遇到的问题

git clone 方式

这里注意,直接使用浏览器下载的网速一般比git clone要快很多。但是直接下载zip文件是没办法下载.git就是该包的版本信息的,所以会导致下一个问题,所以这里建议还是cd 到/extern/azure_c_shared/文件夹下,利用git clone 下载,虽然会很慢。。。
以第一个包的例子为例,如下:

复制代码
    cd /extern/azure_c_shared/
    git clone https://github.com/Azure/azure-c-shared-utility.git src

其他的包按照上述方式安装。
在这里插入图片描述
下载完成所有的包以后,可以继续执行:

复制代码
    cmake .. -GNinja

遇到的新问题
然后遇到新的问题,最后解决了忘了复制错误信息,大意就是imgui这个包,下载的版本中没有找到对应的版本,所以这里又重新打开https://github.com/ocornut/imgui.git网址,在master分支下,选择低版本,这个我主要是看时间,在release中选了个v1.65的下载,之后该问题解决了。

直接下载zip文件

如果觉得git clone 的速度太慢,这里可以直接下载相关的zip文件,然后解压后,改成src的名字,放到相应的文件夹下
如果是手动下载相关的文件以后,继续进行

复制代码
    cmake .. -GNinja

遇到的新问题1
可能会有报错如下:

复制代码
    -- Updating git modules...
    fatal: 目标路径 'extern/googletest/src' 已经存在,并且不是一个空目录。
    fatal: 无法克隆 'https://github.com/google/googletest.git' 到子模组路径 'extern/googletest/src'
    CMake Error at extern/CMakeLists.txt:22 (message):
    git submodule update failed:

这个是因为,我们手动的下载了相关的src文件,所以相关的程序没法继续在子目录下创建src文件(这里主要是因为程序自动下载是要找到对应的git版本,而手动下载是没有版本信息的)。可以尝试如下解决方案:

仍然在extern文件夹下,找到CMakeLists.txt文件,打开后注释掉如下内容:

复制代码
    # execute_process(
           #     COMMAND
            #        ${GIT_EXECUTABLE} submodule update --init --recursive
             #   WORKING_DIRECTORY
               #     ${CMAKE_CURRENT_SOURCE_DIR}
              #  RESULT_VARIABLE
                #    GIT_SUBMODULE_UPDATE_RESULT
               # OUTPUT_VARIABLE
                #    GIT_SUBMODULE_UPDATE_OUTPUT
            #)
    
           # if (NOT (${GIT_SUBMODULE_UPDATE_RESULT} EQUAL 0))
            #    message(FATAL_ERROR "git submodule update failed:
                                 #   ${GIT_SUBMODULE_UDPATE_OUTPUT}")
            #endif()

手动或者自动安装以后
然后继续进行

复制代码
    cmake .. -GNinja

完成后,执行

复制代码
    ninja

遇到的新问题2
此处多次编译,都没有通过,总是报错

复制代码
    [462/483] Building CXX object tools/k4...4aviewer.dir/k4apointcloudwindow.cpp.o
    FAILED: /usr/bin/c++   -I../tools/k4aviewer -Isrc/sdk/include -I../include -Isrc/record/sdk/include -I../extern/imgui/src -I../extern/imgui/src/examples -I../extern/imgui/src/examples/libs/gl3w -I../extern/imgui/src/examples/libs/glfw/include -I../extern/libjpeg-turbo/src -I../extern/libusb/src/libusb -I../extern/libyuv/src -I../extern/libyuv/src/include -I../extern/glfw/src/include -O2 -g -DNDEBUG -fPIE   -Wall -Wextra -Wno-missing-field-initializers -Werror -idirafter/usr/include/soundio -std=gnu++11 -MD -MT tools/k4aviewer/CMakeFiles/k4aviewer.dir/k4apointcloudwindow.cpp.o -MF tools/k4aviewer/CMakeFiles/k4aviewer.dir/k4apointcloudwindow.cpp.o.d -o tools/k4aviewer/CMakeFiles/k4aviewer.dir/k4apointcloudwindow.cpp.o -c ../tools/k4aviewer/k4apointcloudwindow.cpp
    ../tools/k4aviewer/k4apointcloudwindow.cpp: In member function ‘virtual void k4aviewer::K4APointCloudWindow::Show(k4aviewer::K4AWindowPlacementInfo)’:
    ../tools/k4aviewer/k4apointcloudwindow.cpp:95:5: error: ‘VerticalSeparator’ is not a member of ‘ImGui’
     ImGui::VerticalSeparator();
     ^
    [462/483] Building CXX object tools/k4...akeFiles/k4aviewer.dir/k4aviewer.cpp.o

可以看到可能也是IMGui这个库出问题了,但是我觉得这个可能还是因为版本太高了,这里应该有几种解决方法
法1: 官方 实际上是更新了这个地方,见https://github.com/microsoft/Azure-Kinect-Sensor-SDK/pull/645/files/0211644656f835bfd65e5ecf88ce2a52c6053fb3,更改如下图:在这里插入图片描述
可以看到95行原有的代码记性了更改。

法2: ,下载低版本imgui,比如1.65版本的imgui尝试
法3: 不建议该方法 ,简单粗暴, 直接打开k4apointcloudwindow.cpp注释掉ImGui::VerticalSeparator(),我也不知道自己哪里的勇气,但是问题解决了,后续使用也没看到问题

6.安装相关程序

复制代码
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install gcc-4.9
    sudo apt-get upgrade libstdc++6

注意,在安装gcc-4.9仍然可能报错,尝试修复依赖关系后继续安装即可。

7.启动k4aviewer

连接相机,仍然是在build文件夹下,启动查看器

复制代码
    sudo ./bin/k4aviewer

结果如下,我的结果比较渣,大概看看效果就行,具体功能直接看官网的解释吧,这里就不赘述了。
在这里插入图片描述
emm…疫情期间,老师看我在家没事干,给我买了个相机让我做项目,所以请自动忽略凌乱的桌子以及堆的被子…

8.后续问题

在左侧的设置栏进行尝试相关设置的时候,其他的设置都ok,结果在选3D点云的时候直接退出报错如下:

复制代码
    terminate called after throwing an instance of 'std::logic_error'
      what():  Shader program linking error: 
    error: Too many vertex shader image uniforms (1 > 0)
    
    已放弃 (核心已转储)

具体原因目前还不清楚,但是考虑是不是因为第5步将 ImGui::VerticalSeparator();注释掉了注释掉的问题,明天再解决吧,不一定要早起但是一定要早睡!!!
更新!!!
昨天查了这个问题,发现有人和我遇到了同样的问题,见https://github.com/microsoft/Azure-Kinect-Sensor-SDK/issues/973,然后官方也没搞懂,最后就直接不解释了…确实是和OPenGL有关,但是是显卡驱动的问题,一开始,执行下列命令:

复制代码
    glxinfo | grep OpenGL

如果没有安装glxinfo,按照提示安装即可

显示的信息如下:

复制代码
    OpenGL vendor string: Intel Open Source Technology Center
    OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
    OpenGL core profile version string: 4.5 (Core Profile) Mesa 19.3.1
    OpenGL core profile shading language version string: 4.50
    OpenGL core profile context flags: (none)
    OpenGL core profile profile mask: core profile
    OpenGL core profile extensions:
    OpenGL version string: 3.0 Mesa 19.3.1
    OpenGL shading language version string: 1.30
    OpenGL context flags: (none)
    OpenGL extensions:
    OpenGL ES profile version string: OpenGL ES 3.1 Mesa 19.3.1
    OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
    OpenGL ES profile extensions:

可以看到,4.5的版本应该是满足官方要求的4.4以上了,但是这里显示用的是集成显卡。。。应该使用的NVIDIA的独显,然后就按照这个博主介绍的<>步骤一,安装显卡驱动,这里不用担心我的机子是6年前垃圾的gt740m,按照作者说的会出现自己对应的型号的驱动,安装即可。
安装成功以后,继续执行

复制代码
    glxinfo | grep OpenGL

此时显示的信息如下:

复制代码
    OpenGL vendor string: NVIDIA Corporation
    OpenGL renderer string: GeForce GT 740M/PCIe/SSE2
    OpenGL core profile version string: 4.5.0 NVIDIA 384.130
    OpenGL core profile shading language version string: 4.50 NVIDIA
    OpenGL core profile context flags: (none)
    OpenGL core profile profile mask: core profile
    OpenGL core profile extensions:
    OpenGL version string: 4.5.0 NVIDIA 384.130
    OpenGL shading language version string: 4.50 NVIDIA
    OpenGL context flags: (none)
    OpenGL profile mask: (none)
    OpenGL extensions:
    OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 384.130
    OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
    OpenGL ES profile extensions:

然后尝试3D的点云显示,正常显示,完美!!!
参考资料:
<>
<>
<>

全部评论 (0)

还没有任何评论哟~