Understanding the relationship of OpenNI and Astra SDK

Started playing with the Orbbec Astra last week, first on the RPi and now on the Mac Desktop.

Working on the RPi was fairly straightforward, I recompiled OpenNI using the orbbec-dev branch and built on top of some stuff I had done with OpenNI2 and the Xtion Pro and went fairly well.

So I moved to the Mac Desktop and downloaded the Astra SDK and it seemed to also require OpenNI2.

My questions:

1. What benefits does the Astra SDK provide over OpenNI2?

It seems I can just use OpenNI2 on the Mac as well. I saw there may be some issues with OpenNI not understanding the UVC part of the camera. I noticed the Xtion looks better in RGB on the RPi (though much slower when working along with depth)

I am assuming that the Astra SDK may provide Orbbec with a better path for skeleton tracking?

2. Can I use the Astra SDK on Linux?

Assuming there are additional benefits to the Astra SDK, Are their any plans to plans for a Linux Arm/RPi compatible version? (I actually kind of got this to work as this message has been sitting in editing mode, is kinda Frankensteinish but am getting depth on the RPi2)

Thanks for the questions. I’ll answer yours then add two more relevant ones. :smile:

1. What benefits does the Astra SDK provide over OpenNI2?
Astra SDK has improved internal architecture over OpenNI2 that minimizes data copies and latency, and is also completely extensible for future stream types through plugins. The API for Astra SDK is also cleaner and simpler than OpenNI. Astra SDK also has several interesting capabilities that OpenNI does not. For example, the SDK architecture is set up to support multiple applications simultaneously. (Our roadmap includes an Astra server/daemon process in the future so multiple applications can access data over IPC on the same machine or TCP from remote machines.)

OpenNI2 is rather a large, complex codebase for what it does, so it is hard to maintain and hard to extend. No one is actively developing OpenNI2. As far as I know, only Orbbec and Occipital are doing minimal bug fixes, for our own needs.

2. Can I use the Astra SDK on Linux?
Yes, it compiles and runs today on Linux and Android! In fact, our continuous integration server includes Ubuntu 14.04 along side OSX and VS2013/VS2015. We simply have not had enough time to create pre-compiled binary releases for the different varieties of Linux. You can compile Astra SDK from source on github for your platform, though.

Astra SDK continuous integration platforms

3. Why did Orbbec create Astra SDK?

We know many people have existing investments into OpenNI and just need new sensors. Accordingly, we designed Astra and Astra S to be OpenNI compatible due to current customer demand. However, due to the architecture of OpenNI, it would take significant time and resources to maintain and update it for sensor with capabilities beyond what PrimeSense released. This includes Astra Pro, with the 720p UVC color camera, as well as future sensors that we release with even better capabilities.

Astra SDK is the solution for this.

We recommend that any new application development use Astra SDK.

4. Why does Astra SDK require OpenNI to compile?

Now that you know the above, you can understand some of the technical decisions we made in order to ship the sensors and Astra SDK quicker. Specifically, because Astra is fully OpenNI compatible, we decided to use OpenNI as a intermediate layer to access data and expose it through Astra SDK.

This is only a temporary step. We fully plan to remove the OpenNI requirement with an updated driver layer that supports Astra and Astra Pro separate from OpenNI. This will make compiling and installing Astra SDK easier, and will also improve performance and memory usage because the data streams won’t need to go through the OpenNI layers anymore.

This is also why Astra Pro color camera isn’t exposed properly through Astra SDK. OpenNI doesn’t support UVC, and we haven’t written the custom driver layer yet that would replace OpenNI. We have limited development resources, so have to focus on the most critical features. Currently we are finishing up our skeleton tracking effort and expect to return to improving the SDK and drivers soon.

So, you can chose to use OpenNI or Astra SDK depending upon your needs. But I’ll reiterate here - all of our investments are building upon the Astra SDK and we expect that our future sensors will only be fully supported through Astra SDK. Astra SDK is the best choice for future-proofing your development work.