I'd like to create a platform to be able to test various visual based VTOL UAV control techniques for indoor environments. I've got some theoretical background in this field already and would like to move on to building a real flying platform. Yet I'd like to ask you guys to take a critical look at what I'm planning to do in terms of interface compatibility and feasibility in general.
I was planing to buy an ArduCopter Kit, a BeagleBoard-xM, a simple USB web camera to work with the BeagleBoard and an Optical Flow sensor board (either CYE8, ArPrMi or ADNS2620). I'm not planning to use a GPS or magnetometer in the first place, but if possible I wouldn't like to deny the possibility of doing so in the future. I need telemetry, so XBee is essential, as I'd like to use the ArduCopter's Ground Station.
All of the above OF sensors have an I2C interface (so they could go with the APM instead of magnetometer I suppose, but if there is another way I'd like to keep the magneto), those from Embedded Eye have SPI as well. There is an SPI interface on the BeagleBoard along with USB, UART and Ethernet. I'm not sure however how to interchange data between the BeagleBoard and the APM - would it be possible? I'd like to use the APM as the autopilot.
Any suggestions welcome.
the APM has 4 UART, 1 is used for GPS, 1 for USB and 1 for telemetry, the 4th is not used now
you can interfece more than one sensor to I2C (up to 256 i think) so you will allways be able to use magneto
you can interchange data between beagle board and apm through an UART (the 4th) or through USB
you have to modify the APM software to make it react on data comming from the beagle board
you should use a bigger frame than default arducopter frame, you can't fit the beagle board in this one
Tom, I've also been playing with the ADNS2620 recently and talk about in this recent post how to interface with the APM using the telemetry port (although this would leave you with one less Serial port than you need for everything). You can't use the I2C with the ADNS2620 because it's not a pure I2C - it doesn't include the slave address so the slave address listens to all commands and will likely not play well with the magnetometer.
So if it were me....as Sebastian says, I'd use a serial port to send messages between the APM and Beagle board. And I'd use an optical flow sensor with an SPI interface. Actually I'm planning to try out the big brother of the ADNS2620 soon, the ADNS3080 which also has an SPI interface.
Nice thing you've done there Randy. Also thanks for the tips regarding mouse sensors. I was planing to try doing some image processing with the web-camera on BB-xM alone for the begining, so I'll wait and see what you've achieved. By the time I got something working, will probably be doing aerial stunts with ADNS3080 already :).
Cheers and good luck.
That's a lot of useful information pontiuspilatepdx, thank you. I have already ordered BB-xM unfortunately, don't know how could I have missed pandaboard. Hope BB-xM can do it's work well enough.
I haven't got any experience with ROS yet, but was hoping to get it running on BB. I know there is an Ubuntu's arm port for BB and Panda - does it mean one can seamlessly use ROS on both, or must there be a ported ROS version as well? This issue actually confuses me a little.
I'm considering two uses of APM + BB at the moment, both assuming using BB for indoor navigation and APM for attitude stabilization. Either, as mentioned in the original post, I'd use CMOS camera images for feature detection or I'd try to reproduce this one, which assumes having ROS installed. Naturally, both can turn out to be to hard for me...
The Beagleboard project has been around for several years and have alot of pre compiled installers for XBMC, ROS, and other popular projects. It will make your life easier because of its community. The Pandaboard is brand spanking new and is gaining community members. Ubuntu (officially supported linux distro for ROS) is supported on both the BB and PB but a prebuilt binary is only available on BB and is based on Ubuntu 9.10 (http://people.mech.kuleuven.be/~kbuys/embsensor.html).
Personally when my PB arrives I am going to load 10.10 and compile ROS by hand. More than likely I will post a tarball of the entire build when complete.
It should be noted that OpenCV was originally programmed for x86 and still requires lots of optimizations for the ARM CPU. That is the only nice thing about using the Atom SoC is that it is x86 based, on the other side an optimized OpenCV library for a Cortex-A9 SoC will outperform an Atom at price, power, weight and size.
As for 3D mapping (SLAM) the Kinect is the hottest thing in robotic right now but it might be better to get the dev kit from the manufacture (http://www.primesense.com/dev_com.asp). That can easily be used on a BB via USB for SLAM but for image detection a HiRes Camera would be best for OpenCV. BB cameras can be found here (https://www.leopardimaging.com/Beagle_Board_xM_Camera.html).
Please post tarball when u do so, my Pandaboard arrived this week, got Ubuntu on it, very cool platform for $179!
I agree with the comments about letting the APM do low level flight and stablisation and use the Pandaboard to do the higher level stuff.
Hi, I'm almost doing the same thing :)
I'm planning to purchaise a new quadcopter (Ardupilot) and apply computer vision stuff on it , but the ardupilot has just few MHZ of processing ( 16MHz Atmega) so i have decided to let it for flight control and port all my vision stuff to some evaluation board (Beagle Board) and make BB control the navigation of the UAV so for example if quadcopter is tracking a green ball for example,so capturing frames and compute the appropriate direction from BB and then feed the conclusion ( the direction) to Ardupilot to navigate the Quadrotor.
But i have a problem , what is the best interfacing way that i may use to connect the two boards together ? is it USART ? or USB ? or something else ? and if i know the best way of interfacing, what do i need to edit in ardupilot code to make it accept commands from BB ?
is there any progress in this point ?