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

  • I got this to work with the help of gst-rpicamsrc.  Using this package seemed to clear up a lot of the delays and jitter I was experiencing using  raspivid directly.

    1. build gst-rpicamsrc from https://github.com/thaytan/gst-rpicamsrc

    on Pi use: 
    sudo gst-launch-1.0 -e -vvv rpicamsrc bitrate=1000000 ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.0.1 port=9000

    on windows use:
    gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false

    The 'host' parameter on the Pi is the IP address of the windows (or other PC) that is the target of the stream. 

    I am waiting on trying this with a 5.8ghz wirless link MIMO/TDMA setup using Ubiquiti hardware in the UAV and a home-made antenna tracker I built before. Will post the results later.

    thaytan/gst-rpicamsrc
    GStreamer element for the Raspberry Pi camera module - thaytan/gst-rpicamsrc
  • as I look at this setup the data transport is agnostic, or now with new protocols the ability to join two data sources, I have a few parts from some of our other mobile project and will see if I can configure the fall back data to be a HSPA+ mobile network. We have latency at less than .5 sec now in mobile video teleconf systems... 

    seeing the above shows a very low number, and exciting... 

    is it a requirement to have a ras pi on the other side (basestation?) could the computer just decode the signal being set to a ip addy and port? (VLC, XBMC) has anyone tried to use different cameras?  I remember the Logitech listed had a a constant bit rate no matter the resolution .. has this changed in the software update? 

    seems like a do loop needs to be written do cover the change in signal strength that would change the bit rate, then keeping the fps up...

    Trying to make a fall back position to revert to a google earth interface when it falls below a legible video picture...

    this thread has helped allot!

  • somehow I missed this thread.. looks like I need to try the Odroid out, 

    so if MP was recompiled to allow for a hud screen to be on a second monitor now both video and telem are coming over the same freq correct?

  • Interesting

  • You guys might be interessted of how to decrease Latency to ~110-130ms at least for 720p.

    Do a

    apt-get update

    apt-get upgrade

    The result is that we now have a set of mode as follows :

    • 2592×1944 1-15fps, video or stills mode, Full sensor full FOV, default stills capture
    • 1920×1080 1-30fps, video mode, 1080p30 cropped
    • 1296×972 1-42fps, video mode, 4:3 aspect binned full FOV. Used for stills preview in raspistill.
    • 1296×730 1-49fps, video mode, 16:9 aspect , binned, full FOV (width), used for 720p
    • 640×480 42.1-60fps, video mode, up to VGAp60 binned
    • 640×480 60.1-90fps, video mode, up to VGAp90 binned

    Now you can go for higher fps rates:

    raspivid -n -w 1280 -h 720 -b 6500000 -fps 49 -vf -hf -t 0 -pf high -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay ! udpsink host=192.168.137.1 port=9000

    My conclusion: the latency is limited by a certain number of frames that the compressor needs to do its job.

    Give them these frames at a shorter time (higher fps) then you lower the latency.

    Proof:

    3701770003?profile=original

  • Hello,

     I can´t see any gui with the video in the receiver. I need to write something more than: nc -p 5001 -l > buffer | /opt/vc/src/hello_pi/hello_video/hello_video.bin buffer

    Thanks

  • Developer
    Yep, the method is the same.
  • Moderator

    What is ODroid?  Never heard of it.  Is it a alternative to raspberry pi ? 

  • Developer
    It's even better with a Pixhawk, have a look at http://dev.ardupilot.com/wiki/odroid-via-mavlink/
    Serial can be set at 1.5Mb now
  • Moderator

    I'm going to try this myself.  Has anyone tried this with Pixhawk ? 

This reply was deleted.