Developer

FPV setup with raspberry Pi

3689553118?profile=original

After much chasing, and testing, I have found this to be an efficient way of getting low latency high quality HD video out of an Aircraft. The latency is around 0.4 seconds at worst which would be OK for an FPV with an APM doing the hard work.

I will continue to search for methods to drop the latency down further, but this is a lot better than the 6-12 seconds I was getting on my first attempts.

Any comment (with useful instructions) would be appreciated.

For the wireless link, I am using two UBIQUITY ROCKET M 900 with Australian ACMA approved firmware, at the base station, I am using a tracking (yet to built the tracker...) 1.5 meter long X and Y polarised Yagi, and on the plane, two RF Design flexible strip antennas, placed at right angles to each other.

but how you do that bit is up to you.....

the critical bit is getting the Raspberry Pi's to chat to each other.

I have tried to make this as user friendly as possible... good luck.

 

Setting up IP video for Raspberry Pi 1080p video (FPV)

 

You will need 2 B model Raspberry Pi's and 1 Pi Camera. (Element 14, or RS components)

Preparing your Raspberry Pi for first boot…

 

Follow the instructions at http://www.raspberrypi.org/wp-content/uploads/2012/04/quick-start-guide-v2_1.pdf

Install the prepared SD card in the Pi and boot.

Setting up your Pi

Connect the Pi to your router with a network cable.

On Start-up it will resize the FAT partition and present you with a menu.

Set your language, and keyboard layout.

Select Raspbian… then click install.

After this has extracted (will take a while….) it will reboot into the configuration screen (again will take a while for this first boot.)

The important things to change here are

  1. Enable the camera
  2. In advance options…..
    1. Set the host name (camera, for the camera end, receiver, for the viewing end)
    2. Memory split, set the memory for the GPU to 256
    3. Enable SSH ( will come in handy later, as you may need to talk to the Pi in the air.....

Then finish and reboot.

First login

Username: pi

Password: raspberry

Setting up the required programs for video streaming

 

Install the dependencies by running the following in a terminal:

sudo apt-get install mplayer netcat

cd /opt/vc/src/hello_pi

make –C libs/ilclient

make –C libs/vgfont

cd /opt/vc/src/hello_pi/hello_video

make

cd ~

Now repeat this for the other Pi….

 

Streaming…

First set up the receiver….

Ensure the receiver is connected to your network and run

ifconfig

after you press enter, you can find your ip Address.  Note this down.

Then run the following.

mkfifo buffer

nc -p 5001 -l > buffer | /opt/vc/src/hello_pi/hello_video/hello_video.bin buffer

the Pi will now wait for the feed.

On the Camera Pi

Ensure camera is connected to the Pi

Ensure Pi is connected to the network (you can confirm this with ifconfig)

(see instructions at http://www.raspberrypi.org/camera for how to connect the camera)

 

 

In the following command, replace the ip address with the one you just noted down.

raspivid -t 0 -fps 15 -o - | nc 192.168.1.85 5001

if all goes well you should be streaming 1080P video at 15fps with less than 0.5seconds of delay..

now add your wireless bridge between the two, and away you go J

This information has come from the Raspberry Pi foundation website, and other sources, tested and proven by myself..

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones

Comments

  • to john's point, i believe that the gstreamer command line examples i left a few comments back use RTP which uses UDP by default since the video stream doesn't require the strict ordering services that TCP provides.

  • Developer
    Sounds good, any suggestions as to how :)
  • Sorry, not clear, is the video going over an IP transport ?  If yes, and you are using a network stack on the Pi, convert your video streaming to UDP and if there is any TCP control traffic set up a really big TCP window size.  This will give you much better performance on marginal reception areas without TCP retransmits.

  • phil,

    i've tried 720 x 1080 and i get very little latency, i.e. super fast, very close to 30 fps and hardware accelerated.

    config work courtesy of http://blog.tkjelectronics.dk/author/lauszus/ & matthias bock & vontaene.de for the repo 

    TKJ Electronics » Lauszus
  • Developer
    I haven't flown it yet, and haven't got any way other than a camera facing the screen to record it yet. Purely experimental. Total setup cost for the two pi's and camera is sub $100 USD. Use an Ethernet cable between for your first tests. Then if you like it, start playing with the expensive bits, the wireless.
    As you can see from the comments, there are quite a few ways of doing this, getting the onboard camera working with gstreamer looks to be a good option... I am yet to test that.
    I also want to test this with a camera on a beaglebone black and see if it works.
    So.... Only purchase the bits if you wish to experiment. It is not a finished product yet :)
  • Can you upload some video recorded on the ground station side? I would like to see the quality before I start buying hardware.
  • Developer
    Cool, what is the delay in that? Is that full 1080p?
  • Hi Phil,

    this works for me ( gstreamer )

    raspberry publish:

    gst-launch-1.0 -v tcpclientsrc host= [ raspberry ip ] port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

    raspberrry subscribe: ( os x )

    gst-launch-1.0 -v tcpclientsrc host= [ raspberry ip ] port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

    install instructions for rasbperry pi / gstreamer pre-compiled package:

    http://wiki.matthiasbock.net/index.php/Hardware-accelerated_video_p...

    config instructions 

    http://blog.tkjelectronics.dk/2013/06/how-to-stream-video-and-audio...

    Good luck!

  • Phil, 

    Excellent work. I've download the pre-compiled gstreamer1.0 on my raspberry PI successfully by referring to Matthias Bock's excellent website. 

    http://bit.ly/19pbrGl

    Then look at lauszus' site for final command line configs

    http://bit.ly/10XtSv7

    Once you've installed Gstreamer on both computers, you can publish / receive a 30 fps hardware accelerated stream.

    // publish ( rapsberry pi )

    gst-launch-1.0 -v tcpclientsrc host=[ your raspberry's ip ] port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

    // subscribe ( os x )

    gst-launch-1.0 -v tcpclientsrc host= [ your raspberry's ip ] port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

     

    Hardware-accelerated video playback on the Raspberry Pi – Wiki
  • Developer
    What are you running at the receiving end?
This reply was deleted.