wiki/fpv-orange-pi-5-groundstati...

5.7 KiB

Download Ubuntu Server ISO and flash to device -- https://github.com/Joshua-Riek/ubuntu-rockchip

sudo apt update

sudo apt upgrade

Go ahead and pull some packages we will need, too.

sudo apt install dkms python3-all-dev fakeroot network-manager


Gsteamer setup with MPP

Download and install gstreamer

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5

Download and install rockchip mpp, rga, and gstreamer plugin from an included custom PPA, for hardware accelerated decoding.

sudo apt install gstreamer1.0-rockchip1 librga-dev librga2 librockchip-mpp-dev librockchip-mpp1 librockchip-vpu0 libv4l-rkmpp rockchip-multimedia-config libgl4es libgl4es-dev libdri2to3

test with:

gst-inspect-1.0 | grep 265

gst-inspect-1.0 | grep mpp


rtl8812au drivers installation

enter the following line-by-line

sudo bash -c "cat > /etc/modprobe.d/wfb.conf <<EOF
# blacklist stock module
blacklist 88XXau
blacklist 8812au
blacklist rtl8812au
blacklist rtl88x2bs
EOF"

git clone -b v5.2.20 https://github.com/svpcom/rtl8812au.git

cd rtl8812au/

sudo ./dkms-install.sh


reboot device

TODO: or figure out how to load the driver without a full reboot. Try "modprobe 88xxau"


WFB-ng installation

find wifi device name using iwconfig and substitute it for $WLAN in the script install

git clone -b stable https://github.com/svpcom/wfb-ng.git

cd wfb-ng

sudo ./scripts/install_gs.sh $WLAN

after install:

sudo systemctl enable wifibroadcast

then

sudo nano /etc/wifibroadcast.cfg

change the channel to match the vtx

change the region from 'BO' to '00'

Copy drone.key from the wfb-ng directory to the vtx's /etc directory

example using scp, replace x.x.x.x with the camera's ip address

scp drone.key root@x.x.x.x:/etc

Make sure gs.key was automatically put in /etc on the VRX side

ls /etc/gs.key


reboot device again


test the connection:

on the groundstation run

sudo systemctl enable wifibroadcast@gs

sudo systemctl start wifibroadcast@gs

wfb-cli gs

Plug in the camera and watch the packets come in, xlost should stay near zero while xrecv should go up


graphical environment for gstreamer playback

sudo apt install xorg

sudo apt install --no-install-recommends lightdm-gtk-greeter lightdm openbox

Then edit

sudo nano /etc/lightdm/lightdm.conf

insert:

[Seat:*]
autologin-user=ubuntu
xserver-command = X -nocursor

TODO: At this point, reboot and you will have to login with a keyboard at least once, but after it will auto login the ubuntu user to an openbox session with no cursor


let's set the desktop wallpaper and write some startup scripts

sudo apt install libimlib2-dev libx11-dev libxinerama-dev pkg-config make

git clone https://github.com/himdel/hsetroot.git

cd hsetroot

make

sudo make install

Save your desired background image to /home/ubuntu/desktop.png

a script to set the display resolution to 1280x720

sudo nano /home/ubuntu/setdisplay.sh

insert:

#/bin/bash
export DISPLAY=:0

if [[ $(xrandr | awk '/HDMI-1/ {print $2}') == "connected" ]]; then
xrandr --output HDMI-1 --mode 1280x720
fi
if [[ $(xrandr | awk '/HDMI-2/ {print $2}') == "connected" ]]; then
xrandr --output HDMI-2 --mode 1280x720
fi
exit 0

a script to start/stop the video stream and save DVR to the ~/Videos directory

note: This script relies on a push button connected between pin 5 and GND. You will have to install one for this to work.

Make Videos directory

sudo mkdir /home/ubuntu/Videos

Make the script

sudo nano /home/ubuntu/dvr.sh

insert:

#!/bin/bash

export DISPLAY=:0

xset s off -dpms

GPIO_PIN=5
RUNNING=0
gpio mode $GPIO_PIN up

cd /home/ubuntu/Videos

while true; do
    if [ $(gpio read $GPIO_PIN) -eq 0 ]; then
    if [ $RUNNING -eq 0 ]; then
            current_date=$(date +'%m-%d-%Y_%H-%M-%S')
	
	gst-launch-1.0 -e \
            udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H265' ! \
            rtph265depay ! \
            h265parse ! \
            tee name=t ! \
            queue ! \
            mppvideodec ! \
            videoconvert ! \
            autovideosink sync=false t. ! \
            queue ! \
            matroskamux ! \
            filesink location=record_${current_date}.mkv &
	
            RUNNING=$!
    else
            kill $RUNNING
            RUNNING=0
    fi
    sleep 0.2
    fi
    sleep 0.1
done

Make the scripts executable with chmod +x.

Finally:

sudo nano /etc/xdg/openbox/autostart

add:

bash /home/ubuntu/setdisplay.sh

hsetroot -cover /home/ubuntu/desktop.png &

sudo /home/ubuntu/dvr.sh &

Pulling the DVR over IP -- a basic media server using nginx

sudo apt install nginx-light

give permissions up the file tree to our video directory

sudo chmod o+x /home /home/ubuntu /home/ubuntu/Videos

backup the default loading page and replace it with our own

sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.old

sudo nano /etc/nginx/sites-available/default

Add the following, but replace x.x.x.x with your system's network IP address:

server {
	listen 8080;
	listen [::]:8080;

	server_name x.x.x.x;

	root /home/ubuntu/Videos;
	autoindex on;
}

restart nginx to initate the changes

sudo systemctl restart nginx

Your DVR is now available for download at x.x.x.x:8080 in a browser