here is how to use OpenNI2/Xtion Pro live on ODROID-U3. environment is here.
os : xubuntu-13.10-desktop-armhf_odroidu_20140107.img.xz
OpenNI2(build from https://github.com/OpenNI/OpenNI2)
# install library
apt-get update
apt-get upgrade
apt-get install g++ python libusb-1.0-0-dev libudev-dev openjdk-6-jdk freeglut3-dev doxygen graphviz
# build OpenNI2
mkdir work
cd work
git clone https://github.com/OpenNI/OpenNI2
cd OpenNI2
# default OpenNI repository build will fail, so I change following. here is diff.
diff --git a/Packaging/ReleaseVersion.py b/Packaging/ReleaseVersion.py
index e2fdf5f..710f590 100755
--- a/Packaging/ReleaseVersion.py
+++ b/Packaging/ReleaseVersion.py
@@ -163,11 +163,12 @@ elif platform.system() == 'Windows':
elif platform.system() == 'Linux' or platform.system() == 'Darwin':
devNull = open('/dev/null', 'w')
- subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
+ # subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
+ subprocess.check_call(['make', '-C', '../', '-j1', 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
devNull.close()
buildLog = open(origDir + '/build.release.' + plat + '.log', 'w')
- subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'release'], stdout=buildLog, stderr=buildLog)
+ subprocess.check_call(['make', '-C', '../', '-j1', 'PLATFORM=' + plat, 'release'], stdout=buildLog, stderr=buildLog)
buildLog.close()
# everything OK, can remove build log
diff --git a/ThirdParty/PSCommon/BuildSystem/Platform.Arm b/ThirdParty/PSCommon/BuildSystem/Platform.Arm
index c4a112d..cd12569 100644
--- a/ThirdParty/PSCommon/BuildSystem/Platform.Arm
+++ b/ThirdParty/PSCommon/BuildSystem/Platform.Arm
@@ -1,7 +1,8 @@
ifeq "$(CFG)" "Release"
# Hardware specifying flags
- CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+ # CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+ CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -Wno-unused-local-typedefs #-mcpu=cortex-a8
# Optimization level, minus currently buggy optimizing methods (which break bit-exact)
CFLAGS += -O3 -fno-tree-pre -fno-strict-aliasing
# build OpenNI
cd OpenNI2/Packaging
python ReleaseVersion.py Arm
# maybe 1 hour needed, check build status "tail -f build.release.Arm.log"
# install OpenNI
cd Final
tar -jxvf OpenNI-Linux-Arm-2.2.tar.bz2
cd OpenNI-Linux-Arm-2.2
sh install.sh
source OpenNIDevEnvironment
# run sample application.
cd Samples/Bin
./SimpleRead
# use dual xtion depth stream sample
cd Samples/MultipleStreamRead/
vi main.cpp
#include <OpenNI.h>
#include <iostream>
#include <vector>
#include "OniSampleUtilities.h"
using namespace openni;
using namespace std;
class DepthSensor {
private:
openni::Device device;
openni::VideoStream depthStream;
vector<openni::VideoStream*> streams;
public:
DepthSensor() {}
void open( const char* uri ) {
Status ret = device.open( uri );
depthStream.create( device, SENSOR_DEPTH );
depthStream.start();
streams.push_back( &depthStream );
}
void run() {
int changedIndex;
openni::OpenNI::waitForAnyStream( &streams[0], streams.size(), &changedIndex );
if ( changedIndex == 0 ) {
openni::VideoFrameRef depthFrame;
depthStream.readFrame( &depthFrame );
if ( depthFrame.isValid() ) {
}
}
}
};
int main() {
try {
openni::OpenNI::initialize();
openni::Array<openni::DeviceInfo> deviceInfoList;
openni::OpenNI::enumerateDevices( &deviceInfoList );
DepthSensor* sensor = new DepthSensor[deviceInfoList.getSize()];
for ( int i = 0; i < deviceInfoList.getSize(); ++i )
sensor[i].open( deviceInfoList[i].getUri() );
while ( 1 ) {
for ( int i = 0; i < deviceInfoList.getSize(); ++i ) {
sensor[i].run();
}
}
delete[] sensor;
} catch ( exception& ) {
cout << openni::OpenNI::getExtendedError() << endl;
}
return 0;
}
make
cd Bin/Arm-Release
./MultipleStreamRead
# like this.