如何进行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)

相关推荐

  • 有哪些强大的静态代码分析工具

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

    攻略 2021年10月22日
  • 酵母粉是什么,干酵母粉的主要成分是什么

    技术酵母粉是什么,干酵母粉的主要成分是什么干酵母粉的主要成分是B族维生素酵母粉是什么、及叶酸、肌醇、转化酶、麦芽糖酶等。干酵母又称酵母,为麦酒酵母或葡萄汁酵母的干燥菌体。其富含的B族维生素是体内酶系统的重要组成物质,及叶

    生活 2021年10月25日
  • 三明治的英语,三明治和汉堡的区别在哪里

    技术三明治的英语,三明治和汉堡的区别在哪里老铁三明治的英语,你分得清三角形和圆形吗?哈哈哈,在壹周君浅薄的认知中,三明治都是三角形的呢,而汉堡都是圆形,他们最大的共通点都是夹夹夹,裹挟着各种配料吃吃吃。 开个玩笑啦,严谨

    生活 2021年10月25日
  • 怎么理解MySQL 5.7中的Generated Column

    技术怎么理解MySQL 5.7中的Generated Column这期内容当中小编将会给大家带来有关怎么理解MySQL 5.7中的Generated Column,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文

    攻略 2021年11月20日
  • Oracle数据的维护指令有哪些

    技术Oracle数据的维护指令有哪些这篇文章将为大家详细讲解有关Oracle数据的维护指令有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  一、SQL  1.SQL-Struct

    攻略 2021年11月20日
  • 使用chattr +i filename 防止文件误删

    技术使用chattr +i filename 防止文件误删 使用chattr +i filename 防止文件误删chattr +i 设置文件不能进行修改:即你不能删除它
    也不能给它重新命名,你不能对该

    礼包 2021年10月27日