I am interested in employing computer vision directly embedded on a drone, mostly using OpenCV (but not limited to it). That means I need a powerful enough board for the vision computations, which may nowadays be satisfied with an embedded GPGPU approach. I looked around and found nVidia Jetson TK1 (300 GFLOPS with CUDA) and Odroid-XU3 (100 GFLOPS with OpenCL) to be probably the best boards for my needs. According to my findings, both boards should be able to do both mono and stereo vision tasks in real time. The Jetson has a nice wiki with some performance info.
My question is - what are the options for making a computer vision work on a drone in real time? The vision algorithms should be able to connect back to the autopilot and control the both video and CV camera or fly path altogether for object tracking or collision avoidance.
I can think of 2 ways of making CV work in real time:
-
Use an existing autopilot solution (standalone APM/Pixhawk board, Navio with RPi etc.) and interface (via GPIO?) from the CV board back to the autopilot board (to be able to change flight path etc.). This requires 2 boards, which means the drone is heavier and draws more power. It would also require developing the SW interface between both boards.
-
Run Navio directly on the CV board. A single board would be needed. This may be better for weight and power. It would probably include porting APM to the CV board and connecting the HW together - the Jetson has some GPIO which may probably be used (?), but I am not sure about the Odroid-XU3.
I generally consider 2 cases for the computer vision tasks: mono camera and stereo camera. I am particularly interested in the stereo vision, but making mono work is a goal too. The stereo vision will probably further complicate the setup, because a good camera synchronization is needed. I found a relatively cheap global shutter USB camera with an external trigger (can do the synchro) - it is the e-con Systems See3CAM_10CUG. This camera was reported to be working on the Jetson TK1 (link here) and Odroid-XU (not XU3, link here). However, it requires a custom kernel in both cases which may complicate everything even further. Anyways, there may be other cameras (probably of scientific grade, more expensive - Point Grey etc.) that work flawlessly with these boards, I have just not investigated them into great depth.
Could you please comment on the options (2 boards vs. 1 board, mono vs. stereo) above? Which board setup apart from cameras would you recommend? Could you help with making Navio + APM work on those CV boards? Are there any other options that may include some other hardware I did not list above? I see you work on the Odroid-C1 port so maybe you could get some support from Hardkernel for the XU3… However, the nVidia Jetson has much better performance so I actually would like to use it over Odroid.
I noticed Parrot did some 3D reconstruction from stereo demo at CES 2015 (here and here) with Jetson most likely as an extra board. Also 3D Robotics parthered with Intel and seems to be experimenting with object tracking on Edison.
Thanks for your insights in advance!