Merge pull request #324 from JohnDGodwin/master

Create FPV-orange-pi-5-groundstation.md
pull/329/head
Signor Pellegrino 2024-02-13 12:36:25 +03:00 committed by GitHub
commit 1942329b06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 323 additions and 0 deletions

View File

@ -0,0 +1,323 @@
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