如何进行OpenNI-Linux-Arm64-2.3.0.66安装与调试

技术如何进行OpenNI-Linux-Arm64-2.3.0.66安装与调试如何进行OpenNI-Linux-Arm64-2.3.0.66安装与调试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细

如何进行OpenNI-Linux-Arm64-2.3.0.66安装与调试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

最近在研究某摄像头,通过通用串行总线插入到Arm64的板子上进行安装调试,这里尝试着把过程记录下来。

1 下载SDK

从官网上下载相应系统和版本的SDK,我这里是Linux-ARM64版本的,下载的是OpenNI-Linux-Arm64-2.3.0.66。或者wget链接地址

proxychains 4 gwet https://abzg-OSS。OSS-中国深圳。阿里云克斯。com/files/OpenNI-Linux-Arm 64-2。3 .0 .66 .活力

[proxy chains]配置文件找到:/etc/proxychains。conf

[proxychains]预加载/usr/local/lib/libproxychains 4。因此

[proychains]DLline : proychains-ng 4.14

-2021-02-0820:57:26-https://abzg-OSS。OSS-中国深圳。阿里云克斯。com/files/OpenNI-Linux-Arm64-2。3 .0 .66 .活力

正在解析主机abzg-OSS。OSS-中国深圳。阿里云克斯。com(abzg-OSS。OSS-中国深圳。阿里云克斯。com).224.0.0.1

正在连接abzg-OSS。OSS-中国深圳。阿里云克斯。com(abzg-OSS。OSS-中国深圳。阿里云克斯。com)| 224。0 .0 .1 | :443.[proxychains]

严格链.172.18.6.135:8001.abzg-OSS。OSS-中国深圳。阿里云克斯。com 36360。36666666666.好

已连接。

已发出超文本传送协议请求,正在等待回应.200OK

长度:3758034(3.6M)[应用程序/zip]

正在保存至:英寸OpenNi-Linux-Arm 64-2。3 .0 .66 .zip "

OpenNI-Linux-arm 64-2。3 .0 .66 .拉链100%

[===============================================]3.58m 7.57 MB/sin 0.5s

2021-02-0820:57:27(7.57兆字节/秒)-已保存“OpenNI-Linux-Arm64-2。3 .0 .66 .zip"[3758034/3758034])解压,目录结构如下

-rw-rw-r-1工作9753 9月2916336054变更。文本文件(textfile)

-rw-rw-r-1工作工作许可

通知

-rw-rw-r-1工作时间5615年9月29日16:54日

1月1215336052日

-rw-rw-r-1工作工作1863年9月2916:54日重新提交。文本文件(textfile)

drwxrwxr-x12workwork4096J

an 12 15:52 Samples
drwxrwxr-x  3 work work  4096 Jan 12 15:52 Tools
drwxrwxr-x  8 work work  4096 Jan 12 15:52 include
-rw-rw-r--  1 work work  2138 Mar 10  2020 install.sh
-rw-rw-r--  1 work work  1221 Sep 29 16:54 orbbec-usb.rules

阅读README文件,其中

0 OpenNI-Linux-Arm64-2.3.0.66 > cat README
OpenNI
------
Website: http://structure.io/openni
Building Prerequisites
======================
...
Linux
-----
- GCC 4.x
    From: http://gcc.gnu.org/releases.html
    Or via apt:
    sudo apt-get install g++
- Python 2.6+/3.x
    From: http://www.python.org/download/
    Or via apt:
    sudo apt-get install python
- LibUSB 1.0.x
    From: http://sourceforge.net/projects/libusb/files/libusb-1.0/
    Or via apt:
    sudo apt-get install libusb-1.0-0-dev
- LibUDEV
    sudo apt-get install libudev-dev
- JDK 6.0
    From: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html
    Or via apt:
    sudo apt-get install openjdk-6-jdk
- FreeGLUT3
    From: http://freeglut.sourceforge.net/index.php#download
    Or via apt:
    sudo apt-get install freeglut3-dev
- Doxygen
    From: http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc
    Or via apt:
    sudo apt-get install doxygen
- GraphViz
    From: http://www.graphviz.org/Download_linux_ubuntu.php
    Or via apt:
    sudo apt-get install graphviz
...
Building
========
Building on Windows:
  Open the solution OpenNI.sln
Building on Linux / OS X:
  Run:
  $ make
Cross-Compiling for ARM on Linux:
  The following environment variables should be defined:
  - ARM_CXX=<path to cross-compilation g++>
  - ARM_STAGING=<path to cross-compilation staging dir>
  Then, run:
  $ PLATFORM=Arm make
Building for Android:
  - Create a workspace in eclipse
  - Import all projects under root directory
Creating OpenNI2 Package
========================
- Go into the directory 'Packaging'
- Run ReleaseVersion.py [x86|x64|Arm|Android]
- Installer will be placed in the 'Final' directory
Building in an armhf qemu-enabled docker container
==================================================
- Note: we're building from the osrf fork which has a couple of minor tweaks compared to the orbbec upstream repo (https://github.com/orbbec/OpenNI2/compare/orbbec-dev...osrf:orbbec-dev?expand=1):
  - don't force soft-float in third-party software (because we're building with hard-float)
  - disable documentation generation (because we don't need it, and also because doxygen seems to just hang in this environment).
- Check out the code (because git doesn't work inside qemu):
  $ git clone https://github.com/osrf/OpenNI2
  $ cd OpenNI2
  $ git checkout orbbec-dev
  $ cd ..
- Start docker, mounting in the git repo:
  $ docker run -ti -v `pwd`/OpenNI2:/tmp/OpenNI2 osrf/ubuntu_armhf:trusty bash
- Now inside docker, install prereqs (we're removing udev because it somehow conflicts with libudev-dev; we're leaving out doxygen and graphviz because we're not going to build docs):
  # apt-get update
  # apt-get remove -y --force-yes udev
  # apt-get install -y build-essential python libusb-1.0-0-dev libudev-dev openjdk-6-jdk freeglut3-dev
- Still inside docker, build the release package (note that, instead of running `ReleaseVersion.py` inside `Packaging`, you could just run `make HAS_JAVA=1 release` at the top level):
  # cd /tmp/OpenNI2/Packaging
  # ./ReleaseVersion.py Arm
- If all goes well, there will be a file in the docker container called something like `/tmp/OpenNI2/Packaging/Final/OpenNI-Linux-Arm-2.3.tar.bz2`.  It's also in the corresponding place in the host filesystem, so it will survive exiting the container. That file contains the compiled libraries (importantly, `OpenNI-Linux-Arm-2.3/Redist/libOpenNI2.so`).

这里指明了一些软件运行所需的依赖和安装方法,这里就不再赘述。后续的 building 等不是必须的操作。

2 配置

在解压后的目录中,执行 install.sh 文件

sudo sh install.sh

该脚本一共做了两件事,为摄像头设备增加UDEV规则,把开发环境写到 OpenNIDevEnvironment文件中。

cat OpenNIDevEnvironment
export OPENNI2_INCLUDE=/home/work/abc/OpenNI-Linux-Arm64-2.3.0.65/Include
export OPENNI2_REDIST=/home/work/abc/OpenNI-Linux-Arm64-2.3.0.65/Redist

注意第一个环境变量的Include,实际的目录名称为 include,记得改过来(要么把目录名称改成大写,要么把环境变量改成小写,我这里是选择改环境变量。)

然后再进行加载使其生效。

source OpenNIDevEnvironment

检查一下

env | grep OPENNI2_INCLUDE
OPENNI2_INCLUDE=/home/work/abc/OpenNI-Linux-Arm64-2.3.0.66/include

3 测试

在Samples目录下,我们可以看到很多样例

drwxrwxr-x  3 work work 4096 Jan 20 22:10 Bin
drwxrwxr-x  2 work work 4096 Jan 20 22:10 ClosestPointViewer
drwxrwxr-x  2 work work 4096 Jan 20 22:10 EventBasedRead
drwxrwxr-x  2 work work 4096 Jan 20 22:10 MWClosestPoint
drwxrwxr-x  2 work work 4096 Jan 20 22:10 MWClosestPointApp
drwxrwxr-x  2 work work 4096 Jan 20 22:10 MultiDepthViewer
drwxrwxr-x  3 work work 4096 Feb  8 17:28 MultipleStreamRead
drwxrwxr-x  3 work work 4096 Jan 21 20:06 SimpleRead
drwxrwxr-x  3 work work 4096 Jan 27 10:59 SimpleViewer
drwxrwxr-x  3 work work 4096 Jan 20 22:10 SimpleViewer.java

我们就以SimpleRead为例,来测试一下。进入目录,结构如下:

总用量 52
drwxrwxr-x  2 work work 4096 Jan 12 15:52 .
drwxrwxr-x 12 work work 4096 Jan 12 15:52 ..
-rw-rw-r--  1 work work 5080 Mar 10  2020 CommonCppMakefile
-rw-rw-r--  1 work work 1710 Mar 10  2020 CommonDefs.mak
-rw-rw-r--  1 work work  538 Mar 10  2020 CommonTargets.mak
-rw-rw-r--  1 work work  631 Mar 10  2020 Makefile
-rw-rw-r--  1 work work 3535 Mar 10  2020 OniSampleUtilities.h
-rw-rw-r--  1 work work  493 Mar 10  2020 Platform.Arm
-rw-rw-r--  1 work work  521 Mar 10  2020 Platform.Arm64
-rw-rw-r--  1 work work  150 Mar 10  2020 Platform.x64
-rw-rw-r--  1 work work  531 Mar 10  2020 Platform.x86
-rw-rw-r--  1 work work 3500 Mar 10  2020 main.cpp

3.1 Makefile

include CommonDefs.mak
BIN_DIR = Bin
INC_DIRS = \
	../../Include \
	../Common
SRC_FILES = *.cpp
USED_LIBS += OpenNI2
EXE_NAME = SimpleRead
CFLAGS += -Wall
ifndef OPENNI2_INCLUDE
    $(error OPENNI2_INCLUDE is not defined. Please define it or 'source' the OpenNIDevEnvironment file from the installation)
else ifndef OPENNI2_REDIST
    $(error OPENNI2_REDIST is not defined. Please define it or 'source' the OpenNIDevEnvironment file from the installation)
endif
INC_DIRS += $(OPENNI2_INCLUDE)
include CommonCppMakefile
.PHONY: copy-redist
copy-redist:
	cp -R $(OPENNI2_REDIST)/* $(OUT_DIR)
$(OUTPUT_FILE): copy-redist

把 INC_DIRS 中的     ../../Include \  改成实际的     ../../include \,而 ../Common 目录其实并不存在,也可以注释掉。

3.2 源码

main.cpp 文件

/*****************************************************************************
*                                                                            *
*  OpenNI 2.x Alpha                                                          *
*  Copyright (C) 2012 PrimeSense Ltd.                                        *
*                                                                            *
*  This file is part of OpenNI.                                              *
*                                                                            *
*  Licensed under the Apache License, Version 2.0 (the "License");           *
*  you may not use this file except in compliance with the License.          *
*  You may obtain a copy of the License at                                   *
*                                                                            *
*      http://www.apache.org/licenses/LICENSE-2.0                            *
*                                                                            *
*  Unless required by applicable law or agreed to in writing, software       *
*  distributed under the License is distributed on an "AS IS" BASIS,         *
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
*  See the License for the specific language governing permissions and       *
*  limitations under the License.                                            *
*                                                                            *
*****************************************************************************/
#include <stdio.h>
#include <OpenNI.h>
#include "OniSampleUtilities.h"
#define SAMPLE_READ_WAIT_TIMEOUT 2000 //2000ms
using namespace openni;
int main(int argc, char* argv[])
{
	Status rc = OpenNI::initialize();
	if (rc != STATUS_OK)
	{
		printf("Initialize failed\n%s\n", OpenNI::getExtendedError());
		return 1;
	}
	Device device;
    if (argc < 2)
        rc = device.open(ANY_DEVICE);
    else
        rc = device.open(argv[1]);
    if (rc != STATUS_OK)
	{
		printf("Couldn't open device\n%s\n", OpenNI::getExtendedError());
		return 2;
	}
	VideoStream depth;
	if (device.getSensorInfo(SENSOR_DEPTH) != NULL)
	{
		rc = depth.create(device, SENSOR_DEPTH);
		if (rc != STATUS_OK)
		{
			printf("Couldn't create depth stream\n%s\n", OpenNI::getExtendedError());
			return 3;
		}
	}
	rc = depth.start();
	if (rc != STATUS_OK)
	{
		printf("Couldn't start the depth stream\n%s\n", OpenNI::getExtendedError());
		return 4;
	}
	VideoFrameRef frame;
	while (!wasKeyboardHit())
	{
		int changedStreamDummy;
		VideoStream* pStream = &depth;
		rc = OpenNI::waitForAnyStream(&pStream, 1, &changedStreamDummy, SAMPLE_READ_WAIT_TIMEOUT);
		if (rc != STATUS_OK)
		{
			printf("Wait failed! (timeout is %d ms)\n%s\n", SAMPLE_READ_WAIT_TIMEOUT, OpenNI::getExtendedError());
			continue;
		}
		rc = depth.readFrame(&frame);
		if (rc != STATUS_OK)
		{
			printf("Read failed!\n%s\n", OpenNI::getExtendedError());
			continue;
		}
		if (frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_1_MM && frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_100_UM)
		{
			printf("Unexpected frame format\n");
			continue;
		}
		DepthPixel* pDepth = (DepthPixel*)frame.getData();
		int middleIndex = (frame.getHeight()+1)*frame.getWidth()/2;
		printf("[%08llu] %8d\n", (long long)frame.getTimestamp(), pDepth[middleIndex]);
	}
	depth.stop();
	depth.destroy();
	device.close();
	OpenNI::shutdown();
	return 0;
}

其实是将镜头中心的点所获取到的深度信息不断地进行输出。

3.3 编译 

make

输出

mkdir -p Bin/Intermediate/Arm64-Release/SimpleRead
g++ -MD -MP -MT "./Bin/Intermediate/Arm64-Release/SimpleRead/main.d Bin/Intermediate/Arm64-Release/SimpleRead/main.o" -c -march=armv8-a -O3 -fno-tree-pre -fno-strict-aliasing -ftree-vectorize -ffast-math -funsafe-math-optimizations  -flax-vector-conversions -Wall -O2 -DNDEBUG -I../../include -I/home/work/abc/OpenNI-Linux-Arm64-2.3.0.66/include -DXN_NEON -fPIC -fvisibility=hidden -Werror -o Bin/Intermediate/Arm64-Release/SimpleRead/main.o main.cpp
mkdir -p Bin/Arm64-Release
cp -R /home/work/abc/OpenNI-Linux-Arm64-2.3.0.66/Redist/* Bin/Arm64-Release
g++ -o Bin/Arm64-Release/SimpleRead ./Bin/Intermediate/Arm64-Release/SimpleRead/main.o  -LBin/Arm64-Release -lOpenNI2 -Wl,-rpath ./

会发现目录下多了一个 Bin 目录

├── Bin
│   ├── Arm64-Release
│   │   ├── OpenNI.ini
│   │   ├── OpenNI2
│   │   ├── SimpleRead
│   │   ├── libDepthUtils.a
│   │   ├── libOpenNI2.so
│   │   └── libSonixCamera.a
│   └── Intermediate
│       └── Arm64-Release
├── CommonCppMakefile
├── CommonDefs.mak
├── CommonTargets.mak
├── Makefile
├── OniSampleUtilities.h
├── Platform.Arm
├── Platform.Arm64
├── Platform.x64
├── Platform.x86
└── main.cpp

3.4 执行

0 SimpleRead > ./Bin/Arm64-Release/SimpleRead
Warning: USB events thread - failed to set priority. This might cause loss of data...
[00000000]     3501
[00033688]     3501
[00067376]     3537
[00101065]     3501
[00303195]     3501
[00336884]     3537
[00370572]     3501
[00404261]     3501
.
.
.

可以看到,这里就输出了深度信息。

至此,我们就把OpenNI在Linux/Ubuntu16.04-Arm64上安装成功了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/41716.html

(0)

相关推荐

  • 怎么理解PostgreSQL DBA settings选项

    技术怎么理解PostgreSQL DBA settings选项本篇内容介绍了“怎么理解PostgreSQL DBA settings选项”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大

    攻略 2021年11月8日
  • JavaScript的并发模型和事件循环机制是什么

    技术JavaScript的并发模型和事件循环机制是什么本篇内容介绍了“JavaScript的并发模型和事件循环机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处

    攻略 2021年11月20日
  • Java坑爹的功能有哪些

    技术Java坑爹的功能有哪些本篇内容介绍了“Java坑爹的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、s

    攻略 2021年11月2日
  • 野径云俱黑,野径云俱黑江船火独明的意思

    技术野径云俱黑,野径云俱黑江船火独明的意思这句话是杜甫的诗《春夜喜雨》中的句子,是描写雨中的夜色.是写实的句子,意思是说野径云俱黑:田野里的小路也跟云一样黑沉沉的,只有江里的船上灯火是明的.喜的是雨意之浓,从视觉角度描写

    生活 2021年10月23日
  • 如何分析大数据中的网络协议

    技术如何分析大数据中的网络协议这篇文章将为大家详细讲解有关如何分析大数据中的网络协议,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、什么是协议协议,相当于正常交流必须掌

    攻略 2021年12月9日
  • go环境变量怎么配置

    技术go环境变量怎么配置这篇文章将为大家详细讲解有关go环境变量怎么配置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。export GOROOT=/usr/local/goexport

    攻略 2021年11月18日