Source Code

Unfortunately, currently I don't have time to clean up the code to make it easily compile on any system, because it requires both ARM and x86 toolchains to make a full build. Also there are a quite number of commercial interests so I need to prepare a proper license to avoid any copyright issue in the future.

Our Quadcopter Prototype

Our quadcopter prototype has gone through a few iterations of modifications due to various requirements added as the project went on. For example, previously the landing gear was short, but in order to lower the WiFi antennas for better signal quality we made a longer landing gear to increase the clearence.

Our current version is a bit heavy (2.1 kg with battery) and the hovering time is within 7 min. Due to time and budget constraints we did not further refine the design for longer flight time. We plan to build a new version with a larger body and bigger propellers for higher efficiency.

Below is the picture of our prototype quadcopter and the list of parts. We constructed two quadcopters of the same design.

(Nov 2015 Updated) DJI has released a developer edition of their UAV products. The developer kit consists of the UAV flying platform, the on-board computer (exactly the same as ours) and miscellaneous peripherals. If you are interested in building a similar platform like SkyStitch, it might be a better option.

Components Model
Flight controller Ardupilot Mega 2.6
GPS receiver uBlox LEA-6H
Motor SunnySky X3108S
Electronic speed controller HobbyWing 30A OPTO
Propeller APC 12x3.8
Airframe HobbyKing X550
On-board computer NVIDIA Jetson TK1
Camera PointGrey BlackFly 14S2C
Lens Computar H0514-MP2
WiFi adaptor Compex WLE350NX

Imaging System

The camera on each quadcopter is a PointGrey BlackFly 14S2C Ethernet camera with a resolution of 1280x1024. The lens mounted onto the camera is a low-distortion lens with a 62.3° diagonal field of view. Camara frames are streamed to the on-board computer in YUV411 format.

The camera supports a max frame rate of 60 fps. However, since it is equipped with a rolling shutter, it can only run at half of the max frame rate in external-trigger mode (refer to PointGrey's documentation). In practice, it only runs reliably at a max frame rate of 22 fps in external-trigger mode. Therefore in our experiments, we fixed the frame rate to be 20 fps.

A camera with a global shutter could support higher frame rate in external-trigger mode. Due to their high prices we did not choose them for our project.

To synchronize videos from multiple quadcopters, we connected the time pulse pin of the GPS receiver on each quadcopter to the external shutter trigger of the camera.

The time pulse pin only sends UTC-aligned pulses and does not provide any time reference. The camera only maintains a trigger counter which increases every time a new pulse is received. In order to know the precise time of each pulse, a handshake procedure has to be performed among the GPS receiver, the flight controller and the on-board computer.

On-board computer

We chose NVIDIA Jetson TK1 as our on-board computer because it has:

  • A 192-core CUDA-capable GPU for on-board image processing.
  • A high-performance quad-core CPU for multi-tasking.
  • A H.264 encoder for video encoding.
  • A serial I/O port for communication with the flight controller.
  • A mini PCI-e slot for installing a WiFi card.
The on-board computer is responsible for preprocessing the incoming camera frames, including:

  • Rectifying lens distortion and extracting features from each frame.
  • Computing an optical flow homography between two adjacent frames.
  • Encoding each frame into H.264 format.

After preprocessing is finished, the on-board computer packages the data and sends it to the ground station through three WiFi antennas.