Flying High: UAVs, FPGAs and Ubuntu Come Together

Xilinx Zybo Running Xillinux

This summer I have the privilege of working with a research team of students and professors at my university. As an electrical engineering student this has me over the moon since it will be hands on experience with industry level hardware and software design.

The goal of our project is hilariously simply to describe. We want to track insects using a UAV. Sweep a field, figure out where they are and then produce a report for the users. This does sound like relatively simple task but as with almost every design problem the devil is in the details.

One of the grad students designed a logo for our research team.
Currently the design team is comprised of two undergraduate students (one of them being me), two masters students and two professors. One professor's specialty is electromagnetics and hardware while the other leans towards signal processing and communication. I am working one the signal processing and software aspects of the project.

At this time we are at a cross roads between which FPGA to use. The choice is split between a Xilinx ZedBoard and an Altera DE10. Both need to be able to connect to an external radio comms card. The chip we are looking to use is the AD9361 from Analog Devices. The chip is a high performance radio transceiver that we are going to use to transmit at roughly 5 (GHz) which will then be mixed up to 10 (GHz). There is the ARRadio board which we would use for the Altera FPGA and there is the FMCOMMS2 which we would use with a Xilinx. Both of these boards use the AD9361.
RoBeast Update: Check out here! Finally getting wired together.

Since the external radio card uses SDR (software defined radio) running on a SoC (System on Chip) we have the ability to do most of our signal processing at a high level. Since it won't be feasible to run Matlab on the SoC we must find another way to process the data that we receive. This is where Python enters the system.

I now have a Xilinx board running Xillinux (Ubuntu 12.04 for the SoC) with the same ARM processor as the board might be using in the final design. This should allow me to do code performance testing to ensure that the system will be able to process data within the coherence time. We assume a top speed of our UAV to be around 10-15 (m/s). With that speed in mind and the custom antenna beam angles we have about 44 (ms) to process everything before collecting more data.

10 (GHz) transmit antenna without the amplifiers.
Our transmit and receiving sadly isn't as simple as transmitting at 10 (GHz) and receiving back at 20 (GHz). To improve detection of the tags we will be using we are trying to find a modulation scheme and PN (pseudo-random number) sequence that will facilitate easy processing and processing gain.

A nice feature about the SDR and the radio cards is that we simply pass the board I and Q signals which means we can use Frank Heimiller codes, or as I like to call them, Frank codes. We will be able to select our I and Q data that we transmit to be such that the correlation between our receive and the sequence will be approximately zero for all values except for when the receive signal is the PN sequence. This translates into amazing tag detection with very low chances for false-positives or errors.

A couple of the tags. Hard to get a good photo since they are so small. Essentially just a fancy piece of wire with a diode soldered across a loop.

I have been beating my head against a wall trying to get the correct versions of things installed on the SoC but progress is being made and hopefully Python can save the day!


Popular posts from this blog

Hold My Beer: An Engineering Story

Zesty Zapus: Tips and Tricks for Ubuntu 17.04

Data Processing: Matlab, Python or Octave?