The general plan and choices made beforehand
The most important property of an FPV video feed is latency. When the latency of the video is too high, the plane becomes uncontrollable. Half a second is a lot of latency. Latency originates from multiple places in a video system. Every time a signal is converted or passed through a device, latency occurs. So lets start with the camera.
The Raspberry pi camera board is an excellent choice for our application. The High bandwidth CSI interface pumps the video signal directly into ram. The quickest solution would be to pass that data right over a wireless link to the display. But that is not possible. The wireless links we can get our hands on don't have the needed bandwidth to do that. The solution is to encode the video data.
Encoding of video is a resource intensive task. Yet we have to do it on a limited energy budget and we have to be quick. Luck is on our hands this time because the raspberry pi has the thing to do just that. The Raspberry pi has accelerated video encoding and decoding. These capabilities are exposed through the OpenMAX API.(Thats what OMX stands for in the omxplayer on the Rpi) We are even more lucky because a very familiar(to linux users) multimedia framework uses the OpenMAX API: GStreamer.
Gstreamer is a framework for dealing with video and audio. It provides libraries for a multitude of programming languages. It also provides a command line tool. With those tools you can build a pipeline for processing multimedia data. It works something like this pseudo example:
InputFile > resize > encode > outputToFile
This is a very flexible way to encode our video for streaming. And if we use it wisely it cam be quick too! But speaking about streaming what wireless data link should we pick?
The first thing to come to mind is WiFi. And its actually not a bad choice.
To send video over wireless link, a fair amount of bandwidth is needed. Since we want to improve on the composite quality of the current systems we need even more. Bluetooth, zigbee and xbee all lack the bandwidth. An alternative to WiFi would be a mobile cellular 3G/4G connection. But that’s gonna be pricy!
To improve upon the current systems we need to have a better video quality than 480i(640 × 480 interleaved). 1024x768 would be a significant improvement and will be the bottom line resolution quality. The minimum frame rate will be 24 frames per second. The specs that will bring out the champagne are 720p(1280x720 progressive) at 60 frames per second. In my vision audio is not important in FPV. It will be out of scope for now.
On the receiving end we want to view the feed in the field. A mobile ground station would be nice. Because our feed comes over an IP network it is logical to use a laptop or tablet to view the feed. For the coming experiments VLC or a similar app will be sufficient.
Lets get building!