The entire last was a battle with bugs and installation problems. The OpenNI website has updated the OpenNI files without updating the Sensor files. It created errors during installation and we were forced to read almost every blog and website on web to debug it. We left no stone unturned and finally managed to install the sensor correctly. Here is a detailed description on installation instructions and debugging. We are trying to put all the problems and there solutions at one place so that it can save others time.
STEP 1: Install required packages for Kinect
We need to install certain packages in Ubuntu. These packages, then, would facilitate the installation of OpenNI and Kinect.
COMMAND:
sudo apt-get install git-core cmake libglut3-dev pkg-config
sudo apt-get install gcc g++ build-essential libxmu-dev
sudo apt-get install libxi-dev libusb-1.0-0-dev
sudo apt-get install doxygen graphviz git
ERROR:
libglut3-dev cannot be installed
FIX:
sudo apt-get install git-core cmake freeglut3-dev pkg-config
sudo apt-get install gcc g++ build-essential libxmu-dev
sudo apt-get install libxi-dev libusb-1.0-0-dev
sudo apt-get install doxygen graphviz git
Although some blogs tell that ‘doxygen’ and ‘graphviz’ are optional, we found that they are required so don’t skip them while installation.
STEP 2: Create a new directory for Kinect
COMMAND:
mkdir ~/kinect
cd ~/kinect
STEP 3: Download OpenNI from the git repository
COMMAND:
git clone https://github.com/OpenNI/OpenNI.git
STEP 4: Install OpenNI
COMMAND:
cd OpenNI/Platform/Linux-x86/Build
make && sudo make install
ERROR1:
Cannot find the metadata file "system.windows.forms.dll"
FIX1:
sudo apt-get install mono-complete
Although, it is weird that linux throws error of windows dll file, the solution is to install ‘mono’. Mono is a platform for running and developing applications based on the ECMA/ISO Standards.
ERROR2:
No access permission for install.sh and RedistMaker.
FIX2:
The error indicates that the install.sh and RedistMaker files do not have execution permission. Therefore give them permission to execute.
cd ../CreateRedist
sudo chmod +x install.sh RedistMaker
cd ../Build
ERROR3:
CommonMakefile does not exit
FIX3:
sudo apt-get install mono-complete
ERROR 4:
“arm-angstrom-linux-gnueabi” does not exist.
The error is generated as we are on ARM Platform and the Platform.Arm file tries to access gnueabi file for Angstrom (arm-angstrom-linux-gnueabi) which does not exist in Ubuntu.
FIX 4:
cd Common
mv Platform.Arm Platform.Arm.BAK
cp Platform.x86 Platform.Arm
Unrecognized command line option "-malign-double"
Unrecognized command line option "-mmse2"
FIX 5: Edit the Platform.Arm file in ~/kinect/OpenNI/Platform/Linux-x86/Build/Common
In the latest version of OpenNI, the ARM platform has been included by the name Linux-ARM. However if we go into ~/kinect/OpenNI/Platform/Linux-ARM/Build/ and try to build it you’ll face errors thus better would be to use the old Linux-x86 platform files with some modifications.
Open ~/kinect/OpenNI/Platform/Linux-x86/Build/Common/Platform.Arm and ~/kinect/OpenNI/Platform/Linux-x86/Build/Common/Platform.x86 files to comment out these lines:
CFLAGS += -malign-double
and
ifeq ($(SSE_GENERATION), 2)
CFLAGS += -msse2
else
ifeq ($(SSE_GENERATION), 3)
CFLAGS += -msse3
else
($error "Only SSE2 and SSE3 are supported")
endif
endif
We need to do this because ‘ -malign-double’ and ‘-msse3’ flags are valid only for x86 platform and will not work for gcc on ARM. Commenting out these statements makes the code usable for ARM.
STEP 5: Download Kinect driver
COMMAND:
cd ~/kinect/
git clone https://github.com/avin2/SensorKinect
cd SensorKinect
STEP 6: Install Kinect driver
cd Platform/Linux-x86/Build
make && sudo make install
ERROR1:
CommonMakefile does not exit
FIX1:
sudo apt-get install mono-complete
Now try building again. If the method does not work do this-
gedit ~/kinect/SensorKinect/Platform/Linux-x86/Build
Replace ‘LIB_USED’ by ‘USED_LIBS’ and build again. You may find that the name is already ‘USED_LIBS’ in that case follow the below given instructions.
Latest versions of OpenNI have changed the name of the common file as CommonCppMakefile. How most of the Sensor files have not yet been updated. Therefore, execute this command to create a soft link copy of CommonCppMakefile with the name CommonMakefile.
cd /usr/include/ni
ln –s ./CommonCppMakefile ./CommonMakefile
If it does not work open /usr/include/ni and search for these file-
CommonCppMakefile
CommonDefs.mak
CommonTargets.mak
CommonCSMakefile
CommonJavaMakefile
Platform.CE4100
Platform.x86
Platform.Arm
The OpenNI probably hasn’t created these files. Therefore, you need to copy them here. Execute these commands-
cd ~/kinect/OpenNI/Platform/Linux-x86/Build
cp Common/* /usr/include/ni
STEP 7: Now use your kinect
Connect the kinect with the beagleboard and run sample programs-
cd ~/kinect/OpenNI/Platform/Linux-x86/Bin/Release
./SampleNiRead
ERROR :
InitFromXml failed: Failed to set USB Interface!
FIX :